javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:不存在主题备用名称

时间:2013-06-18 11:27:03

标签: java ssl https cas keytool

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

https://210.10.10.10:8443/abc

我在帖子后面跟着: How are SSL certificate server names resolved/Can I add alternative names using 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. 2。 并尝试使用Java 1.7 keytool:

    喜欢创建(在具有java 1.7的Windows中创建并将所有证书和jks文件复制到Linx服务器env,在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机器上的keytool(在Java 1.7环境中)创建JKS文件并导入到默认的javastore文件(cacerts)中,并将这些JKS和cacert文件导出到Linux服务器。

    然后还得到java.security.cert.CertificateException:没有主题替代名称Exception。

    -------下面于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”是我的服务器密钥库文件。

    我已按照this tutorial的每一步使用openssl创建ssl证书。

    请帮忙。

0 个答案:

没有答案