Les étapes suivantes sont un guide pour vous aider à démarrer :
1) Tout d'abord, vous avez besoin d'une autorité racine pour générer vos certificats client et serveur. Vous pouvez soit utiliser un fournisseur d'autorité externe (par exemple Verisign), soit générer le vôtre à l'aide d'un outil tel que Microsoft Certificate Server.
Pour générer un certificat d'autorité racine de développement, vous pouvez utiliser l'outil "makecert" fourni avec Visual Studio, par exemple.
makecert -n "CN=MyRootCA" -r -sv RootCA.pvk RootCA.cer
2) Vous devez ensuite demander/générer vos certificats client et serveur. Les deux types de certificats peuvent être installés en tant que certificats de machine locale et doivent être signés par la même autorité racine. Vous pouvez demander des certificats clients à partir de l'interface web d'un serveur de certificats Microsoft, par ex. http://mycertserver/certsrv
.
Pour générer un certificat client de développement pour chaque machine, vous pouvez utiliser "makeecert" à nouveau. Notez que les certificats clients sont signés avec le certificat d'autorité racine de développement créé à l'étape 1.
makecert -pe -n "CN=MyCert" -ss my -sky exchange -sk MyCert
-iv MyRootCA.pvk -ic MyRootCA.cer -sr localmachine MyCert.cer
Le certificat sera installé sur la machine sur laquelle la commande est exécutée, dans le dossier Personal certificates du magasin Local Machine.
Pour que le serveur puisse faire confiance aux certificats des clients, vous devez installer le certificat de l'autorité racine de développement dans le magasin des autorités de certification racine de confiance du serveur (utilisez le snap-in mmc Certificates pour ce faire). Les clients doivent également avoir le certificat racine installé de la même manière afin qu'ils fassent confiance à leurs propres certificats.
3) Configurez votre service WCF pour exiger l'authentification du client à l'aide d'un certificat (par exemple, via le web.config).
<services>
<service
name="TestService"
behaviorConfiguration="wsHttpCertificateBehavior">
<endpoint name="TestEndPoint"
address=""
binding="wsHttpBinding"
bindingConfiguration="wsHttpEndpointBinding"
contract="TestService.IMyContract">
<identity>
<dns value=""/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsHttpEndpointBinding">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<behavior name="wsHttpCertificateBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/>
<serviceCredentials>
<clientCertificate>
<authentication
certificateValidationMode="PeerOrChainTrust"
revocationMode="NoCheck"/>
</clientCertificate>
<serverCertificate findValue="CN=MyCert"/>
</serviceCredentials>
</behavior>
</behaviors>
4) Configurez maintenant l'appelant (par exemple via l'app.config).
<client>
<endpoint name="wsHttpBinding"
address="https://localhost/TestService/TestService.svc"
binding="wsHttpBinding"
bindingConfiguration="wsHttpBinding"
behaviorConfiguration="wsHttpCertificateBehavior"
contract="TestService.IMyContract">
<identity>
<dns value="MyCert"/>
</identity>
</endpoint>
</client>
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding">
<security mode="Message">
<message clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="wsHttpCertificateBehavior">
<clientCredentials>
<clientCertificate findValue="MyCert" storeLocation="LocalMachine"/>
<serviceCertificate>
<authentication
certificateValidationMode="PeerOrChainTrust"
revocationMode="NoCheck"
trustedStoreLocation="LocalMachine"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>