SSL证书 - 不存在主题替代名称

时间:2013-12-21 18:57:37

标签: java ssl ssl-certificate cas

我尝试生成自签名SSL证书,但在cas sso中收到以下错误:

java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present

我正在使用open jdk 7并使用以下命令:

keytool -genkey -alias axyz -keypass changeit -keyalg RSA -ext san=ip:192.168.1.4

keytool -export -alias axyz -keypass changeit -file axyz.crt

keytool -import -file axyz.crt -alias axyz -keystore /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/security/cacerts

HostName:vaapdev 内部IP地址:192.168.1.4 公共IP地址:108.51.62.36

不知道我哪里出错了,我在-ext中尝试了192.168.1.4和108.51.62.36 尝试没有-ext参数。

2 个答案:

答案 0 :(得分:0)

使用主机名时,可以回退到服务器证书的主题DN中的公用名,而不是使用主题备用名。

使用IP地址时,证书中必须有主题备用名称条目(IP地址类型,而不是DNS名称)。

您可以在此处找到有关规范以及如何生成此类证书的更多详细信息:https://stackoverflow.com/a/8444863/372643

答案 1 :(得分:0)

您可以在此处做两件事,或者更改自签名证书中的CN名称,使其与您正在运行应用程序的域相匹配(如果它是localhost,则cn名称应为localhost),或者添加主题替代名称(如前所述)下面

请查看此link to understand step by step

上述错误表示您的JKS文件缺少尝试访问该应用程序所需的域。您将需要使用Open SSL和密钥工具来添加多个域

  1. 将openssl.cnf复制到当前目录
  2. echo '[ subject_alt_name ]' >> openssl.cnf
  3. echo 'subjectAltName = DNS:example.mydomain1.com, DNS:example.mydomain2.com, DNS:example.mydomain3.com, DNS: localhost'>> openssl.cnf
  4. openssl req -x509 -nodes -newkey rsa:2048 -config openssl.cnf -extensions subject_alt_name -keyout private.key -out self-signed.pem -subj '/C=gb/ST=edinburgh/L=edinburgh/O=mygroup/OU=servicing/CN=www.example.com/emailAddress=postmaster@example.com' -days 365
  5. 将公钥(.pem)文件导出为PKS12格式。这将提示您输入密码

    openssl pkcs12 -export -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -export -in
    self-signed.pem -inkey private.key -name myalias -out keystore.p12
    
  6. 从自签名PEM(密钥库)创建a.JKS

    keytool -importkeystore -destkeystore keystore.jks -deststoretype PKCS12 -srcstoretype PKCS12 -srckeystore keystore.p12
    
  7. 从密钥库或JKS文件上方生成证书

    keytool -export -keystore keystore.jks -alias myalias -file selfsigned.crt
    
  8. 由于上述证书是经过自签名的,并且未经CA验证,因此需要将其添加到Truststore中(对于Windows,MAC地址在以下位置的CAcerts文件中,对于Windows,请查找JDK的安装位置。)

    sudo keytool -importcert -file selfsigned.crt -alias myalias -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts
    

原始答案发布于 on this link here