简体   繁体   English

从.net客户端访问ssl服务器(Web服务)

[英]Accessing ssl server (web service) from .net client

I'm tryng to access a ssl server (web service) from a .net client (c#). 我试图从.net客户端(c#)访问ssl服务器(Web服务)。 I have access to a java client code that can connect to the server. 我可以访问可以连接到服务器的java客户端代码。 Included in the source code are 3 files (saPubKey.jks, WebServices.pfx and trustStore) and I think that only 2 of the 3 are used in the java example. 源代码中包含3个文件(saPubKey.jks,WebServices.pfx和trustStore),我认为在java示例中只使用了3个文件中的2个。

private void setSSLConnection(WSBindingProvider bp){
    KeyStore ks = KeyStore.getInstance("pkcs12");
    ks.load(this.getClass().getClassLoader().getResourceAsStream("WebServices.pfx"), "password".toCharArray());

    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
    kmf.init(ks, "password".toCharArray());

    SSLContext sslContext = SSLContext.getInstance("TLS");
    KeyStore ts = KeyStore.getInstance("JKS");
    ts.load(this.getClass().getClassLoader().getResourceAsStream("trustStore"), "pass".toCharArray());

    TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
    tmf.init(ts);
    sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

    bp.getRequestContext().put(JAXWSProperties.SSL_SOCKET_FACTORY, sslContext.getSocketFactory());

}

The code I have for the c# client is this 我对c#客户端的代码就是这个

var clientCertificate = new X509Certificate2(@"C:\WebServices.pfx", "password");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://blablabla.org:700/fws/ftrs");
req.ClientCertificates.Add(clientCertificate);
req.Headers.Add("SOAPAction", "\"https://blablabla.org:700/fws/ftrs/Rgdvice\"");
req.ContentType = "text/xml;charset=\"utf-8\"";
req.Accept = "text/xml";
req.Method = "POST";
using (Stream stm = req.GetRequestStream())
{
   using (StreamWriter stmw = new StreamWriter(stm))
   {
      stmw.Write(soap);
   }
}
WebResponse response = req.GetResponse(); //(500) Internal Server Error.
Stream responseStream = response.GetResponseStream();

Method req.GetResponse() throws "(500) Internal Server Error." 方法req.GetResponse()抛出“(500)内部服务器错误”。 With no client certificates added I get: "An unexpected error occurred on a send." 在没有添加客户端证书的情况下,我得到:“发送时发生了意外错误。” I also tried this line of code with no luck: 我也试过这行代码而没有运气:

ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

I'm new to ssl and certificates, and really need help accessing the ssl server from c#. 我是ssl和证书的新手,并且真的需要帮助从c#访问ssl服务器。

这可能是不相关的,但请确保Web服务不在app_code文件夹中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM