在 Play Framework java 应用程序中获取 CertificateException: "No name matching localhost found"
Gettig CertificateException: "No name matching localhost found" in Playframework java application
我有 2 个应用程序,一个应用程序在 Spring Boot
中,另一个在 Playframework
中。我正在尝试在 Playframework
应用程序中使用 Spring Boot
应用程序的 REST
端点。我正在使用我获得的证书访问 REST
端点。在我的播放应用程序中,我禁用了主机名验证,但我仍然收到此错误。您可以在下面找到代码和配置:
AsyncHttpClient-2-1, fatal error: 46: General SSLEngine problem
java.security.cert.CertificateException: No name matching localhost found
Spring 引导应用程序配置
application.properties
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 应用程序配置
application.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
那么它就可以工作了。我想将其保持为假,然后访问终点。
我觉得我的配置有问题,这就是为什么只添加了配置。如果需要更多信息,我也会添加代码片段。
这是一个密钥库问题,您的客户端配置方式是根据密钥库中的元数据检查使用的主机名。
因此,您必须将 "Subject" CN 设置为 "localhost",或者在主机名中添加带有 "localhost" 的主题备用名称。
我最喜欢 https://keystore-explorer.org/ 创建密钥库的工具,添加 SAN 很容易。 Java 的 keytool 可以做同样的事情,尽管使用“-ext san=dns:www.example.com”
我有 2 个应用程序,一个应用程序在 Spring Boot
中,另一个在 Playframework
中。我正在尝试在 Playframework
应用程序中使用 Spring Boot
应用程序的 REST
端点。我正在使用我获得的证书访问 REST
端点。在我的播放应用程序中,我禁用了主机名验证,但我仍然收到此错误。您可以在下面找到代码和配置:
AsyncHttpClient-2-1, fatal error: 46: General SSLEngine problem
java.security.cert.CertificateException: No name matching localhost found
Spring 引导应用程序配置
application.properties
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 应用程序配置
application.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
那么它就可以工作了。我想将其保持为假,然后访问终点。
我觉得我的配置有问题,这就是为什么只添加了配置。如果需要更多信息,我也会添加代码片段。
这是一个密钥库问题,您的客户端配置方式是根据密钥库中的元数据检查使用的主机名。 因此,您必须将 "Subject" CN 设置为 "localhost",或者在主机名中添加带有 "localhost" 的主题备用名称。
我最喜欢 https://keystore-explorer.org/ 创建密钥库的工具,添加 SAN 很容易。 Java 的 keytool 可以做同样的事情,尽管使用“-ext san=dns:www.example.com”