带有 IP 地址的 Java 的 keytool 命令

Jon*_*Jon 3 java ssl keystore keytool

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

HTTPS 主机名错误:应该是 <192.168.56.1>

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

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

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

谢谢

Mur*_*mel 5

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

keytool -keystore keystore.jks -genkey -ext SAN=IP:{IP_ADDRESS}
Run Code Online (Sandbox Code Playgroud)

例如:

keytool -keystore keystore.jks -genkey -ext SAN=IP:192.168.1.1
Run Code Online (Sandbox Code Playgroud)


Vin*_*jip 4

这个片段可能适合你:

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);
Run Code Online (Sandbox Code Playgroud)

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

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