我需要使用C-land OpenSSL驗證X509證書的域。驗證OpenSSL中的證書域
我的理解是,庫不爲我做到這一點,我必須大致實現以下算法:
- 如果主題替代延伸DNSNAME域存在,設置
name
到值。 - 否則,請將
name
設置爲主題的CN字段。 - 將
name
與請求的主機名進行比較,允許每個星號匹配[A-Za-z0-9 _] +,但不匹配'dot'(。)。
在我看來,應該有大量的代碼踢這樣做,但我還沒有找到任何。
任何人都可以找到這樣的例子嗎?或者,或者,理智檢查我的算法?
編輯:這是我想出了:https://gist.github.com/2821083。看起來很奇怪的是OpenSSL會將這個問題留給調用代碼。
而不是根據您在證書中找到的值「設置」值,您應該以相反的方式執行此操作:檢查您期望的是否具有匹配的SAN DNS條目。這是因爲SAN擴展中可能有多個DNS條目。 (有關RFC 6125中通配符匹配的更精確的規則,順便說一下。) – Bruno