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