J'ai un service WCF qui utilise basicHttpbinding dans le développement.
Maintenant, dans le produit que nous voulons utiliser SSL, quelles modifications dois-je apporter pour forcer les connexions SSL uniquement?
Cette page sur MSDN explique la sécurité de liaison WCF.
http://msdn.Microsoft.com/en-us/library/ms729700.aspx
La classe BasicHttpBinding est principalement utilisée pour interagir avec les services Web existants, et bon nombre de ces services sont hébergés par Internet Information Services (IIS). Par conséquent, la sécurité de transport pour cette liaison est conçue pour une interopération transparente avec les sites IIS. Pour ce faire, définissez le mode de sécurité sur Transport, puis définissez le type d'informations d'identification client. Les valeurs de type d'informations d'identification correspondent à IIS mécanismes de sécurité d'annuaire. Le code suivant montre le mode défini et le type d'informations d'identification défini sur Windows. Vous pouvez utiliser cette configuration lorsque le client et le serveur sont sur le même domaine Windows.
C #
BasicHttpBinding b = new BasicHttpBinding(); b.Security.Mode = BasicHttpSecurityMode.Transport ; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Ou, en configuration:
<bindings> <basicHttpBinding> <binding name="SecurityByTransport"> <security mode="Transport"> <transport clientCredentialType="Windows" /> </security> </binding> </basicHttpBinding> </bindings>
Pour activer ssl, sans connexion, définissez clientCredentialType sur "None".
Les options pour le mode de sécurité sont:
Aucun, Transport, Message, TransportWithMessageCredential et TransportCredentialOnly
Vous pouvez trouver plus de détails sur: http://msdn.Microsoft.com/en-us/library/system.servicemodel.basichttpsecuritymode.aspx
Je viens de rencontrer le même problème et j'ai trouvé cet article MSDN: Comment: configurer un service WCF hébergé par IIS avec SSL À la fin de l'article, vous trouverez la configuration xml du fichier WebConfig.
La solution a très bien fonctionné pour moi. Encore une chose à dire, gardez à l'esprit que vous avez besoin d'un VRAI certificat pour votre sortie!
Je pense que si sous vos "liens" où vous avez <Security mode="Transport">
, si vous le changez en <security mode="None">
, ça irait.
ceci est une copie d'une base de code sur laquelle je travaille et que j'ai fait dans le code, et cela semble fonctionner. J'obtiens le WSDL au moins quand j'arrive au service, si ça aide du tout :)
BasicHttpBinding basicBinding = new BasicHttpBinding();
if (RegistryConnectionStringFactory.UseSslForCommunications)
{
basicBinding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
basicBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
}
else
{
basicBinding.Security.Mode = BasicHttpSecurityMode.None;
basicBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
}