私は自宅にパイホールを設置したので、「このサイトはブロックされています」というページを表示するために、自分のサーバーで任意の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 = *
は許可されていませんか?どうしたら私が欲しいものを達成できますか?
それは許可されていません。標準の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ブラウザはもうそれを受け入れさえしません。
証明書にはワイルドカードを1つだけ含めることができます(つまり、*.*.example.com
なし)、1つのラベルにのみ一致します(つまり、www.example.com
ではなくwww
のみ)、左端の位置(つまり、*.www.example.com
でなくwww.*.example.com
)で、パブリックサフィックスの内側に配置することはできません(つまり、*.com
なし)。