Comment passer mon site en https ?

C'est toujours la même chose, on croit prendre assez de notes pour être capable de refaire une opération délicate comme le passage d'un site de http "normal" au https "sécurisé" et obligatoire aujourd'hui et puis lorsque l'on y revient, on se rend compte que l'on croyait en avoir fait assez mais ce n'est pas le cas.

J'avais bien écrit quelque chose dans : C# NET, je tape "ssl" dans la barre de recherche :

C# .NET - SSL

Je trouve un article sur la possibilité de générer un certificat ssl par OpenSSL mais ce n'est que du localhost pour une plateforme Angular en Débug.

C# NET - IdentityServer4 Client Angular comment passer de Http à Https

Pour le reste, il me semble bien que je n'aie plus rien. Alors si, je me rappelle avoir été obligé d'acheter un certificat SSL auprès de l'hébergeur de mon site mais j'ai laissé passer la dernière relance, où il me demandait environ 25 euros/an pour ce certificat !

C'est un comble, le fournisseur qui vous donne un nom de site vous demande de l'argent pour certifier votre site. Je crois bien que c'est cela qui m'a poussé à vouloir trouver une alternative.

Pour vérifiez votre certification SSL

Il y a un site pour vérifier votre certification :  

SSL Server Test (Powered by Qualys SSL Labs)

Je vérifie que ma certification SSL est bien expirée !

Me voici donc dans un peu de lecture :

angle web - Sécurisez votre site Web en HTTPS
Cela me semble bien complet, il détaille les différents hébergeurs, leurs façons de procéder pour vous fournir la certification SSL. OVH c'est une option de l'hébergement (le plus pratique il suffit de cocher une case).

Digital Guide - IONOS Le rôle des certificats SSL

Et du coup me voilà en train de renouveler mon certificat SSL pour mon nom de domaine tout un patacaisse qui commence ici :

https://www.namebay.com/cert/CSR/IIS7/index.htm

Et qui va se terminer en allant installer ce que l'hébergeur m’envoie par email ... Donc il n'y a pas de miracle c'est vraiment une affaire de professionnels.

Gestion des certificats https avec IIS

Voici deux copies d'écran de mon Serveur IIS, pour nous rappeler que les certificats sont gérer à la racine du serveur de IIS :

Gestion des certificats https avec IIS
Gestion des certificats SSL https avec IIS

En cliquant sur l'icône Server Certifcats, vous obtenez la liste des certificats installés sur votre Serveur IIS :

Gestion des certificats SSL https avec IIS
Gestion des certificats SSL https avec IIS

En sélectionnant un des certificats SSL dans la liste des certificats installés, vous obtenez une série de d'actions possible sur la droite :

  • View ...
  • Export ...
  • Renew...
  • Remove...

En cliquant, colonne de droite, sur la fonctionnalité Renew ... de mon certificat SSL :

Renew My certificat SSL - avec IIS
Renew My certificat SSL - avec IIS

Vous avez encore trois choix possibles, vous allez pouvoir renouveler votre certificat d'après le certificat du domaine si vous avez acheté un certificat de domaine ... environ 400 € / an ! 

Voilà Internet est maintenant réservé aux professionnels qui doivent y gagner beaucoup d'argent pour faire certifier leurs serveurs. 

Sinon, j'essaye de reprendre avec Let's Encrypt ...

Let's Encrypt pour obtenir un certificat SSL

Il me semblait bien pourtant dans ma mémoire profonde que par Let's Encrypt, j'étais arrivé à un résultat non nul.

Let's Encrypt pour vos certificats SSL Gratuit
Autorité de certification à but non lucratif

Mais la certification en passant par Let's Encrypt est très fastidieuse, il faut exécuter des Scripts Shell sur votre serveur et vous plonger au cœur de la certification. 

Mais je n'ai plus le temps de jouer, ils ont malheureusement gagné.

Au passage, il me faudra quand même faire tout un tas d'aller-retour par email, entre mon hébergeur l'organisme de certification ... pour approuver à chaque étape.

Certificats SSL GlobalSign
Certificats SSL GlobalSign

Le tout pour une facture de 31,5 Euros TTC/an ! 

Mais il existe tout une série de type de certificats, par exemple chez namebay - Certificats SSL

