我有2个应用程序,一个应用程序在中Spring Boot
,其他应用程序在中Playframework
。我正在尝试在应用程序中使用应用程序的REST
终结点。我正在使用获得的证书访问端点。在我的播放应用程序中,我禁用了主机名验证,但是仍然出现此错误。您可以在下面找到代码和配置:Spring Boot
Playframework
REST
AsyncHttpClient-2-1, fatal error: 46: General SSLEngine problem
java.security.cert.CertificateException: No name matching localhost found
Spring Boot应用程序配置
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
那么它正在工作。我想将其保留为false,然后访问端点。
我觉得问题出在我的配置上,这就是为什么只添加配置。如果需要更多信息,我还将添加代码片段。
多数民众赞成在密钥库的问题,您的客户端的配置方式,它检查密钥库中的元数据使用的主机名。因此,您必须将“主题” CN设置为“本地主机”,或者在主机名中添加带有“本地主机”的主题备用名称。
我最喜欢使用https://keystore-explorer.org/工具来最好地创建密钥库,在那里添加SAN很容易。Java的keytool可以做到这一点,尽管使用“ -ext san = dns:www.example.com”
我创造了新的
cert
和jks
,它得到了解决。谢谢