关于.NET

时间:2018-02-26 08:56:26

标签: c# .net x509certificate pfx

我们在给定的网址https://<上发布了一项网络服务fakeURL> .com?service.wsdl

为了制作Java客户端, 1)我从Firefox下载了.crt文件作为导出证书>>保存到文件>>它会自动使用.crt扩展名。

2)我在Java程序中使用了.crt文件并将其设置在SSLContextFactory中并制作了HttpsURLConnection并能够发布数据并获得结果。

InputStream certstream = fullStream ("path to .crt file /ABC.crt");
Certificate certs = cf.generateCertificate(certstream);         

// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("isakey", certs);

// Create a TrustManager that trusts the CAs in our KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);

// Create an SSLContext that uses our TrustManager
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory sslSocketFactory = context.getSocketFactory();

URL                url; 
HttpsURLConnection       urlConn; 
url = new URL("https://path to web service /");             
String rawData = "param1=abc&param2=efg";         
byte[] postData = rawData.getBytes(StandardCharsets.UTF_8);          
urlConn = (HttpsURLConnection) url.openConnection();            
urlConn.setSSLSocketFactory(sslSocketFactory);

InputStream certstream = fullStream ("path to .crt file /ABC.crt"); Certificate certs = cf.generateCertificate(certstream); // Create a KeyStore containing our trusted CAs String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("isakey", certs); // Create a TrustManager that trusts the CAs in our KeyStore String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); tmf.init(keyStore); // Create an SSLContext that uses our TrustManager SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); SSLSocketFactory sslSocketFactory = context.getSocketFactory(); URL url; HttpsURLConnection urlConn; url = new URL("https://path to web service /"); String rawData = "param1=abc&param2=efg"; byte[] postData = rawData.getBytes(StandardCharsets.UTF_8); urlConn = (HttpsURLConnection) url.openConnection(); urlConn.setSSLSocketFactory(sslSocketFactory);
根据我的理解,上面的代码是读取证书并将其包装在每个请求中。 在管理层要求我与其他同时也是同一Web服务的消费者团队共享证书之前,情况一切正常。 其他团队使用.NET C#连接到WS。

我分享后,.NET团队让我分享私钥。

现在我想知道因为

1)根据我的理解,他们可以问公钥..不是私钥。因为私钥是服务器拥有的并且是保密的。 2)通过firefox导出证书时,如果公共密钥附加了它,则包含密钥。我看到没有启用该选项。 所以这个证书中没有公钥。

3)其他团队说,因为他们的客户端是在.NET中而且它不接受.crt文件,它只接受.pfx文件。

  
    

有可能吗?是证书格式技术依赖。

         

即使他们说只接受.pfx文件,他们也必须使用自己的私钥将.crt文件转换为.pfx。     有一些命令可以将crt文件转换为pfx,但我认为这个.NET团队必须使用自己的私钥

  

将PEM证书文件和私钥转换为PKCS#12(.pfx .p12)

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

  
    

其中privateKey.key是私钥。

  

有人能帮我理解他们的情况吗?

0 个答案:

没有答案