首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 ><localhost>的证书与任何使用者备用名称都不匹配

<localhost>的证书与任何使用者备用名称都不匹配
EN

Stack Overflow用户
提问于 2018-06-19 20:08:14
回答 1查看 30K关注 0票数 14

The Error

javax.net.ssl.SSLException: Certificate for <localhost> doesn't match any of the subject alternative names: [xxxxxxx.xxx.xxxxxx.xxx]

我在我的localhost中运行了一个Spring Boot应用。我还有一个通过putty连接到服务器的隧道ssh

我做过的事情:

  • I以各种方式手动创建/导入密钥/证书。
  • I使用keytool中的-ext将dns地址和本地主机添加到SAN。
  • I还使用openSource java文件安装证书。
  • I将主机文件更改为: 127.0.0.1 xxx.xxx.xxxxxxx.xxx (如果我ping dns名称,它将响应本地主机地址)<代码>H214<代码>H115我使用VM参数-Djavax.net.debug=ssl检查证书是否正确加载。<代码>H216<代码>F217

我遗漏了什么?顺便说一句,我也在使用VPN。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 05:07:49

在创建证书时,您需要提供localhost作为使用者备用名称。您可以通过提供以下附加参数来完成此操作:-ext "SAN:c=DNS:localhost,IP:127.0.0.1"

所以就像这样:

keytool -genkeypair -keyalg RSA -keysize 2048 -alias stackoverflow -dname "CN=stackoverflow,OU=Hakan,O=Hakan,C=NL" -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -validity 3650 -keystore identity.jks -storepass secret -keypass secret -deststoretype pkcs12

一些解释:

SAN字段将用于匹配将在请求中提供的主机名。因此,当您在本地主机上运行应用程序时,假设是https://localhost:443,并且您还希望向该特定主机发出一个请求,而该主机名也应该在SAN字段中可用,否则它将在握手过程中失败。

让我们以Stackoverflow为例。为了能够通过https到达堆栈溢出,我们希望证书至少包含一个stackoverflow.com条目

下面是此示例中突出显示特定DNS的stackoverflow的证书SAN值:

正如您已经看到的,它还包含其他DNS值。通过这种方式,网站所有者可以为多个网站/子域等使用相同的证书。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50928061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档