web-dev-qa-db-ja.com

自己署名ワイルドカード証明書

私は自宅にパイホールを設置したので、「このサイトはブロックされています」というページを表示するために、自分のサーバーで任意のWebサイトへのリクエストを処理できるようにしたいです。

URLの自己署名証明書を作成し、これを自分のデバイスにインストールすることでこれを実行しようとしています。証明書を生成するために使用したコマンド

openssl genrsa 2048 > pihole.key
openssl req -new -x509 -nodes -days 36500\
    -key pihole.key \
    -subj "/C=NL/ST=Utrecht, Inc./CN=*" \
    -reqexts SAN \
    -config <(cat /etc/ssl/openssl.cnf \
        <(printf "\n[SAN]\nsubjectAltName=DNS:*,DNS:*")) \
    -out pihole.cert
openssl x509 -noout -fingerprint -text < pihole.cert > pihole.info
cat pihole.cert pihole.info > pihole.pem
service Apache2 reload

私は私のwindowsデバイスにこの証明書をインストールしました、そして、windowsはそれが有効な証明書であることを示しています。

しかし、chromeは私にNET::ERR_CERT_COMMON_NAME_INVALIDを与え、Edgeは私に同様のエラーを与えます(DLG_FLAGS_SEC_CERT_CN_INVALID

どうしてこれなの? CN = *は許可されていませんか?どうしたら私が欲しいものを達成できますか?

14

それは許可されていません。標準のTLSホスト名検証にプロトコル固有の追加として、すべての主要なWebブラウザ(HTTPSクライアント)は基本的にワイルドカード証明書を "eTLD + 1"に制限することに同意しました。 - ワイルドカードコンポーネント。

一般的に、これは少なくとも2つのコンポーネントを必要とすることになります(*.example.netは大丈夫ですが*.netはそうではなく、どちらも裸の*ではありません)。 "効果的なTLD"規則はこれを、実際には分割不可能な "TLD"として人々が使うco.ukのように複数レベルの接尾辞に拡張します。 (*.example.ac.ukは許可されていますが、*.ac.ukは許可されていません。)

公開接尾辞リスト がどのように実装されているか Chromium および Mozilla の場合)_)を調べることができます。

CA-Browser Forum Baseline Requirementsからの引用があるSecurity.SE に関連する議論を参照してください(これは公開WebPKI CAにのみ適用されますが、それでもやはり一般的な実装を反映しています)。

CAは、「レジストリ制御」ラベルまたは「パブリックサフィックス」のすぐ左の最初のラベル位置にワイルドカード文字が含まれている証明書をすべて無効にする必要があります。


この制限を回避するには、訪問しようとするWebサイトに「オンデマンド」で証明書を発行する認証局を構築します。これがどのように通常のWebサーバーに実装されるのか私は知りませんが、これは商用のTLS代行受信システムで使用される一般的な方法です。ウイルス対策プログラムおよびその他のマルウェアBurp Proxyスイートなどの開発ツール。

たとえば、OpenResty Webサーバー(基本的にNginx-with-Lua) 動的な証明書生成を実装するためのssl_certificate_by_luaオプション を持っています。Squidプロキシはssl-bump機能で 証明書模倣 )をサポートします。

また、SANがSubject-CNを完全にオーバーライドしている場合は、両方が存在することにも注意してください。これはCNを含めることをほとんど冗長にし(あなたのクライアントソフトウェアがそれほど古くない限りSANサポートを欠いています)、そして公的CAのためにWebブラウザはもうそれを受け入れさえしません。

37
grawity

証明書にはワイルドカードを1つだけ含めることができます(つまり、*.*.example.comなし)、1つのラベルにのみ一致します(つまり、www.example.comではなくwwwのみ)、左端の位置(つまり、*.www.example.comでなくwww.*.example.com)で、パブリックサフィックスの内側に配置することはできません(つまり、*.comなし)。

4
Steffen Ullrich