Certains certificats SSL sont infiniment chers ~399 €/an !!!

Voilà depuis longtemps déjà les dérives d'Internet même à l’accélération d'un monde consumériste. La massification de l'Internet créée les conditions de l'avènement des Trolls.

Sinon, j'ai retrouvé par miracle un vieil article sur le sujet qui donne LA Solution : 

ASP.NET C# - IIS Certificate Management - Comment installer un certificat SSL sur mon Site Web derrière IIS ?

WPF avec .NET Core et .NET Framework

Je cherche à créer un projet WPF (Windows Presentation Foundation) et Visual Studio Community 2019 que puis-je instancier comme applications WPF sur quel type de .NET Framework ?

Avec Visual Studio Community 2019 le choix des templates d'applications à bien changé (dans la forme ) :

Visual Studio - Template d'applications

Je peux créer une application WPF soit avec .NET Framework soit avec .NET Core. Mais je peux également créer une application de Navigateur avec .NET Framework :

Visual Studio - Template d'application de Navigateur

Cela me fait penser aux vieilles applications XBAP en WPF pour le navigateur qui ne fonctionnaient que sur Internet Explorer, IE comme on l'appelait.

Je vous laisse de côté le Visual Basic, ce serait bien stupide de vouloir développer aujourd'hui en Visual Basic. Sacré Bilou, il aura fallut qu'il continu de nous gonfler avec son foutu langage Visual Basic qui lui survivra ...

Si j'instancie une Application de Navigateur WPF et que je "run" :

Visual Studio - Application de Navigateur XBAP

Il s'agit bien d'un fichier XBAP qui essaye de se charger dans mon navigateur.

Mais laissons cela de côté.

D'une part, j'ai une application WpfAppCore1 avec .NET Core :

WPF application with .NET Core
WPF Application with .NET Core

Et de l'autre, j'ai la même application mais avec comme Référence .NET framework :

WPF application with .NET Framework

Quelles autres différences entre WPF .NET Framework et WPF .NET Core :

Il y a un fichier App.config et .NET Framework.

Dans les csproj :

<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>

Et :

<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>

Différences entre WPF .NET Core et WPF .NET Framework

Voilà, on vient de voir les trois types d'application WPF que l'on peut instancier avec Visual Studio Community 2019.

Tous ceux qui pensent encore que ce n'est pas possible de faire du WPF sur .NET Core vont devoir mettre à jour leur copie et moi le premier.

IdentityServer4 Manage List of Users

C'est toujours la même question car je n'ai pas trouvé de réponse, comment manager mes utilisateurs avec IdentityServer4 ? Quelle est la frontière entre IS4 et .NET Identity. Qui ressemble, pour les anciens, à l'ASP.NET DB.

ASP.NET Core Identity - Authentification

Je suis surpris que l'on nous laisse entre les mains des créateurs de l'IdnetityServer4 avec une version payante de l'AdminUI (version à 500 L, oui c'est de l'english, pour la moins chère) qui en plus ne correspond pas à mon besoin car je souhaite simplement une DataView ou une GridView sur la tables de mes utilisateurs pour manager mes Users et leurs rôles au sein de mon application Web ASP.NET Core.

Je n'ai pas besoin de tout le tintouin configuration des clients c'est déjà fait, Policy, Claims, ... bref je vais la développer cette Interface de Gestion des Utilisateurs. Mais avant de définir les specs de mon projet, je suis prudent et je regarde plus avant ce que je peux faire avec IdentityServer4 ...

Role Based Security in an ASP.NET Core Application
DotNetCurry ! Ils ont de l'humour ces gars là, vous ne trouvez pas ! Avec ce nom vous pensez qu'ils sont indiens, certainement.

AspNetCore Identity - Tables

Pour enregistrer un utilisateur, il faut commencer par créer des Rôles afin d'enregistrer l'utilisateur avec son Rôle.

AspNetCore Identity - Roles cretation

Ce qui se traduit dans la base de données par le contenu de la Table AspNetRoles suivant :

AspNetCore Identity - AspNetRoles

Et dans la Table AspNetUser Roles par :

AspNetCore Identity - AspNetRoles

On a fait le tour de la gestion des Rôles mais il faudrait que l'on puisse ajouter un User dans un Rôle ou retirer un User d'un Rôle.

Et pour continuer, voici l'excellent site :

YOGIHOSTING » ASP.NET CORE » HOW TO WORK WIT...
Finalement j'ai eu du mal à trouver mais là il y a tout, tout ce que je veux pour réaliser mon application idéale de Gestion des Utilisateurs de mon application Web.

https://www.yogihosting.com/aspnet-core-identity-create-read-update-delete-users/

Merci à cette équipe et oui il s'agit bien de toute une équipe ...

ABOUT THE AUTHOR
This article has been written by the Technical Staff of YogiHosting. Check out other articles on "ASP.NET Core, jQuery, EF Core, SEO, jQuery, HTML" and more.


Maintenant, il ne reste plus qu'à intégrer tout cela dans mon projet StsIdentityServer4.

Il y a un bel exemple de poursuite du développement sur la base d'un IdentitytServer4 c'est ici :

GitHub - BenjaminAbt / Samples.AspNetCore-IdentityServer4

Et sinon, nous avons maintenant notre propre IdentityServer4 avec Gestion des Utilisateurs, n'hésitez pas à nous contacter. Nous mettrons surement prochainement en ligne les codes sources si vous nous en faites la demande (gentiment ;-).

IdentityServer4 How To Manage Users and Roles and Community

Evidemment, pour répondre à ce besoin, il y a le site payant avec leur AdminUI mais je suis déçu, je n'ai passé que très peu de temps à m'enregistrer et a lire la documentation mais surtout c'est une "application de poste". Je souhaitais une application web de management de mes utilisateurs.

Identity Server - ASP.NET Core solution
IdentityServer4 - Site Commercial - ASP.NET Core

Voici le site de l'AdminUI :

IdentityServer4 - AdminUI
IdentityServer4 - AdminUI ~ 500 $

J'ai installé les templates, dedans il y en a un qui s'appelle is4admin mais si vous croyez qu'il y a la moindre UI de Gestion des utilisateurs et des Roles là dedans, je crois que c'est raté !

https://github.com/IdentityServer/IdentityServer4.Templates

Si j'installe tout et si je fais :

http://localhost:5000/admin

Il ne se passe rien ! Pas d'Admin !

IdentityServer4 - ASP.NET Core solution
is4aspid - IdentityServer4 - ASP.NET Core

Les sources de ce serveur d'authentifications sont Ici :

https://github.com/IdentityServer

Une fois entré avec The default users are alice/bob, password: Pass123$

On ne peut plus rien faire, tout le site ne consiste qu'à gérer les configurations des sources de IdentityServer4, donner quelques bases sur le configuration de votre client qu'il soit MVC, API, Angular ou autre et puis c'est tout.

IdentityServer4 - ASP.NET Core solution
Login into is4aspid project an ASP.NET Core Solution

J'essaye de titiller les différents contrôleurs : Grants :

IdentityServer4 - ASP.NET Core solution
IdentityServer4 - ASP.NET Core - Samples for Grants

Aucun exemple pour découvrir comment attribuer des Grants à Alice Smith. Grrr. 
Franchement avec tous ces trucs UI is4ui et autres, je pensais trouver mieux, il n'y a pas même un formulaire de Register.

Tout le reste consiste à nous montrer que leur Server d'Identité fonctionne mais de façon pratique rien n'est codé du côté UI. Il faut aller acheter sur le site :


Dont la documentation est fournie Ici :


Alors si je vais voir ailleurs avec les mots clefs : AdminUI for IdentityServer4 ...
un peu plus loin il y a :


Mais le gars Skoruba,, il plombe son projet avec tout un tas de trucs c'est très compliqués ça va surement devenir payant.

Il y a lui, Asad Sahi :

https://github.com/asadsahi/AspNetCoreSpa

Il y réussi a installer un IdentityServer sur une machine mais bon ... c'est tout Grrrr.

Ou encore cette page répertoire des projets OpenSource

https://awesomeopensource.com/projects/identityserver4
C'est une sorte de répertoire des projets Open Source : "The Top 28 Identityserver4 Open Source Projects" j'y retrouve les projets que je connais déjà.

