web-dev-qa-db-fra.com

L'authentification par certificats mutuels échoue avec l'erreur 403.16

J'utilise Windows Server 2012 et IIS 8.5. J'ai défini SSL pour le site Web et les paramètres SSL sont les suivants: Exiger Obligatoire et Exiger des certificats clients.

Le certificat client que j'envoie au serveur a été émis par une autorité auto-signée (appelons-le MyCompany CA). Le certificat d’autorité de certification MyCompany a été installé avec succès dans le compte d’ordinateur local - Autorités de certification racines de confiance. Sa date d'expiration est 2039, de même que la date d'expiration du certificat client.

Cependant, avec toute cette configuration, je reçois une erreur 403.16 comme résultat. J'ai activé les règles de suivi des demandes ayant échoué et j'ai réussi à enregistrer une demande erronée et à obtenir quelques détails supplémentaires à ce sujet:

52.- MODULE_SET_RESPONSE_ERROR_STATUS - Avertissement Nom du module - IIS Web Core Notification - BEGIN_REQUEST HttpStatus - 403 HttpReason - Interdit HttpSubStatus - 16 Une chaîne de certificats traité, mais terminé par un certificat racine non approuvé par le fournisseur de confiance. (0x800b0109) ConfigExceptionInfo

J'ai vérifié plusieurs sites en ce qui concerne le résultat 403.16 et le code d'erreur 0x800b0109 et tous indiquent que l'autorité de certification n'a pas été installée dans l'ordinateur local - Autorités de certification racines de confiance, mais ce n'est pas mon cas.

Merci!

14
Javier Holguera

J'y travaille depuis longtemps et je l'ai enfin trouvé! 

Ajoutez une nouvelle clé à HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL Nom de la valeur: ClientAuthTrustMode Type de valeur: REG_DWORD Données de la valeur: 2

Actualisez la page Web, sélectionnez le certificat et regardez la magie se produire.

Recherche

Sous Windows 8 et IIS 8.5, j'ai suivi les instructions ici http://itq.nl/testing-with-client-certificate-authentication-in-a--development-environment-on-iis-8-5/ .

Les certificats ont été créés au bon endroit et tout a été configuré correctement dans IIS, mais j'ai continué à avoir des erreurs 403.16.

Après l'échec des nombreux articles MSDN et autres tentatives, j'ai trouvé le paramètre de registre suivant.

Définissez HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL Nom de la valeur: ClientAuthTrustMode Type de valeur: REG_DWORD Données de la valeur: 2

Définissez HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL Nom de la valeur: SendTrustedIssuerList Type de valeur: REG_DWORD Données de la valeur: 0 (Faux ou supprimer entièrement cette clé)

Voici quelques informations supplémentaires sur ce paramètre spécifique (disponibles ici: http://technet.Microsoft.com/en-us/library/hh831771.aspx )

Valeurs par défaut pour les modes de confiance Le fournisseur Schannel prend en charge trois modes de confiance pour l’authentification du client. Le mode de confiance contrôle le mode de validation de la chaîne de certificats du client. Il s’agit d’un paramètre global contrôlé par REG_DWORD «ClientAuthTrustMode» sous HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\Schannel.

0 Confiance de la machine (par défaut) Nécessite que le certificat client soit émis par un certificat de la liste des émetteurs approuvés.

1 Approbation racine exclusive Nécessite qu’un certificat client soit lié à un certificat racine contenu dans le magasin d’émetteurs de confiance spécifié par l’appelant. Le certificat doit également être délivré par un émetteur figurant dans la liste des émetteurs de confiance.

2 Approbation exclusive de l'autorité de certification Requiert qu'une chaîne de certificats client soit associée à un certificat d'autorité de certification intermédiaire ou à un certificat racine dans le magasin d'émetteurs approuvés spécifié par l'appelant. 280256.

J'espère que cela fonctionnera pour vous aussi.

46
Brett

J'ai essayé la solution suggérée ci-dessus et cela fonctionne bien. 

Une solution alternative n'impliquant pas l'édition du registre: 

https://support.Microsoft.com/en-us/help/2795828/lync-server-2013-front-end-service-cannot-start-in-windows-server-2012

L’essentiel de cet article est de supprimer tous les certificats non signés du dossier Racine approuvée de l’ordinateur local.

Si vous utilisez des stratégies de groupe pour déployer des certificats, assurez-vous que le magasin des autorités de certification racines de confiance ne contient que des certificats auto-signés (certificats dans lesquels la propriété de certificat "Subject" est identique à la propriété de certificat "Issuer"). Déplacez tous les certificats qui ne sont pas des certificats auto-signés du magasin des autorités de certification racines de confiance vers le magasin des autorités de certification intermédiaires.

Si vous importez de nouveaux certificats manuellement, veillez à sélectionner le fichier Magasin des autorités de certification racines de confiance de l’ordinateur pour le fichier certificats auto-signés et l’intermédiaire de l’ordinateur Les autorités de certification enregistrent les certificats autres que certificats auto-signés.

Vous pouvez trouver tous les certificats non auto-signés à l'aide du script Powershell: 

Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject} | Format-List * | Out-File "c:\computer_filtered.txt"

Déplacez ces certificats vers le dossier Autorités de certification intermédiaires dans mmc.

3
zakmyster

J'ai dû redémarrer le serveur pour que le paramètre ClientAuthTrustMode soit appliqué.

1
dezdez