【问题标题】:Regarding certificate in .NET [closed]关于.NET中的证书[关闭]
【发布时间】:2018-02-26 08:56:25
【问题描述】:

我们在给定的 URL https://.com?service.wsdl 上发布了一个 Web 服务

为了制作它的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);


根据我的理解,上面的代码是读取证书并将其包装在每个请求中。 一切都很好,直到管理层要求我与同样是同一 Web 服务消费者的其他团队共享证书。 其他团队使用 .NET C# 连接到 WS。

在我分享之后,.NET 团队要求我分享私钥。

现在我想知道是因为

1) 据我了解,他们可以询问 public key ..not the private key 。因为私钥是服务器拥有的并且是机密的。 2)通过Firefox导出证书时,如果附带公钥,则其中包含密钥。我看到那个选项没有启用。 所以这个证书中没有公钥。

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

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

即使他们说只能接受 .pfx 文件,他们也应该使用自己的私钥将 .c​​rt 文件转换为 .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 哪里有私钥。

有人可以帮助我了解他们的情况吗?

【问题讨论】:

  • 这个问题有点不清楚。我们得到了你所做的和你得到的结果。我们仍然不知道您的最终目标是什么。

标签: c# .net x509certificate pfx


【解决方案1】:

消费者不需要私钥。如果我理解正确,您的消费者客户端在向您的 Web 服务发出请求时需要信任您的 Web 服务提供的证书。如果是生产场景,您的证书将由受信任的公共 CA 颁发,该 CA 将受到所有客户端的信任。

如果您将自签名证书用于开发场景,请要求客户团队将证书(仅公钥)导入到受信任的根目录。

还要检查他们在使用服务时收到的错误类型。

【讨论】:

  • 嗨,Shetty,感谢您的回答。并感谢您验证我是正确的。现在我觉得自己是个傻瓜,因为我刚刚发现团队只是在问愚蠢的问题,以便花更多时间进行开发活动。这太可悲了。不管怎样,我很放松。最好的问候
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2017-05-07
相关资源
最近更新 更多