OpenSSL主题哈希

时间:2015-12-15 23:48:01

标签: c++ ssl boost hash openssl

背景

OpenSSL已实施文件名技术以减少证书颁发机构(CA)查找时间。如果没有这种方法,则需要读取CApath中的所有CA文件以查找匹配的证书。

使用主题哈希,我们可以通过将'.0'附加到主题哈希(例如e5d93f80.0)来软链接到证书。如果有多个CA文件具有相同的主题哈希值,则它们的扩展名应该不同(例如e5d93f80.1)。搜索按分机号码的顺序进行;从最低到最高。

有两种已知方法opensslc_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

环境

  • OS X El Capitan
  • Clang Apple LLVM 7.0.2版(clang-700.1.81)
  • OpenSSL 1.0.2e-dev

问题

使用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

如果我将符号链接重命名为其中一个文件名,那么一切都会完美无缺。

我们如何生成正确的主题哈希?

0 个答案:

没有答案