Comment puis-je mettre en œuvre l'authentification par Certificat Client de la bonne façon?
WCF est extrêmement extensible et a beaucoup du prêt-à-utiliser les fonctionnalités, cependant je continuer à lutter avec certains sujets et de la documentation plus je lis, plus je m'embrouille.
J'espère obtenir des réponses de la communauté. Commentaires sur n'importe quelle prise en charge ou la question est extrêmement bienvenue.
Pour l'enregistrement: pour vraiment accepter une seule réponse, je divise ce post dans une multitude de questions, mais il serait conduire à encore plus de confusion.
Je suis assez sûr il y a quelques vraies WCF experts en ligne qui peut répondre à quelques questions dans ce document tout à la fois, donc je peux accepter une seule réponse, comme le real face à l'installation clientcertificate l'authentification à l'aide de IIS le droit chemin.
Permettez-moi d'esquisser la situation et demande de partenaire:
1: Le partenaire de l'exigence et de la question de l'utilisation d'un certificat client.
Partenaire X doit appeler une API sur mon serveur et ils ont l'obligation d'utiliser Clientcertificate d'authentification.
Ils ont créé le clientcertificate et nous a fourni le certificat uniquement avec la clé publique depuis il semble logique qu'ils gardent la clé privée en fait privé et dans leur propre système(s).
Le certificat a été importé sur le compte d'ordinateur local et en regardant le chemin d'accès de certification ce est valide. Toutes les autorités de certification intermédiaires et à la fin, l'autorité de certification racine de confiance sont.
2: Notre WCF serverside configuration
J'ai un serviceBehavior configuré en tant que tel:
<behavior name="ClientCertificateBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceCredentials>
<serviceCertificate findValue="<serialnumber here>" x509FindType="FindBySerialNumber" />
<clientCertificate>
<authentication certificateValidationMode="PeerTrust" />
</clientCertificate>
</serviceCredentials>
</behavior>
Je suppose que j'ai fait une première erreur ici et doit utiliser ChainTrust pour vraiment valider le certificat à l'aide de son chemin d'accès de certification. Qu'en pensez-vous?
Le service est configuré en tant que tel:
<service behaviorConfiguration="ClientCertificateBehavior" name="<Full service namespace and servicename>">
<endpoint binding="basicHttpBinding" bindingConfiguration="Soap11CertificateBasicHttpBinding"
contract="<The interface>"></endpoint>
</service>
La liaison ressemble à ceci:
C'est un basicHttpBinding à force SOAP1.1 (selon le cahier des charges du partenaire).
<binding name="Soap11CertificateBasicHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
3: l'Hébergement du service WCF dans les services internet et la configuration IIS
Nous accueil nos services WCF dans IIS7.
Nous avons configuré le dossier dans lequel les services de résider à exiger SSL et à accepter les certificats Clients.
Authentification-sage l'authentification anonyme est activée.
Le truc, c'est que la communication entre le partenaire travaille et nous étions convaincus que tout était OK mais le basculement de l'IIS-réglage de " besoin d'un certificat du client nous montre que tout d'un coup il n'est plus possible de réussir un appel à notre service.
Ai-je raison de supposer que les choses suivantes ne sont pas fait correctement:
- La serviceCerticate dans le serviceBehavior n'est pas vraiment nécessaire. C'est un paramètre utilisé par le client. Ou est-il nécessaire de fournir ces informations de certificat pour le point de terminaison de service pour assortir le certificat est envoyé par le client?
- Pour clientcertificate d'authentification pour vraiment travailler dans IIS, le certificat doit être mappé à un utilisateur. Cet utilisateur doit disposer des autorisations sur le dossier contenant les services et de tous les mécanismes d'authentification (anonyme, windows,...) doit être désactivé.
De cette façon, IIS va gérer le réel poignée de main et de valider le servicecommunication.
Ou est-ce plus une question de supplémentaire mappage de sécurité le certificat d'un utilisateur?- Par le paramètre "Accepter" sur IIS nous contourner le certificat de validation entre le client et le serveur.
- Tous les mécanismes d'authentification comme "anonyme" et "fenêtres", doivent être désactivés sur IIS pour le dossier qui détient les services.
OriginalL'auteur Guillaume Schuermans | 2013-01-18
Vous devez vous connecter pour publier un commentaire.
Dans votre scénario, vous n'avez pas besoin de configurer des certificats dans WCF, IIS traite ceux pour vous. Vous pouvez effacer la totalité de la
<serviceCredentials>
bloc, parce que:La
<serviceCertificate>
<serviceCredentials>
spécifie un X. 509 certificat qui sera utilisé pour authentifier le service aux clients en utilisant Message mode de sécurité, que vous n'utilisez pas, et le<clientCertificate>
<serviceCredentials>
définit un X. 509 certificat utilisé pour signer et chiffrer les messages d'un formulaire client d'un service dans un la communication en duplex modèle.Voir ici comment mapper des certificats client pour les comptes d'utilisateur.
Et encore une question, qui vous pourrait probablement être en mesure de répondre de la même façon claire. Est-ce le mappage d'utilisateur requis et la désactivation de l'authentification anonyme est nécessaire pour l'authentification par certificat de travail comme prévu?
Je ne peux pas trouver une source précise sur accept (accepter)/besoin. Comme pour la cartographie: si vous n'avez pas de carte de certificats, IIS ne sais pas qui est l'authentification à l'aide d'un certificat donné, afin que toute personne avec un certificat valide les chaînes à une racine de confiance sur le serveur peut accéder au service si aucune autre sécurité est mis en place.
Le client (partenaire) communique à l'aide d'un certificat qui a la clé privée. Ils nous ont fourni avec un certificat à installer sur IIS qui seul possède la clé publique. Je suppose que je peut garantir le fait que seul le certificat ayant la clé privée doit être en mesure de communiquer à mon service?
Si vous le souhaitez, vous pouvez également répondre à cette question: stackoverflow.com/questions/14440777/... depuis qu'il a été fait bizarre de demander à un lot dans une seule question, et vous méritez un peu plus de rep pour creuser dans ce problème. Il permettra aussi d'aider les autres à trouver une réponse à la question de mappage de certificat plus facile.
OriginalL'auteur CodeCaster