Java和SSL证书

And*_*ndy 13 java ssl ssl-certificate

我正在尝试使用安全套接字层(HTTPS)与我的PHP脚本建立连接,但我发现为了确保最大的安全性/有效性,我必须将我的网站使用的SSL证书导入到我的应用程序中......我不知道该怎么办的东西.

如果它有帮助,我的SSL证书不是自签名的,而是由StartSSL提供的并且我正在使用Eclipse IDE.

有人能指出我正确的方向吗?即我需要哪些文件,我应该在哪里导入它们以及我在Java中需要哪些代码等?

Vin*_*lds 29

我发现为了确保最大安全性/有效性,我必须将我的网站使用的SSL证书导入我的应用程序

当你发表声明时,你是部分正确的.您无需导入SSL证书.导入StartSSL CA证书就足够了.

此外,没有将证书导入Java应用程序的事情.Java中的SSL支持依赖于密钥库和信任库的概念,而不依赖于应用程序中打包的某些证书​​.如果您要发布要由最终用户下载和执行的应用程序,则无需在应用程序中发布证书或私钥.私钥和关联的证书将存储在密钥库中,只有您可以访问.

应用程序的最终用户将依赖Java运行时内的SSL支持,这将使应用程序在验证服务器证书后建立到站点的SSL连接.Java运行时在信任库中附带一组默认的CA证书,并且成功建立SSL连接的唯一先决条件是服务器的SSL证书由信任库中的一个CA颁发.Java运行时的信任库中不存在StartSSL证书,至少从版本6开始,因此:

  • 您可以指示最终用户执行将StartSSL CA证书导入Java信任库的活动.可能有助于包含此StartSSL论坛主题的链接(仅需要前4个步骤才能将CA证书导入信任库),GitHub项目此博客文章 ; 免责声明 - 我没有尝试使用其中任何一种,您应该自行承担使用它的风险.
  • 或者,您可以使用-Djavax.net.ssl.trustStore=<path_to_truststore> -Djavax.net.ssl.trustStorePassword=<truststore_password>JVM启动标志使用您自己的信任库初始化您的应用程序,或者在初始化SSL连接之前执行以下代码:

    System.setProperty("javax.net.ssl.trustStore","<path_to_truststore>");
    System.setProperty("javax.net.ssl.trustStorePassword","<truststore_password>");
    
    Run Code Online (Sandbox Code Playgroud)

    这是一种可行的方法,只有当您的应用程序是一个不恰好是applet的Java SE应用程序时(或者对如何指定信任库具有类似限制的应用程序).


阅读Java keytool文档也会有所帮助.