Skoruba/IdentityServer4.Admin
Trop compliqué ! Et puis il met son nom partout Skoruba par ci Skoruba par là, ça ne fait pas très pro en tous les cas il y a du code plein de code.

Si j'avais un tel projet à créer et à développer je l'appellerai IdentityServer4.AdminUI

Franchement quand je regarde :

https://dotnetnew.azurewebsites.net/template/IdentityServer4.Templates/IdentityServer4.Admin

J'ai l'impression que l'AdminUI est dedans ....

J'ai créé un nouveau projet à partir de la commande suivante :

PS>dotnet new is4admin

Et j'ai créé ainsi un projet un peu différent est ce la réinstalle du Template ... mystère.

J'ai deux bases de données :

{
  "ConnectionStrings": {
    "Users": "Data Source=AspIdUsers.db;",
    "Configuration": "Data Source=IdentityServer.db;"
  }
}

Donc maintenant, j'en suis sûr je me suis trompé de template certainement en instanciant le premier exemplaire.

IdentityServer4 AdminUI

J'ai enfin accès en instanciant un projet avec la commande. Je me lance dans une exploration rapide.
Exécution de l'application :

IdentityServer4 AdminUI - ASP.NET Core
IdentityServer4 AdminUI - ASP.NET Core

Alors où vais-je me retrouver quand j'aurais cliqué sur ce lien ? C'est une DLL intégrée certainement avec de l'obfuscationdans. Le site principal dit :

The community edition is intended for testing IdentityServer integration scenarios and is limited to localhost:5000, SQLite, 10 users, and 2 clients. The community edition is not suitable for production.

See identityserver.com for more information about AdminUI or to request a trial license.


Ok Start !

IdentityServer4 AdminUI découverte
IdentityServer4 AdminUI - Découverte

Je me retrouve enfin dans l'Administration du Serveur IdentityServer4, ce n'est pas trop tôt.

IdentityServer4 AdminUI - Découverte enfin l'UI

Je peux alors ajouter un utilisateur :

IdentityServer4 AdminUI - Ajouterun Utilisateur
IdentityServer4 AdminUI - Ajouter un Utilisateur

Je passe par l'onglet Claim Types un truc intéressant une liste de Claims je choisi birthdate je peux la rendre obligatoire et éditable par l'utilisateur par contre au moment de sauver :

IdentityServer4 AdminUI - Claim Types

Grrrr ça paraissait simple, j'oblige les nouveaux utilisateur à entrer leur date de naissance et je la rends éditable ... mais non ... je verrai ça plus tard.

Du coup je me dis que je devais supprimer tous les utilisateur pour modifier la structure de la base mais c'est pas ça GRRRR.

Je clique par hasard sur Active et je restore mon utilisateur.

IdentityServer4 AdminUI - Restore un utilisateur

Voilà un tour super rapide de l'interface, c'est bien ce que j'attends de l'AdminUI d'IdentityServer4 mais c'est dommage parce que je pensais bien que ce boulot était fait et non payant.

En plus sur ce genre de produit, c'est toujours la même chose, ils déclinent dans toutes les langues sur toutes les plateformes, dans tous les langages de programmation et cela devient bien trop compliqué.

Pour aller plus loin, encore un peu de lecture :

Visitez notre implémentation de l'IdentityServer4

Pour visiter en ligne, notre implémentation, voici l'IdentityServer4 de SoDevLog :

Welcome and Register to IdentityServer4 by SoDevLog

Sur ce formulaire d'enregistrement de l'utilisateur vous pouvez constater qu'il y a des champ supplémentaire que nous désirons recueillir de la part de nos utilisateurs :

  • Date de naissance
  • Société
  • Addresse

Suivant la façon dont l'utilisateur rempli ces champs, nous pouvons immédiatement en déduire ses intentions.

Nous cherchons à acquérir de vrais clients motivés qui doivent passer un peu de temps à remplir correctement ces champs.

Découvrons le projet Open Source Myrtille avec Visual Studio 2019

Il s'agit d'une application Web permettant de vous connecter aux ordinateurs à distance. Un RDP (Remote Desktop Protocol) en application Web.

Voici l'adresse du Github :

GitHub - cedrozor/myrtille

