1 votes

La connexion à un serveur web avec le SSL bidirectionnel activé ne demande pas de certificat dans aucun navigateur et renvoie l'erreur 403.7.

J'ai essayé de mettre en place un site Web avec un système SSL bidirectionnel dans IIS 10. Cela ne se passe pas très bien.

J'ai déjà un domaine que j'ai obtenu par NameCheap, et j'ai un DNS par CloudFlare (DNS seulement, pas de proxy).

Le serveur a un certificat pour ce domaine que j'ai obtenu par Certify avec Let's Encrypt.

Sur ce serveur, j'ai configuré AD CS et l'ai utilisé pour créer une autorité de certification.

CA Web Enrollment est actif et accepte les demandes uniquement à partir d'une connexion VPN mise en place via RRAS (je ne voulais pas qu'il soit ouvert à l'Internet, et d'ailleurs la connexion VPN utilise le certificat que j'ai obtenu précédemment, donc cela fonctionne correctement).

Le PC client a lancé un certificat et l'a envoyé au serveur en utilisant CA Web Enrollment à travers le VPN. Cette demande a ensuite été émise, et le certificat résultant ainsi que l'AC ont ensuite été importés dans la base de données CurrentUser \My , LocalMachine \TrustedRoot respectivement. J'ai également vérifié que le certificat du client possède une clé privée.

Jusqu'à présent, la situation des certificats est la suivante :

-Serveur : CA (LocalMachine \TrustedRoot (pas de clé) et LocalMachine \My (clé)), le certificat du serveur (LocalMachine \My (clé)).

-Client : CA (LocalMachine \TrustedRoot (sans clé)), le certificat du client (CurrentUser \My (clé)).

Vient ensuite la configuration de IIS : Il y a trois sites sur le serveur. Le premier est le site par défaut avec l'application certsrv, il n'écoute que sur l'IP VPN et localhost, et n'a que HTTPS actif avec le certificat du serveur (ports 443 tous les deux). Le second est un site FTP qui n'écoute que sur l'IP VPN et le port 21. Ceux-ci ne sont pas pertinents, je les mentionne seulement parce que je ne veux pas oublier quelque chose.

Le troisième est celui qui nous intéresse. Il écoute le nom de domaine, n'importe quelle adresse IP, et a à la fois HTTP et HTTPS actifs (avec les ports 80 et 443 respectivement). HTTP est seulement actif pour que URL Rewrite puisse le rediriger vers HTTPS, et HTTPS utilise le certificat du serveur.

Ce site a le SSL requis activé et les certificats clients requis.

Dans Authentification, toutes les méthodes sont désactivées.

Dans system.webServer/security/authentication/iisClientCertificateMappingAuthentication, Enabled a la valeur true et manyToOneCertificateMappingsEnabled la valeur true. Dans manyToOneMappings, j'ai un élément mappé à un utilisateur sur le serveur, et dans les règles, j'en ai une avec certificateField=Issuer, certificateSubField=CN, et matchCriteria="nom de l'AC que j'ai créée".

Une clé de registre nommée SendTrustedIssuerList avec une valeur de 1 a été créée dans l'ordinateur \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL.

Le certificat du serveur a été supprimé et ajouté à nouveau avec clientcertnegotiation=enabled à la liaison domain:443 sur le site en utilisant netsh dans powershell.

Enfin, j'ai utilisé IISCrypto à partir de https://www.nartac.com/Products/IISCrypto/ pour mettre en place des protocoles dans l'ordinateur \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols.

C'est tout ce que j'ai fait jusqu'à présent et cela devrait couvrir toutes les réponses à des problèmes similaires partout sur Internet, mais tout ce que cela fait, c'est me donner une erreur 403.7. J'ai utilisé wireshark pour vérifier le trafic TLS pendant une tentative de connexion et le serveur semble envoyer le certificat de demande avec la liste des CA de confiance (mon CA est inclus dans la liste) mais je ne peux pas obtenir un navigateur qui me demande un certificat client. J'ai oublié de mentionner que j'ai ajouté les certificats de l'autorité de certification et du client via les navigateurs et que l'option Do not prompt when you have only one cerrificate d'IE 11 est désactivée, mais toujours rien.

Des idées ?

0voto

J'ai réussi à le faire fonctionner à la fin. IIS était configuré correctement, le problème venait des certificats, je ne sais pas pourquoi mais les navigateurs ne les aimaient pas. J'ai donc supprimé AD CS du serveur et refait le certificat CA et client avec powershell. Ces nouveaux certificats fonctionnent très bien et tous les navigateurs me demandent de les utiliser après les avoir placés là où ils doivent aller.

En attendant, les commandes powershell étaient les suivantes :

$params = @{
   DnsName = "CA Name"
   KeyLength = 2048
   KeyAlgorithm = 'RSA'
   HashAlgorithm = 'SHA256'
   KeyExportPolicy = 'Exportable'
   NotAfter = (Get-Date).AddYears(5)
   CertStoreLocation = 'Cert:\LocalMachine\My'
   KeyUsage = 'CertSign','CRLSign'
}

$rootCA = New-SelfSignedCertificate @params

Export-Certificate -Cert $rootCA -FilePath "C:\path\to\file\ca-public.crt"

Import-Certificate -CertStoreLocation 'Cert:\LocalMachine\Root' -FilePath "C:\path\to\file\ca-public.crt"

$params = @{
   Subject = "Client Name"
   Signer = $rootCA
   KeyLength = 2048
   KeyAlgorithm = 'RSA'
   HashAlgorithm = 'SHA256'
   KeyExportPolicy = 'Exportable'
   NotAfter = (Get-date).AddYears(5)
   CertStoreLocation = 'Cert:\LocalMachine\My'
}

$clientCert = New-SelfSignedCertificate @params

Export-PfxCertificate -Cert $clientCert -FilePath "C:\path\to\file\client-private.pfx" -Password (ConvertTo-SecureString -AsPlainText 'password' -Force)

Il suffit ensuite d'importer les certificats dans les magasins aproppriés sur la machine cliente.

Je ne sais pas ce qui manquait aux certificats créés avec AD CS, mais je suis content d'avoir une solution qui fonctionne.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X