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

Java和SSL证书

苏选
2023-03-14
问题内容

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

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

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


问题答案:

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

当您说那句话时,您部分正确。您不需要导入SSL证书。导入StartSSL CA证书就足够了。

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

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

  • 您可以指示最终用户执行将StartSSL CA证书导入Java信任库的活动。可能有帮助的链接包括此StartSSL论坛线程(将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”,” “);

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

阅读Java
keytool文档
也将有所帮助。



 类似资料:
  • 问题内容: 我的Java程序如何知道包含证书的密钥库在哪里?或者,如何告诉我的Java程序在哪里寻找密钥库? 在以某种方式指定了密钥库之后,如何指定用于对服务器进行身份验证的证书? 问题答案:

  • 问题内容: 假设我编写了两个Java应用程序:并且它们被部署并在两个单独的服务器上运行(部署到和部署到),并且这两个应用程序需要通过SSL相互通信(双向)。我们还假设每个应用程序都有自己的SSL证书。 我(Java程序员)如何编码并验证彼此的SSL证书?每个CA是否都提供某种我可以使用的RESTful API ?Java是否有自己的证书验证API?我可以使用开放源代码的第三方JAR或服务吗? 当我

  • 假设我编写了两个Java应用程序:和,它们在两个独立的服务器上部署和运行(部署到和部署到

  • 我目前正在使用SSL编写一个网络TCP服务器。在生产中,我们最终将要求客户机使用证书进行身份验证。 为了在紧急情况下撤销证书,我们还希望建立CRL。 编辑:删除过时的Dropbox链接

  • 问题内容: 我目前正在使用SSL编写网络TCP服务器。在生产中,我们最终将要求客户使用证书进行身份验证。 为了在紧急情况下吊销证书,我们还想建立一个CRL。 我的问题是:Java是否开箱即用地检查CRL(如果提供了证书),还是需要手动实施此类检查? 为了进行测试,我准备了带有CRL设置的证书,但是Java似乎没有尝试对其进行验证(我将其放入本地Web服务器中并且无法访问)。 我仅找到 _com.s