Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:不存在主题替代名称_Java_Ssl_Https_Cas_Keytool - Fatal编程技术网

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

javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:不存在主题替代名称,java,ssl,https,cas,keytool,Java,Ssl,Https,Cas,Keytool,基本上,我有一个测试服务器(基于Linux),带有一个公共IP bot,没有公共主机名。所以我尝试使用IP地址为它创建ssl证书。因此,我的Java应用程序可以使用IP地址访问另一个应用程序:例如: https://210.10.10.10:8443/abc 我遵循以下帖子: 我确实尝试了建议的两种方法来避免此异常,但non正在工作。我也犯了同样的错误 我尝试编辑“openssl.cnf”并添加: [req] req_extensions = v3_req [ v3_req ]

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

https://210.10.10.10:8443/abc
我遵循以下帖子:

我确实尝试了建议的两种方法来避免此异常,但non正在工作。我也犯了同样的错误

  • 我尝试编辑“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
    
  • 二,。 并尝试使用Java 1.7 keytool:

    类似于创建(在具有java 1.7的windows中创建,并将所有证书和jks文件复制到在java 1.6上运行的Linx server env):

    我的环境设置如下所示: 服务器是Linux(CentOS)、Tomcat6、JDK1.6,应用程序是JAVA应用程序 使用Openssl创建所有证书和JK

    仍在获取java.security.cert.CertificateException:没有主题替代名称异常

    然后,我尝试在windows机器上创建JKS文件,并使用keytool(在Java1.7env中)将其导入默认javastore文件(cacerts),然后将这些JKS和cacert文件导出到Linux服务器

    然后仍然得到java.security.cert.CertificateException:没有主题替代名称异常

    -------以下更新于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证书


    请提供帮助。

    您可以检查服务器是否正确配置了该证书吗?您可以使用
    openssl s_client-connect 210.10.10.10:8443 | openssl x509-text-noout
    检查这一点。文本中应该有一个“X509v3 Subject Alternative Name”部分,具有正确的IP地址。是的,我已正确配置了服务器(在我的问题中已使用上面的服务器设置进行了更新)。我测试了https://:8443/并且得到了使用SSL运行的tomcat默认页面。@Bruno,这是我在上面命令的第一部分被激发时得到的结果:你确定你已经复制了整个证书(在开始/结束之间)?它似乎不可读。如果您尝试使用命令的第二部分,您能看到SAN吗?“其中“cacerts.jks”是我的客户机密钥库文件”:这不应该是您的客户机密钥库,而是一个不包含客户机私钥的不同密钥库。
    <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" />