当前位置: 首页 > 面试题库 >

如何使用Java中带有pkcs12文件的SSL连接到安全网站?

越英韶
2023-03-14
问题内容

我有一个pkcs12文件。我需要使用它来使用https协议连接到网页。我遇到了一些代码,为了连接到安全的网页,我需要设置以下系统属性:

System.setProperty("javax.net.ssl.trustStore", "myTrustStore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("javax.net.ssl.keyStore", "new_cert.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "newpass");

我有p12(pkcs12)文件。我需要的只是一个信任库文件。

我使用以下方法提取了证书:

openssl.exe pkcs12 -in c:/mykey.p12 -out c:/cert.txt -nokeys -clcerts

现在将cert PEM文件转换为der

openssl.exe x509 -in c:/cert.txt -outform DER -out c:/CAcert.der

现在将der文件添加到密钥库

keytool -import -file C:/Cacert.der -keystore mytruststore

现在我有了信任库,但是当我使用它时,出现以下错误

Exception in thread "main" java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)

更新:删除某些属性并仅设置“ trustStore”,“ trustStorePassword”和“ trustStoreType”属性后,出现以下异常

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

请帮忙。


问题答案:

对于遇到类似情况的任何人,我都可以通过以下方式解决上述问题:

  1. 重新生成pkcs12文件,如下所示:

    openssl pkcs12 -in oldpkcs.p12 -out keys -passout pass:tmp
    

    openssl pkcs12 -in keys -export -out new.p12 -passin pass:tmp -passout pass:newpasswd

  2. 从服务器将CA证书导入TrustStore(您自己的证书或Java密钥库$JAVA_HOME/jre/lib/security/cacerts,密码为:)changeit

  3. 设置以下系统属性:

        System.setProperty("javax.net.ssl.trustStore", "myTrustStore");
    System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
    System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
    System.setProperty("javax.net.ssl.keyStore", "new.p12");
    System.setProperty("javax.net.ssl.keyStorePassword", "newpasswd");
  1. 测试您的网址。

礼貌@
http://forums.sun.com/thread.jspa?threadID=5296333



 类似资料:
  • 是否可以在没有私钥的情况下创建PKCS12密钥存储库,类似于浏览器中的标准RootCA? 谢谢,蓝美洲狮

  • 虽然我理解SSL/TSL和私钥/公钥的概念,但我很困惑如何实现它? 当我运行命令时,我会收到“yes”作为值。当我连接到数据库并运行时,我不会收到返回的值。 如何建立从Java到MySQL数据库的安全连接? 我还使用Workbench和。pem文件确认了用户可以使用SSL登录。 更新3:将javax.net.Debug设置为SSL后的调试信息:

  • 请知道,我对数据库很陌生。我能够正确安装mySQL和java连接器驱动程序。但每当我在eclipse中运行程序并尝试从我创建的数据库中检索信息时,我都会收到以下消息:“需要SSL连接,但服务器不支持”。下面是我要使用安全SSL连接运行的代码: `公共静态void main(字符串[]参数){

  • 问题内容: 我试图使用JDK 1.8和MySQL Connector / J版本5.1.23安全地连接到Amazon RDS,并且对MySQL Connector / J文档中 的说明感到困惑。 说明说明要在当前目录中创建信任库并导入服务器的CA证书。当我运行以下命令时,系统会要求我输入密码,但我不知道输入什么: 另一方面,Amazon的说明指出证书由证书颁发机构签名。SSL证书包括数据库实例终结

  • 从服务器上,我能够连接并从配置了SSL的远程kafka服务器主题获取数据。 如果我指向GCS上的证书,当证书指向Google存储桶时,它会抛出错误。 其次是:Truststore和Google Cloud Dataflow 更新的代码将SSL truststore、keystore位置指向本地机器的/tmp目录认证,以防KafkaIO需要从文件路径读取。它没有抛出FileNotFounderRor

  • 我有一个远程Mysql服务器运行SSL证书安全。我可以使用自制的密钥库和信任库使独立的Java JDBC连接正常工作。jks。问题是,我找不到任何文档或网站,教我如何将使用SSL证书保护的mysql数据库插入springboot。我的申请。属性文件包含以下内容: 在Eclipse中,我在JVM参数字段下看到: 这行不通。给了我这个错误: