我有 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
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/