OpenSSL がこれをコードの呼び出しに任せるというのは、本当に奇妙に思えます。
はい、実際には非常に問題のある省略です。非常に多くのアプリケーションが手動でチェックを実行する必要があることに気付いていないためです。
OpenSSL 1.1.0 にはホスト名HEAD
の検証が含まれます (現在 (2013 年 9 月現在))。変更ログによると、-verify_name
オプションがありapps.c
、スイッチに応答します-verify_hostname
。ただしs_client
、どちらのスイッチにも応答しないため、クライアントに対してホスト名チェックがどのように実装または呼び出されるかは不明です。
dnsName
拡張子のフィールドが存在する場合はsubjectAlternativeName
、name をその値に設定します。
複数のサブジェクト代替名 (SAN) が存在する可能性があるため、複数の場合に備えてください。
それ以外の場合は、サブジェクトの CN フィールドに name を設定します。
一致するかどうかも確認する必要があると思います。
name を要求されたホスト名と比較し、各アスタリスクが [A-Za-z0-9_]+ に一致しますが、「ドット」 (.) には一致しません。
そのはるかに痛い。また、gTLD または ccTLD と一致していないことを確認する必要があります。たとえば、gTLD に対して発行された証明書を照合する必要はありません*.com
。その証明書はおそらく悪者によって発行されたものです ;)
ccTLD は、*.eu、*.us、または இலங்கை (nic.lk) のようなものです。それらは 5000 ほどあり、Mozilla はhttp://publicsuffix.org/でリストを提供しています。生のリストはhttps://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1にあります。
これを行うには、たくさんのコードを実行する必要があるように思えますが、何も見つかりませんでした。
van Gulik の提案に加えて、Curl を試すこともできます。Curl にホスト名一致コードが含まれていることは確かです。
証明書が適切な形式であることを確認することもできます。Web のコンテキストで責任を負うグループは、CA/Browser フォーラムです。証明書を作成するための基本要件と拡張要件があります。
ベースライン ドキュメントでは、たとえば、コモン ネーム (CN) としてリストされている IP は、サブジェクト代替名 (SAN) にもリストされている必要があります。
拡張ドキュメントでは、予約済み IP (RFC 1918) は拡張検証 (EV) 証明書に存在できないことがわかります。EV 証明書にワイルドカードを含めることはできません。