java - 获取证书异常 : "No name matching localhost found" in Playframework java application

标签 java spring-boot ssl playframework certificate

我有 2 个应用程序,一个应用程序位于 Spring Boot 中,另一个应用程序位于 Playframework 中。我正在尝试在 Playframework 应用程序中使用 Spring Boot 应用程序的 REST 端点。我正在使用我获得的证书访问 REST 端点。在我的 Play 应用程序中,我已禁用主机名验证,但仍然收到此错误。您可以在下面找到代码和配置:

AsyncHttpClient-2-1, fatal error: 46: General SSLEngine problem
java.security.cert.CertificateException: No name matching localhost found

Spring Boot应用程序配置

应用程序属性

server.port=8085
server.ssl.key-alias=demo
server.ssl.key-password=changeit
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
server.ssl.key-store=server.jks

enter image description here

Playframework 应用程序配置

应用程序.conf

play.ws.ssl.loose.acceptAnyCertificate = false
play.ws.ssl.loose.disableHostnameVerification = true

play.ws.ssl {
  trustManager = {
    stores = [
      { type = "PEM", path = "public.crt" }
    ]
  }
}

play.ws.ssl.debug = {
    all = false
    ssl = true
    certpath = true
}

如果我设置play.ws.ssl.loose.acceptAnyCertificate = true那么它就可以工作。我想将其保留为 false,然后访问终点。

我觉得我的配置有问题,这就是为什么只添加配置。如果需要更多信息,我也会添加代码片段。

最佳答案

这是一个 keystore 问题,您的客户端的配置方式是根据 keystore 中的元数据检查所使用的主机名。 因此,您要么必须将“主题”CN 设置为“localhost”,要么添加主机名中包含“localhost”的主题备用名称。

我喜欢https://keystore-explorer.org/创建 keystore 的最佳工具,添加 SAN 很容易。 Java 的 keytool 可以做同样的事情,尽管使用“-ext san=dns:www.example.com”

关于java - 获取证书异常 : "No name matching localhost found" in Playframework java application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60056854/

相关文章:

java - 线程 "main"javax.net.ssl.SSLHandshakeException : sun. security.validator.ValidatorException 中的异常:找不到受信任的证书

java - 将 kotlin Unit 转换为 Java 的 String

java - 连接Access数据库时如何避免 "Out Of Memory"错误?

spring - 相对于 r2bc 中的 where 子句,我们是否有一个简写来计算 db 中存在的行数

java - MySQL/Hibernate 使用映射为 LocalTime 的列检索错误数据

ssl - IIS 7 非 SSL 站点加载另一个站点的证书

swift 4 - HTTP 请求未执行

java - java中对象类背后的机制是什么?

java - 单击按钮时将文本添加到 JTextArea 框?

java - Springboot的@Value注解找不到Kafka Producer认证的JKS文件位置