On nous dit qu'il faut Visual Studio 2017. Alors peut-on ouvrir la solution avec Visual Studio 2019 Community... ?

Je clone le répertoire sur mon disque dur grâce à GitHubDesktopSetup que je viens d'installer :

Github Clone myrtille

J'ouvre mon Visual Studio 2019 Community et j'ouvre la solution :

..\Visual Studio 2019\GithubClone\myrtille\Myrtille.sln

C'est toujours un moment délicat, soit tout va bien se passer et on va pouvoir continuer le développement, browser les sources regarder les modèles de données, soit l'ouverture du projet crash et il va falloir remédier avant d'imaginer utiliser les codes sources.

Ici, avec myrtille, l'installeur n'est pas compatible avec Community mais ça on le sait :

Installeur de myrtille incompatible avec VS Community

Pour le reste tout à l'air de se passer correctement.

Installeur de myrtille incompatible avec VS Community

Le chargement du projet myrtille me demande d'installer "Desktop development with C++".


Allons y ! C'est long, l'installation de la totalité de la chaîne et des outils de développement en C++.

Visual Studio 2019 Community se ferme automatiquement. Le processus d'installation sur ma machine actuelle prend environ 7 à 8 minutes. Visual se réouvre automatiquement avec un message "The installation has completed".

Me voilà avec un projet de développement myrtille :

Myrtille sous Visual Studio 2019 Community
Myrtille sous Visual Studio 2019 Community

Tout ceci m'a l'air très prometteur pour faire une incursion dans les technologies du projet. Si j'étais bourin, je ferais bouton droit sur la solution "Rebuild solution" mais je n'irais pas loin.

Essayons de voir ce qu'il manque en parcourant les références des différents projets. Le framework de myrtille c'est le .NET Framework 4.5. Je lance un coup de DotNetVersion sur ma machine de développement :

DoNet Version

Oups ... sur ma machine de DEV actuelle, je passe du 4.0.0.0 au 4.7.03062 ça n'est pas bon pour myrtille. La question est comment passer de .NET Framework 4.5 au .NET Framework 4.7 d'autant que je travaille actuellement sur cette machine avec .NET Core 3.0 ... 

Pour les amateurs de salmigondis :

