我有Java Web服务,并已使用Java Keytool创建的jks文件实现了X.509。
keytool -genkey -keyalg RSA -sigalg SHA1withRSA -validity 730 -alias myservicekey -keypass skpass -storepass sspass -keystore serviceKeystore.jks -dname "cn=localhost" keytool -genkey -keyalg RSA -sigalg SHA1withRSA -validity 730 -alias myclientkey -keypass ckpass -storepass cspass -keystore clientKeystore.jks -dname "cn=clientuser"
为了在客户端和服务器之间建立信任,我将服务器证书导入到客户端,并将客户端证书导入到服务器。
将服务器公钥(证书)导入客户端。
keytool -export -rfc -keystore clientKeystore.jks -storepass cspass -alias myclientkey -file MyClient.cer keytool -import -trustcacerts -keystore serviceKeystore.jks -storepass sspass -alias myclientkey -file MyClient.cer -noprompt
将客户端公钥(证书)导入服务器
keytool -export -rfc -keystore serviceKeystore.jks -storepass sspass -alias myservicekey -file MyService.cer keytool -import -trustcacerts -keystore clientKeystore.jks -storepass cspass -alias myservicekey -file MyService.cer -noprompt
Service和Client都是用Java编写的,并且运行良好。现在我有一个.NET客户端,我的理解是,如果我向.NET客户端(即clientKeystore.jks)提供相同的jave客户端证书,则它应该可以工作,但是.net客户端有问题。
.NET客户端开发人员坚持要求我使用他生成的.pfx证书, 如何将.pfx证书导入到现有的.jks文件中 。
我在网上看到的示例要求我创建一个新的.jks文件。
谢谢。
您可以将该文件视为Java PKCS12密钥库。您可以使用所有相同的keytool命令,但-storetype PKCS12由于默认值为JKS ,因此您还需要指定其他命令。在JDK 1.6及更高版本中可用的示例:
-storetype PKCS12
keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 -destkeystore clientcert.jks -deststoretype JKS
另请参阅此线程。我认为这可以回答您的问题,但是如果您不介意任何建议,我只会将现有的JKS文件输出为P12文件,然后将P12文件提供给.NET客户端。如果确实是格式问题,那将解决您的问题。您可以按照此处概述的步骤进行操作。如果仍然有问题,则应发布.NET客户端的Exception,否则我们将无法为您提供帮助。