首页 > 解决方案 > 解决 SSLHandshakeException 后的 Java SSLPeerUnverifiedException

问题描述

我知道这是一个非常常见的问题,但我在我的案例中描述了上下文。我编写了两个 spring boot 2 应用程序,并为它们都启用了 SSL。

应用程序 1(客户端)

server.port: 7070
server.ssl.enabled: true
server.ssl.key-store-type: PKCS12
server.ssl.key-store: /location/to/keystore/sb1-keystore.p12
server.ssl.key-store-password: keystore_password
server.ssl.key-alias: sb1-tomcat

url.user.info: https://localhost:8000/user-info

应用程序 2(服务器)

server.port: 8000
server.ssl.enabled: true
server.ssl.key-store-type: PKCS12
server.ssl.key-store: /location/to/keystore/sb2-keystore.p12
server.ssl.key-store-password: keystore_password
server.ssl.key-alias: sb2-tomcat

然后我将服务器以及之前使用 keytool 生成的证书添加到我的 cacerts 文件中。

keytool -importcert -file "/location/to/certificate/sb2-certificate.crt" -alias sb2-tomcat -keystore "..\Java\jdk1.8.0_144\jre\lib\security\cacerts"  

在将证书添加到 cacerts 之前,我收到了错误 SSLHandshakeException,然后是 SSLPeerUnverifiedException:

Certificate for <localhost> doesn't match any of the subject alternative names: []

我将 VM Debug-SSL 验证添加到应用程序:

***
Found trusted certificate:
[
[
  Version: V3
  Subject: CN=sb2 localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
  Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11

  Key:  Sun RSA public key, 2048 bits
  modulus: 19498524521301636375327327139235173526668786372574406255907014987664589119007638945302942180083083468997649347515867541667611070267889924617455941875034864650882365195859818334626078471052990327324008622169936539527600386062109638418865197602800058208022394134272787963653612703516681008660079675388888751349158494609089577725407479205584351969790650358305405827665951625886311271743251834381456253493048705893397141460667986714587381315951028909854600446234964732273252958312484308184937316978935692640456235515324828950495838104784778023273184639045008690240699649911570081674849785949521722117188840210828574141181
  public exponent: 65537
  Validity: [From: Thu Jul 19 14:33:31 CEST 2018,
           To: Sun Jul 16 14:33:31 CEST 2028]
  Issuer: CN=sb2 localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
  SerialNumber: [    52083aa1]

Certificate Extensions: 1
[1]: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: EB 73 69 B0 29 5A CA F7   4A 85 F4 64 AD 15 90 B4  .si.)Z..J..d....
0010: 92 88 0E 02                                        ....
]
]

我整天都在谷歌搜索,但我没有得到我所缺少的东西。我需要添加一些步骤吗?

还使用 KeyStore explorer 查看 cacerts 我看到所有条目名称都有一个[jdk]但不是我的 cert sb2-tomcat。

标签: javaspring-bootssl

解决方案


推荐阅读