2

基本上,我有一个带有公共 IP 机器人的测试服务器(基于 Linux),没有公共主机名。所以我正在尝试使用 IP 地址为其创建 ssl 证书。这样我的 Java 应用程序就可以使用 IP 地址访问另一个应用程序:例如:

https://210.10.10.10:8443/abc

我关注了以下帖子: SSL 证书服务器名称如何解析/我可以使用 keytool 添加替代名称吗?

我确实尝试了建议的两种方法来避免这种异常,但没有工作。我遇到了同样的错误。

  1. 我尝试编辑“openssl.cnf”并添加:

     [req]
      req_extensions = v3_req
    
     [ v3_req ]
    
      # Extensions to add to a certificate request
      subjectAltName=IP:210.10.10.10
      # or subjectAltName=DNS:www.example.com
    
      basicConstraints = CA:FALSE
      keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    

2.还尝试使用Java 1.7 keytool:

就像创建(在具有 java 1.7 的 Windows 中创建并将所有 certs 和 jks 文件复制到 Linx 服务器环境,在 java 1.6 上运行):

    keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore myServerKeystore2.jks -srckeystore serverCertAsPK12.p12  -srcstoretype PKCS12 -alias servercertificate -ext SAN=ip:210.10.10.10

我的环境设置如下:服务器是 Linux (CentOS),Tomcat 6,JDK 1.6,应用程序是 JAVA 应用程序使用 Openssl 创建所有证书和 JKS

仍然出现 java.security.cert.CertificateException:没有主题替代名称异常。

然后我尝试在 Windows 机器上创建 JKS 文件并使用 keytool(在 Java 1.7 env 中)导入默认的 javastore 文件(cacerts),并将这些 JKS 和 cacert 文件导出到 Linux 服务器。

然后还仍然出现 java.security.cert.CertificateException: No subject Alternative names 异常。

------- 6 月 19 日对布鲁诺的回复更新如下 ---------

下面是我的 tomcat server.xml 设置:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
           maxThreads="150" scheme="https" secure="true"
           truststoreFile="/usr/local/apache-tomcat-6.0.37/conf/cacerts.jks" truststorePass="changeit"
           keystoreFile="/usr/local/apache-tomcat-6.0.37/conf/myServerKeystore2.jks" keystorePass="changeit"
           clientAuth="false" sslProtocol="TLS" />

其中“cacerts.jks”是我的客户端密钥库文件,“myServerKeystore2.jks”是我的服务器密钥库文件。

我已按照本教程中的每个步骤使用 openssl 创建 ssl 证书。

请帮忙。

4

0 回答 0