`
JerryWang_SAP
  • 浏览: 1035975 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

JDK安全证书的一个错误消息 No subject alternative names present的解决办法

阅读更多

我使用Java消费某网站一个Restful API时,遇到这个错误:

21:31:16.383 [main] DEBUG org.springframework.web.client.RestTemplate - Created GET request for "https://127.0.0.1:5031/commerce/product"
21:31:16.388 [main] DEBUG org.springframework.web.client.RestTemplate - Setting request Accept header to [text/plain, application/json, application/*+json, /]
Exception in thread "main" org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://127.0.0.1:5031/commerce/product": java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:673)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:620)
at org.springframework.web.client.RestTemplate.getForEntity(RestTemplate.java:319)
at com.sap.prolikeService.service.impl.CommerceProductService.getProductDetailByID(CommerceProductService.java:23)
at com.sap.prolikeService.sandbox.SandboxTest.getProductDetailTest(SandboxTest.java:45)
at com.sap.prolikeService.sandbox.SandboxTest.main(SandboxTest.java:49)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1506)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:78)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:659)
... 5 more
Caused by: java.security.cert.CertificateException: No subject alternative names present
at sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:144)
at sun.security.util.HostnameChecker.match(HostnameChecker.java:93)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:436)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:200)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1488)
... 19 more

错误的核心就一句:No subject alternative names present

解决方案:重新生成证书,将缺失的IP地址包含在证书的extension部分即可。命令行如下:

keytool -genkey -alias tomcat2 -keyalg RSA -keystore ./jerry2.keystore -ext SAN=dns:test.abc.com,ip:127.0.0.1

证书生成后,在Subject Alternative names区域能看到IP地址:

之后原始的错误就消失了:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

0
2
分享到:
评论

相关推荐

    java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案

    总之,解决"java.security.cert.CertificateException: No subject alternative DNS name matching XXX found"的关键在于确保服务器证书的主题备用名称与你试图连接的域名匹配,或者在必要时安全地绕过验证。...

    oracle jdk1.8.0-181 的安全证书

    oracle jdk1.8.0-181 的安全证书

    httpclient4.5 绕过ssl认证文件访问

    我们可以创建一个信任所有证书的TrustManager,如下所示: ```java import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate; public class NoopTrustManager implements X509...

    JDK生成ssl证书

    2. **创建目录**:在D盘创建一个名为`keys`的文件夹用于存放生成的证书文件。 3. **了解基本概念**:对SSL证书及其工作原理有初步的认识。 #### 三、生成自签名证书 本节将详细介绍如何使用`keytool`命令为服务器...

    安装jdk时遇到当前页面脚本错误的报错,下载这个版本的jdk解决

    标题提到的“当前页面脚本错误”通常是一个与网页交互有关的问题,但在这个场景下,因为我们在讨论的是离线安装程序(`jdk-8u281-windows-x64.exe`),这个问题可能是由于安装程序内部的脚本错误导致的。让我们详细...

    jdk上传证书.txt

    jdk导入https安全证书,保证java能下载https文件

    jdk证书安装工具

    这个时候又不想让jdk信任所有请求,那就只能给jdk安装目标地址的证书让jdk信任目标地址,但是正常的通过命令提示符安装证书非常麻烦,所以就做了这个工具,只要选择jdk目录和要安装的证书,就能轻松给jdk安装证书了

    windows 同时安装两个版本jdk解决办法

    解决在windows 同时安装两个版本jdk办法, 解决在windows 同时安装两个版本jdk办法,

    jdk1.8 安全包 security

    Java安全包是Java开发工具集(JDK)中的一个重要组成部分,它主要负责提供一套机制来保护Java应用程序和Java虚拟机(JVM)免受恶意代码的攻击。在JDK 1.8版本中,安全包尤其关键,因为它包含了用于安全管理、加密、...

    布署tomcat错误和提示“Tomcat JDK name”错误

    本文将详细介绍一个特定问题:当修改了Java项目的名称后,在布署到Tomcat时出现错误以及提示“Tomcat JDK name”错误。我们将从问题背景、解决方案、注意事项等多个方面进行详细阐述。 #### 问题背景 在对Java项目...

    IBM JDK1.8 证书jar包

    在IT行业中,Java是广泛应用的编程语言,而IBM JDK是IBM公司提供的Java开发工具包,它是Oracle JDK的一个重要变体,具有特定的优化和特性,特别是在大型企业级应用中。本话题聚焦于IBM JDK 1.8版本中的安全证书和jar...

    spring2.5.5+JDK1.8 版本报错的解决办法(修改后jar)

    org.springframework.core.JdkVersion 于是找到一个spring-core-3.x.RELEASE.jar,用其中的JdkVersion这个类替换spring-2.5.5.jar对应class,问题解决! 注意:别用spring-core-4.x.RELEASE.jar,JdkVersion....

    jdk1.8中文开发文档(jdk脚本错误解决方法).rar

    JDK1.8是Oracle公司发布的Java平台标准版的一个重要版本,引入了许多新特性,如Lambda表达式、Stream API以及方法引用等,极大地提高了代码的简洁性和可读性。 然而,有时在安装或配置JDK1.8时,可能会遇到脚本错误...

    eclipse更新maven,jdk改变解决办法

    eclipse更新maven,jdk改变解决办法 eclipse更新maven时,项目原本设定的jdk版本发生改变,这是由于maven的编译器插件的默认设置所致。编译器插件用来编译项目的源文件,从3.0版本开始,默认编译器是javax.tools....

    spring2.5+JDK1.8 版本报错的解决办法(修改后jar)

    于是找到一个spring-core-3.x.RELEASE.jar,用其中的JdkVersion这个类替换spring-2.5.5.jar对应class,问题解决! 注意:别用spring-core-4.x.RELEASE.jar,JdkVersion.isAtLeastJava15()方法已经没有了!

    ibm jdk策略文件,解决加解密限制

    IBM JDK是一个由IBM提供的Java实现,它有自己的安全策略,可能会与Oracle JDK有所不同。 在"ibm jdk策略文件,解决加解密限制"这个主题中,我们关注的是IBM JDK 5.0版本中的加密限制问题。默认情况下,IBM JDK可能...

    JDK8U202 :一个性能优越、安全性强、兼容性好的 Java 开发工具

    JDK 8 U202 是 JDK 8 的一个更新版本.JDK 8 U202 是一个性能优越、安全性强、兼容性好的 Java 开发工具。它为开发者提供了更高效、便捷的开发方式,同时确保了 Java 应用程序的稳定性和可靠性。 资源包括window版和...

    JDK11安装包,JDK11安装包

    JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11...

    微信支付解决jdk版本问题

    **UnlimitedJCEPolicyJDK8** 是Oracle JDK的一个扩展,它允许在Java环境中使用不受限制的加密强度。在默认情况下,JDK会对加密算法的密钥长度有所限制,这在处理高安全需求的应用如微信支付时可能不够。这个jar包包...

    jdk1.8 JDK1.8 中文 CHM

    4. **Optional类**:为了解决空指针异常(NullPointerException),JDK 1.8引入了`Optional`类,它是一个容器对象,可以包含非null值。如果值存在则`isPresent()`返回true,调用`get()`会返回该对象。 5. **Date和...

Global site tag (gtag.js) - Google Analytics