有没有办法获取 OpenSSL X509 证书名称,该证书名称将在 C++ 中发送到对等方
Is there a way to get the OpenSSL X509 certificate name that im sending to peer in C++?
我从对等方那里收到了一些remote certficate mismatch
错误,我无法从服务器端跟踪问题。
做完int ret = SSL_accept(ssl)
后,有没有办法在SSL握手期间从服务器(C++二进制)获取证书名称及其详细信息并打印出来?
我可以使用任何 SSL API 吗?
谢谢!
您可以将
SSL_get_certificate
与 SSL 会话结构(在SSL_Accept中返回)一起使用,以检索拥有提供给客户端的证书的 X509 结构。稍后,您可以使用某些 X509 特定函数提取证书的 CN:
X509_NAME_oneline(X509_get_subject_name(certificate), buf, 256);
这将是一种幼稚的方法,因为一个证书可以处理不同的CN,但是,对于您的问题来说,这可能就足够了。
我通常以"愚蠢的方式"执行此操作 - 捕获
tcpdump -n -s 1500 -w - port 443 and host www.foobar.com | strings
tcpdump -n -s 1500 -w - port 443 and host www.foobar.com | hexdump -C
即只是在电线上嗅闻。与正常(非升级等)SSL交换一样,这是明文交换的。虽然 ASN1 编码 - 很容易简单地"看到"通用名称和其他 DN 字段。
000305e0 06 03 55 04 0b 13 16 77 77 77 2e 71 75 6f 76 61 |..U....www.quova|
000305f0 64 69 73 67 6c 6f 62 61 6c 2e 63 6f 6d 31 20 30 |disglobal.com1 0|
00030600 1e 06 03 55 04 03 13 17 51 75 6f 56 61 64 69 73 |...U....QuoVadis|
00030610 20 47 6c 6f 62 61 6c 20 53 53 4c 20 49 43 41 30 | Global SSL ICA0|
00030620 1e 17 0d 31 31 30 38 30 35 31 30 31 38 30 36 5a |...110805101806Z|
00030630 17 0d 31 32 30 38 30 35 31 30 31 38 30 36 5a 30 |..120805101806Z0|
00030670 1b 30 19 06 03 55 04 0a 13 12 41 42 4e 20 41 4d |.0...U....ABN AM|
00030680 52 4f 20 42 61 6e 6b 20 4e 2e 56 2e 31 19 30 17 |RO Bank N.V.1.0.|
00030690 06 03 55 04 0b 13 10 49 6e 74 65 72 6e 65 74 20 |..U....Internet |
000306a0 42 61 6e 6b 69 6e 67 31 16 30 14 06 03 55 04 03 |Banking1.0...U..|
是你看到的那种东西。执行此操作的正确方法是坐在回调上并分析证书堆栈。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何在C++中使用X509证书模在令牌中查找私钥
- OpenSSL TLS服务器-使用客户端证书白名单
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- c++ libCurl :如何使用libCurl接受过期的证书
- 以 x64 配置访问证书公钥
- 从网站复制证书,并使用脚本将其添加到受信任的根证书颁发机构
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何使用QWebEngineView忽略SSL证书错误
- 如何以编程方式从PKCS7中提取CA、多个CA和公共证书/密钥
- 通过 OpenSSL C++从证书获取颁发者证书
- 如何使用openssl续订过期的证书密钥或创建自签名证书密钥any.pem Poco c ++
- 打开 SSL 查询客户端证书
- C++项目需要什么才能使用证书 (RSA-SHA256) 对文件进行签名
- 将私钥和证书存储在C++/OpenSSL中
- 将 PFX 证书转换为 PEM 格式
- CMake Ninja Git 自签名证书颁发机构密码提示
- 如何在 C++ 中将 X509 证书转换为公钥字符串