Il est auto - serveur hébergé par WCF (Non IIS), et a été généré des certificats (sur le Win Xp) en ligne de commande commeauto - serveur hébergé par WCF et SSL
makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureClient -sky exchange -pe
makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=SecureServer -sky exchange -pe
Ces certificats ont été ajoutés au serveur code comme ceci:
serviceCred.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine,
StoreName.My, X509FindType.FindBySubjectName, "SecureServer");
serviceCred.ClientCertificate.SetCertificate(StoreLocation.LocalMachine,
StoreName.My, X509FindType.FindBySubjectName, "SecureClient");
Après toutes les opérations précédentes, j'ai créé un client simple pour vérifier la connexion SSL au serveur.
Configuration du client:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IAdminContract" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://myhost:8002/Admin" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IAdminContract" contract="Admin.IAdminContract"
name="BasicHttpBinding_IAdminContract" />
</client>
</system.serviceModel>
</configuration>
code:
Admin.AdminContractClient client = new AdminContractClient("BasicHttpBinding_IAdminContract");
client.ClientCredentials.UserName.UserName = "user";
client.ClientCredentials.UserName.Password = "pass";
var result = client.ExecuteMethod()
Au cours de l'exécution que je reçois l'erreur suivante:
The provided URI scheme 'https' is invalid; expected 'http'.\r\nParameter name: via
Question: Comment activer le protocole SSL pour le serveur auto-hébergé et où devrais-je installer des certificats pour le client et le serveur? Merci.
Après ces modifications, j'ai reçu: Une erreur s'est produite lors de la demande HTTP à https: // myhost: 8002/Admin. Cela peut être dû au fait que le certificat de serveur n'est pas configuré correctement avec HTTP.SYS dans le cas HTTPS. Cela peut également être dû à une incompatibilité de la liaison de sécurité entre le client et le serveur. – jitm
Pouvez-vous mettre à jour le poste avec la configuration de servicemodel de votre serveur? –
Je serais sûr de vérifier le [Guide de sécurité WCF sur codeplex] (http://wcfsecurityguidance.codeplex.com/). En particulier, [cette page parle d'authentification par certificat] (http://wcfsecurity.codeplex.com/wikipage?title=How%20To%20-%20Use%20Certificate%20Authentication%20and%20Message%20Security%20in%20WCF%20calling % 20à partir de% 20Windows% 20Forms & referencedTitle = Comment% 20Tos). –