背景
OpenSSL已实施文件名技术以减少证书颁发机构(CA)查找时间。如果没有这种方法,则需要读取CApath中的所有CA文件以查找匹配的证书。
使用主题哈希,我们可以通过将'.0'附加到主题哈希(例如e5d93f80.0)来软链接到证书。如果有多个CA文件具有相同的主题哈希值,则它们的扩展名应该不同(例如e5d93f80.1)。搜索按分机号码的顺序进行;从最低到最高。
有两种已知方法openssl
和c_rehash
。
方法一
$ openssl x509 -in certs/Equifax_Secure_Certificate_Authority.pem -noout -subject_hash
594f1775
$ ln -s certs/Equifax_Secure_Certificate_Authority.pem 594f1775.0
方法二
$ c_rehash certs/
Doing certs/
Equifax_Secure_Certificate_Authority.pem => 594f1775.0
资源
Equifax Secure Certificate Authority PEM
环境
问题
使用boost::asio client example时,产生的主题哈希似乎不正确。
使用dtruss
表示它尝试加载578d5c04.0,2c543cd1.0,c4c7a654.0主题哈希文件中的一个。
$ sudo dtruss ./client www.google.com /
Password:
Resolve OK
Connect OK
Handshake failed: certificate verify failed
...
stat64("./certs/578d5c04.0\0", 0x7FFF5CEBC7D0, 0x0) = -1 Err#2
stat64("./certs/2c543cd1.0\0", 0x7FFF5CEBC7D0, 0x0) = -1 Err#2
stat64("./certs/c4c7a654.0\0", 0x7FFF5CEBC7D0, 0x0) = -1 Err#2
write_nocancel(0x1, "Handshake failed: certificate verify failed\n\0", 0x2C) = 44 0
...
close(0x5) = 0 0
如果我将符号链接重命名为其中一个文件名,那么一切都会完美无缺。
我们如何生成正确的主题哈希?