gpt4 book ai didi

java - 启用 SSL 的主机

转载 作者:太空宇宙 更新时间:2023-11-03 14:19:24 25 4
gpt4 key购买 nike

问题 -我想连接到启用 SSL 的服务器主机(已从 verisign 签署证书)。该主机批准/拒绝付款交易。

假设 - 1. ClientAuth 不是必需的。 2. 我不是在处理 HTTPS

我想编写一个 java 客户端,它将与该主机连接并发送请求和接收响应。如果我的理解不正确,请指正。

  1. Java 客户端需要使用包 - 'javax.net.ssl.*'。这个包具有“SSLSocket”类以与 SSL 主机建立连接。
  2. 对于 Java 客户端“keystore”/客户端证书(由 verisign 签名)不需要。只有在启用 clientAuth 时才需要(正确)。
  3. 我是否需要在我的客户端代码中有一个条款来首先验证服务器证书然后传输数据?这是这一步强制性的?
  4. 我是否绕过了一些强制性步骤?

谢谢,拉吉赫巴尔

最佳答案

要创建安全套接字(客户端),您可以使用:

//An SSL socket can't be created from scratch. We need a Factory that
//handles the underlying logic that allows create a SSL socket
SocketFactory socketFactory = SSLSocketFactory.getDefault();

//Get the socket from the Factory
SSLSocket socket = (SSLSocket) socketFactory.createSocket(host, port);

现在,在运行时,当您创建 java 客户端/套接字时,工厂将执行著名的“SSL 握手”并执行一些验证。默认情况下,java 客户端/套接字将:

  • 检查服务器的证书是否与“主机”相对应:每个证书都有一个“服务器名称”,并且只能从该服务器下载该证书。因此,如果您从“www.oracle.com”服务器获得“www.google.com”证书,此验证将失败。
  • 检查证书是否可信:如果它不是由权威机构签署的,或者权限链无法检查,或者如果它是未包含在您的“受信任的证书存储库”中此验证会失败。

重要提示:解释主机名检查的第一个要点是错误的:这不会发生在 SSLSocket 上,而是发生在 HTTPS 客户端上。感谢@EJP 和@Gergely Szilagyi 指出这一点

注意:有一种方法可以解决这些验证问题,例如:

  • 要绕过/关闭服务器检查,请阅读此 post (不推荐!)
  • 要将证书添加到客户端受信任的存储库,请检查此 post

关于java - 启用 SSL 的主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11251373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com