【问题标题】:Getting common name efficiently from tls certificate with openssl使用 openssl 从 tls 证书中有效获取公用名
【发布时间】:2013-04-05 11:01:48
【问题描述】:

我有一个指向 TLS 证书的指针,我需要获取 commonName 属性;

我首先使用函数 d2i_X509 创建 X509 对象,例如 ;

x = d2i_X509(NULL, &p, certificate_lenght);
if (x == NULL)
    return https_failure;

比我调用函数 X509_NAME_get_text_by_NID 来获取 commonName

X509_NAME_get_text_by_NID(X509_get_subject_name(x),NID_commonName, hc->https_domain_name, 256);

它对我有用,但我担心性能。我认为,当我只需要 commonName 时,所有证书对象都会被解析。有没有更好的方法可以更高效地获取 commonName 。

【问题讨论】:

  • 其实,如果你想对一个HTTPS网站进行认证,你需要先寻找Subject Alternative Names extensions (of DNS type),如果没有就回退到CN任何。
  • 您不应该在没有进行实际测量的情况下推测可能的低效率。
  • 我没有说效率低下。性能对我来说很重要。我想了解是否有更有效的方法。

标签: c ssl openssl


【解决方案1】:

没有比使用 OpenSSL 高级 API 更有效的方法了。如果您真的对尽可能获得最佳性能感兴趣,则需要使用低级 ASN.1 解析 API。 但请记住,如果不完全解析证书,您无法完全验证证书,因此我会担心仅提取 CN 的安全隐患。

【讨论】:

  • 非常感谢您的回答。非常有帮助。对于低级 asn.1 API,我检查了“lionet.info/asn1c/compiler.html”,但似乎我需要生成一个骨架(c 文件)并生成这个文件,我必须以 ASN.1 格式编写证书并通过 ASN1 编译器编译它。我误解了还是有什么简单的方法可以使用低级 ASN1 api。
  • 另外验证证书对我来说并不重要,我只需要获取服务器名称。
猜你喜欢
  • 1970-01-01
  • 2019-03-21
  • 2011-08-06
  • 2010-10-17
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 2018-11-29
  • 2012-11-22
相关资源
最近更新 更多