【问题标题】:Java's keytool command with IP addressesJava 的带有 IP 地址的 keytool 命令
【发布时间】:2009-07-23 00:24:03
【问题描述】:

我正在尝试通过 https URL 获取图像,但遇到了一些问题。我使用 Java 的 keytool 命令生成了一个密钥库。如果我指定公用名 (CN) 等于我的主机名,例如 CN=JONMORRA,然后尝试通过我的主机名查询,例如 https://JONMORRA:8443/,那么它工作正常。但是,如果我将公用名指定为我的 IP 地址,例如 CN=192.168.56.1,并尝试通过我的 IP 地址查询,例如https://192.168.56.1:8443/,则会出现错误

HTTPS 主机名错误:应该是

这说明我的主机名是错误的,即使那是我在密钥库中指定的。

我想使用 IP 地址而不是主机名,这样我就可以在 Linux 和 Windows 机器之间进行查询,而不必担心主机名。

为什么CN不接受IP地址,我该如何解决?

谢谢

【问题讨论】:

    标签: java ssl keystore keytool


    【解决方案1】:

    要使用keytool 准确生成有效证书,请使用:

    keytool -keystore keystore.jks -genkey -ext SAN=IP:{IP_ADDRESS}
    

    例如:

    keytool -keystore keystore.jks -genkey -ext SAN=IP:192.168.1.1
    

    【讨论】:

      【解决方案2】:

      这个 sn-p 可能对你有用:

      import javax.net.ssl.HostnameVerifier;
      import javax.net.ssl.HttpsURLConnection;
      import javax.net.ssl.SSLSession;
      
      HostnameVerifier hv = new HostnameVerifier() {
          public boolean verify(String urlHostName, SSLSession session) {
              System.out.println("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
              return true;
          }
      };
      
      HttpsURLConnection.setDefaultHostnameVerifier(hv);
      

      如果您尝试此代码,但它不起作用,请发布为urlHostNamesession.getPeerHost() 打印的内容。

      另外,为什么 Windows 和 Linux 机器互操作需要使用 IP 地址而不是主机名?

      【讨论】:

      • 我实际上是在使用一个库来做这个传输,我没有访问源代码来实现这个。
      • 如果你没有来源也没关系,只需在例如在从库中加载任何类之前你的主类。除非您的设置被明确覆盖,否则它应该可以工作。
      • 您好,感谢您的帖子。很有帮助。这里对安全性有何影响?这会使服务容易受到中间人攻击吗?
      • 由于提议的验证者实际上并未进行任何验证,因此可能会带来安全风险;我认为对 IP 地址的这种需求是由于在开发环境中工作。
      【解决方案3】:

      HTTPS 规范 (RFC 2818) 对使用 IP 地址的服务器身份验证非常明确:证书中必须存在主题备用名称 (IP) 条目(而主题 DN 中的 CN 足以作为备用主机名的解决方案)。

      尽管并非所有客户端(尤其是并非所有浏览器)都严格执行此验证,但 Java 默认主机名验证器会执行此验证。

      可以使用 OpenSSL 创建具有 IP SAN 条目的证书,或者(在提出/回答此问题时不可用),使用 Java 7 的 keytool

      详情请看这个问题:How are SSL certificate server names resolved/Can I add alternative names using keytool?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-28
        • 2014-06-10
        • 2012-07-29
        • 1970-01-01
        • 2010-11-17
        • 2015-10-27
        相关资源
        最近更新 更多