Microsoft - Prise en charge des implémentations de .NET
En gros, il me faudrait installer une nouvelle machine (ancienne plutôt car 4.5 est un framework qui n'est plus supporté par le .NET Standard 2.1 cf. le tableau). 

Microsoft - Vue d'ensemble du Portage à partir de .NET Framework vers .NET Core
La migration de .NET Framework 4.5 vers .NET Core c'est peut être la solution mais dans ce cas; il y a du travail. Attention la dette technique augmente !

Vous avez une solution, vous êtes concerné par le projet "myrtille" n'hésitez pas à laisser votre commentaire, merci.

Installer un site web sur une Machines Virtuelles dans l'Azure

Je souhaite configurer mes sites web dans l'Azure.  il me faut installer des machines virtuelles leur attribuer des adresses IP fixes publique et leur attribuer un nom de sous domaine. En suite installer IIS sur les machines virtuelle et déployer les sites que je souhaite installer.

Tous les éléments

Seulement voilà, suite à une manipulation hasardeuse, j'ai supprimé un truc que je ne trouvais pas utile et je perds ma machine virtuelle SODEVLOG-002 en effet elle se retrouve sans adresse IP publique. Je vais rectifier tout ça.

Plus d'adresse IP publique

Dissocier de l'interface réseau

Ajouter une légende
Quand tout va bien on a ceci :

Machine Vistuelle avec adresse IP publique

Ce qui ne va pas c'est cela :

Plus de Machine virtuelle associée à mon adresse IP

Le souci, c'est que le bouton Associer vous laisse pantois :

Adresse IP Publique Associée à Aucun élément disponible

Mais ce n'est pas là qu'il faut associer, ce qu'il faut associer c'est la machine virtuelle à l'interface réseau :

Associer une adresse IP publique à une machine virtuelle dans l'Azure

En procédant comme suit :

Ajouter une légende

Voilà maintenant ma machine virtuelle à retrouver son adresse IP publique. Normalement si tout se passe bien, vous n'avez pas à faire cette manipulation mais je la montre ici car elle peut être utile. Les suppressions intempestives sont très vites exécutées dans l'Azure.

Accéder à un site Web derrière l'IIS d'une Machine Virtuelle

Une fois la machine parfaitement configurée avec sont adresse IP fixe et publique, il ne faut pas oublier dans l'Azure de réaliser les manipulations suivantes pour donner l'accès à aux ports https :

Configuration des ports HTTP et HTTPS d'une machine virtuelle dans l'Azure

Voilà, ce n'est pas parce que c'est dans l'Azure que c'est plus facile, certes l'interface de configuration, votre tableau de bord Azure vous aide en vous montrant les paramètres à configurer mais toutes les manipulations sont à réaliser comme sur une machine réelle.


C'est quoi Azure Key Vault ?

Parmi les choses à découvrir, on me parle de Key Vault dans l'Azure. Alors allons à l'essentiel et découvrons rapidement ce qu'est que le Coffre de clés Azure Key Vault.

Aure Key Vault

D'autant que lorsque l'on tombe sur les pages marketing de Microsoft, ce n'est pas forcément très clair : "Vous disposez d'un contrôle complet, sans effort, Key Vault ne nécessite ni logiciel de gestion de clés." Cette phrase est incertaine et n'apporte rien, ou pas grand chose, bref ce marketing est bien inutile.

Microsoft - A propos d'Azure Key Vault

On y parle de gestion des secrets, on se croirait dans une émission de télé ... Globalement, il s'agit de centraliser et de sauvegarder dans le Cloud Azure les "secrets des applications". Mais alors quels sont ces secrets que l'on peut cacher ?

Voici l'exemple d'une chaîne de connexion qui se trouve sauvegardée dans le fichier Web.config ou appsetting.json d'une application Web, il faut sécuriser cette partie de l'application d'autant plus que le couple user/password peut être "en clair" dans ces fichiers. Et bien là, vous pouvez stocker cette chaîne de connexion dans Key Vault.

Pour aller plus loin et avoir une idée rapide des détails techniques d'implémentation, voici la page suivante :

Microsoft - Authentification, requête et réponses
On y parle d'URL, d'API REST et des moyens de mettre en oeuvre la sécurité autour de Key Vault.

Vous pourrez utiliser Postman, cet outil qui permet de simuler une application qui fait des requêtes REST sur une API.

Donc pour finir, voici comment utiliser : l'Azure REST API Reference

Microsoft - Azure REST API Reference

Pour aller encore plus avant, je vais maintenant directement sur mon Portail Azure pour créer un Coffre de clés :

Mon Portail Azure - KeyVault
Mon Portail Azure - KeyVault

Je clique sur +Ajouter :

Gérer les Key Vault dans mon Portail Azure
Gérer les Key Vault dans mon Portail Azure

Voilà, ici j'ai des informations sur la Création d'un coffre de clés :

Azure - Créer un coffre de clés

Par la suite, je vais devoir choisir la Stratégie d'accès :


Azure Key Vault - Stratégie d'accès 

Puis le wizard me conduit vers la Mise à niveau :

Azure Key Vault - Stratégie d'accès

Enfin, je peux créer une première balise qui va me permettre de "sécuriser", de crypter une valeurs que je pourrais en suite utiliser dans mes applications en utilisant l'API REST d'Azure.

Azure Key Vault - Balises

Je ne peux pas aller plus loin sans m'engager dans l'utilisation et le paiement de ce service. Je vais donc ma'arrêter là mais je pense que comme moi vous avez compris comment et à quoi sert Azure KeyVault.

Mais voilà, nous venons de faire un tour rapide de ce qu'est Azure Key Vault, le coffre de clés pour sécuriser les informations critiques de vos applications.

Mise à jour en septembre 2020 
Je me pose la question de savoir si ce n'est pas exactement la même chose proposée gratuitement par GitHub ... Lorsque vous avez créé une "Organization" et que vous parcourez l'item "Secrets", comme ceci :

GitHub - Organization - Secrets

Vous avez la possibilité de créer des secrets... chut, un secret est un secret ! A creuser, mais il me semble bien que oui ;-)

Don't forget to go to the beach!