当前位置: 首页 > 面试题库 >

获取所有匹配证书的主机名列表

岳鸿畴
2023-03-14
问题内容

如何获取将与证书(java.security.cert.X509Certificate)匹配的所有主机名和IP的列表,包括主题备用名称?我只发现了的各种实现javax.net.ssl.HostnameVerifier


问题答案:

主机名验证与证书的绑定方式在RFC
2818第3.1节中
定义(对于HTTPS,对于其他协议,请参阅RFC
6125
,但非常相似)。

简而言之:

  • 使用的实例X509Certificate,并遍历的结果getSubjectAlternativeNames()
  • 每个条目将是一个2元素列表。第一个是类型,第二个是实际值。
  • 类型2用于DNS名称,类型7用于IP地址。您需要分别对待它们。
  • 如果有任何SAN IP地址条目,请将这些地址添加到IP地址列表中。
  • 如果有任何SAN DNS名称条目,请将这些名称添加到IP地址列表中。
  • 如果没有任何SAN DNS名称条目(但可能仍然有IP SAN AFAIK),则可以读取证书的主题DN并提取其CN(通用名称)并将其添加到列表中。(有关如何提取CN的问题,请参见此问题。请注意,RFC 2818中“最具体的” CN的概念在RFC 6125中得到承认和解决。)

请注意,证书中的某些主机名可能包含通配符,因此您将无法建立详尽的可能匹配列表。通配符的问题当然是写验证程序比尝试获取完整列表通常更有意义的原因之一。(有关位置的详细信息,请阅读RFC
2818第3.1节,并请记住,点本身不是通配符表达式的一部分,因此*.example.org不匹配example.org。)



 类似资料:
  • 问题内容: 我尝试使用自签名证书连接到服务器。我使用此代码接受所有证书。 但是尽管如此,我收到以下错误: 我确定我的证书代码已执行,那么可能是什么问题? 问题答案: 您可以使用

  • 我试图从java调用Heroku的开发人员api,但是我得到了以下异常: 我的代码如下所示: https://stackoverflow.com/a/7266768 https://stackoverflow.com/a/3904473 https://stackoverflow.com/a/25356821 建议我应该重写证书主机名检查,这肯定违背了这一点(当然生产还没有准备好)?

  • 问题内容: 我一直在使用以下代码连接到Google的服务之一。这段代码在我的本地机器上运行良好: 我将这段代码放到了已阻止Google.com的生产环境中。根据要求,他们允许我访问IP:74.125.236.52,这是Google的IP之一,从而允许与Google服务器通信。我编辑了主机文件,也添加了该条目。 仍然无法访问URL,我想知道为什么。所以我将上面的代码替换为: 现在我得到这样的错误:

  • 问题内容: 我正在尝试使用带有自签名证书的Node.js 0.8.8创建TLS服务器/客户端设置。 基本的服务器代码如下所示 现在,当我尝试连接到该服务器时,我使用以下代码: 如果我删除线 从客户端代码,Node.js抛出一个错误告诉我。据我了解,这是由于它是一个自签名证书,并且没有其他方信任此证书。 如果我删除 同样,错误也消失了-但等于错误,实际上意味着我的连接未加密。无论如何,使用我可以访问

  • 我有一个httpsendpoint,我需要从wso2 API管理器访问它。(使用1.10)。我已经将证书文件添加到“client-truststore.jks”文件中。但现在它给出了如下错误。 我已经更新了Axis2.xml文件,如下所示。 如何使用WSO2 APIManager解决此问题以访问此https后端服务

  • 问题内容: 我在Android上使用HttpClient连接到https://someUrl.com/somePath。问题在于该站点的证书用于* .someUrl.com,而不是someUrl.com,因此我得到了SSLException。是的,网站上有些脚,是的,但是除非我能解决问题,否则我将陷入困境。有没有办法让HttpClient放松并接受证书? 问题答案: 这是我的(编辑)解决方案: 除