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


18

自宅にピホールを設置したので、自分のサーバーを使用して任意の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はそれが有効な証明書であることを示しています。

ただし、クロムは私にを与えNET::ERR_CERT_COMMON_NAME_INVALID、エッジは私に同様のエラーを与えます(DLG_FLAGS_SEC_CERT_CN_INVALID

どうしてこれなの?されるCN = *だけで許可されていませんか?どうすれば自分の欲しいものを達成できますか?


副次的な注意事項として、主要なWebサイトの場合、ブラウザーはおそらく生成した証明書を受け入れません。これらのサイトは、証明書のピン留めを使用し、これらのブラウザーに含めるためにTLS証明書のフィンガープリントを送信します。証明書は保存されている指紋と一致せず、ブロックされます。ここではより多くの情報があります:noncombatant.org/2015/05/01/about-http-public-key-pinning
マルタインHeemels

あなたが発見したように、自己署名証明書は問題になる可能性があります。代わりに、letsencrypt.orgから「適切な」認証を取得することもできます。これらは無料で、ワイルドカードをサポートしています。letsencryptから、あなたが実際に必要*それでカバーしようとしていたホスト、1つ(またはそれ以上)本命の何に応じてあなたをカバーできる
デイブSmylie

2
@DaveSmylieそれは広告ブロッカーのためです、私はドメインを所有していません。
ダニエルヴァンデンバーグ

1
@Stewartは以前のコメントを読んでください。
ダニエルヴァンデンバーグ

1
また、これを広告ブロッカーに使用している場合、代替ページを表示するのではなく、関連するサーバーへの接続を静かにドロップする方がよい場合があります。最近の広告の90%は、最初はJavaScriptを介して読み込まれるため、代替ページがページ上で実際に表示される可能性はほとんどありません。おそらく、JavaScript以外のリソースをJavascriptとしてロードしようとすると、おそらく問題が解決するでしょう。
Nzall

回答:


42

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

通常、これは少なくとも2つのコンポーネントを必要とすることを意味します(*.example.net大丈夫ですが、そうで*.netはありません。どちらも裸ではありません*)。「有効なTLD」ルールは、これを複数レベルのサフィックスに拡張します。これはco.uk、人々が実際には分割不可能な「TLD」として使用するためです。(*.example.ac.uk許可されてい*.ac.ukますが、許可されていません。)

ChromiumMozilla パブリックサフィックスリストがどのように実装されているかを調べることができます。

Security.SEの関連する議論を参照してください。CA-BrowserForum Baseline Requirements(パブリック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ブラウザーはそれを受け入れさえしません。


このTLD + 1制限については、以前のプロジェクトで経験的にここで既に見つけました。レイアウトしてくれてありがとう。+1
ルイFリベイロ

あなたの精巧な答えをありがとう、私はそれがええそれを説明すると思います。私が使用できる別のアプローチを知っていますか?
ダニエルヴァンデンバーグ

25
「およびその他のマルウェア」の戦略的配置に賛成。
ジュリス

@DaniëlvandenBerg:私はたまたま投稿自体で提案しました。NginxとSquidの例へのリンクを追加しました。
user1686

5

のみ(すなわちなし証明書内の単一のワイルドカードがある場合もあります*.*.example.com)、それが唯一の単一のラベルを一致させることができます(つまりのみwww、ではないwww.example.com)、それが唯一の左端の位置(すなわち上に置くことができ*.www.example.comますがないwww.*.example.com)、それは公共のサフィックス内ですることはできません(つまりno *.com)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.