J'essaie de configurer l'authentification bidirectionnelle sur une application Web exécutée sur IIS7. Les clients seront principalement des appareils mobiles et, dans un premier temps, j'essaie de lancer une démo à l'aide d'un iPad de 3e génération. J'ai pensé commencer par le faire fonctionner sur mon poste de travail (qui exécute également IIS) en premier, puis copier le certificat de travail sur l'iPad.
Mais j'ai heurté un mur.
J'ai réussi à faire fonctionner le site en toute sécurité sur https et j'ai installé un certificat de serveur auto-signé, mais je n'arrive pas à comprendre comment générer un certificat client que je peux installer sur l'iPad. Comme je travaille sur un poste de travail local exécutant Windows 7, je ne peux pas utiliser le http://machinename/CertSvr
Habituel pour ce faire.
Je me demande donc s'il existe un moyen d'obtenir makecert
pour générer des certificats client de test ou si je peux changer l'indicateur d'utilisation dans le certificat serveur pour le rendre approprié pour une utilisation sur le client. Ou peut-être existe-t-il un outil que le dernier jour de Google n'a pas encore découvert?
Mise à jour:
J'ai trouvé ce guide et l'ai suivi à la lettre. Tout semblait fonctionner, sans erreur, et je me suis retrouvé avec deux fichiers pfx, un pour le serveur et un pour le client (je les ai générés en utilisant pvk2pfx
Et j'ai conservé les .pvk
Et .cer
Au cas où).
J'ai installé le certificat serveur sous Certificates (Local Computer) > Trusted Root Certification Authority
et installé le certificat client sous Certificates (Current User) > Personal
. J'ai également importé le certificat de serveur (celui de CA) dans IIS. Tout fonctionne correctement lorsque IIS est configuré pour accepter ou ignorer les certificats clients. Cependant, une fois qu'il est défini sur "Exiger", j'obtiens un 403.7 lors de la demande du site. J'ai également essayé d'importer le certificat client au magasin de certificats dans IE/Chrome mais encore une fois pas de dés.
Y a-t-il quelque chose d'évident que je fais mal?
Peut-être que cela n'existait pas lorsque vous avez posé cette question, mais Microsoft a maintenant un GUIDE pour faire exactement cela. Facile à suivre et a parfaitement fonctionné pour moi!
Activer les certificats clients sur local IIS Express :
Modifiez\YourSlnFolder\.vs\config\applicationhost.config -> <section name="access" overrideModeDefault="Deny" />
à <section name="access" overrideModeDefault="Allow" />
<sectionGroup name="system.webServer">
...
<sectionGroup name="security">
...
<section name="access" overrideModeDefault="Allow" />
Modifiez ensuite votre Web.config comme ceci:
<configuration>
<system.webServer>
<security>
<access sslFlags="SslRequireCert" />
</security>
</system.webServer>
</configuration>
Activer les certificats clients sur [~ # ~] iis [~ # ~] :
Accédez au site Web dans IIS Manager et cliquez sur Paramètres SSL. Ensuite, définissez l'application comme Exiger SSL et Exiger les certificats clients.
Lancer l'invite de commande du développeur VS
makecert.exe -r -n "CN=TestRootCertificate" -pe -sv TestRootCertificate.pvk -a sha1 -len 2048 -b 01/01/2017 -e 01/01/2030 -cy authority TestRootCertificate.cer
Tapez votre mot de passe.
Créer une liste de révocation de certificats (CRL)
makecert -crl -n "CN=TestRootCertificate" -r -sv TestRootCertificate.pvk TestRootCertificate.crl
Bundle en .pfx (pvk2pfx.exe nécessite "développement de bureau avec C++" installé pour VS2017)
pvk2pfx.exe -pvk TestRootCertificate.pvk -pi {password} -spc TestRootCertificate.cer -pfx TestRootCertificate.pfx
makecert.exe -ic TestRootCertificate.cer -iv TestRootCertificate.pvk -pe -sv localtestclientcert.pvk -a sha1 -n "CN=localtestclientcert" -len 2048 -b 01/01/2015 -e 01/01/2030 -sky exchange localtestclientcert.cer -eku 1.3.6.1.5.5.7.3.2
Tapez votre mot de passe.
pvk2pfx.exe -pvk localtestclientcert.pvk -pi {password} -spc localtestclientcert.cer -pfx localtestclientcert.pfx
Importez les certificats.
Démarrez mmc.exe.
File -> Add or Remove Snap-ins -> Certificates -> Add -> Computer account -> Local computer
Certificates (Local Computer) -> Personal -> Certificates -> Right click -> All tasks -> Import -> localtestclientcert.pfx
Certificates (Local Computer) -> Trusted Root Certification Authorities -> Certificates -> Right click -> All tasks -> Import -> RootCertificate.cer
Utilisé pour l'authentification dans un navigateur:
File -> Add or Remove Snap-ins -> Certificates -> Add -> My user account
Certificates - Current User -> Personal -> Certificates -> Right click -> All tasks -> Import -> localtestclientcert.pfx
L'accès à votre site nécessite désormais un certificat client auquel le serveur fait confiance:
Si vous avez suivi ce guide et obtenez une erreur comme:
HTTP Error 500.19 - Internal Server Error
The requested page cannot be accessed because the related configuration data for the page is invalid.
Ou
HTTP Error 403.7 - Forbidden
The page you are attempting to access requires your browser to have a Secure Sockets Layer (SSL) client certificate that the Web server recognizes.
Vous devrez peut-être redémarrer votre ordinateur. Notez qu'il ne suffira pas de fermer le processus iisexpress ou Visual Studio. Le 500.19
peut être résolu sans redémarrage mais les certificats sont délicats, donc l'approche recommandée consiste à redémarrer votre ordinateur.
Si vous obtenez l'erreur The request was aborted: Could not create SSL/TLS secure channel
cela peut être dû au fait que le pool d'applications n'a pas accès au certificat spécifique.
Certificats (ordinateur local) -> Personnel -> Certificats -> localtestclientcert -> Clic droit -> Toutes les tâches -> Gérer la clé privée -> Ajouter IIS APPPOOL\YourWebSite
et lui accorder le contrôle total.