
説明 • 使い方 • パラメータ • 動作の仕組み • 要件 • その他 • ライセンス
有効なSSL証明書チェーンを構築するためのオープンソースツールです。不完全なチェーンを修正し、不足しているCA証明書をすべてダウンロードするのにも役立ちます。リモートサーバーからすべての証明書をダウンロードし、証明書チェーンを正しく構成することもできます。
簡単です:
# このリポジトリをクローン
git clone https://github.com/trimstray/mkchain
# リポジトリに移動
cd mkchain
# インストール
./setup.sh install
# アプリを実行
mkchain -i /data/certs -o /data/chain.crt
bin/mkchainへのシンボリックリンクは/usr/local/binに配置されます- マニュアルページは
/usr/local/man/man8に配置されます
以下のオプションを提供します:
使用方法:
mkchain <option|long-option>
例:
mkchain --in Root.crt --in Intermediate1.crt --in Server.crt --out bundle_chain_certs.crt
mkchain --in /tmp/certs --out bundle_chain_certs.crt --with-root
mkchain -i Server.crt -o bundle_chain_certs.crt
mkchain -i https://incomplete-chain.badssl.com/ --with-root
オプション:
--help このメッセージを表示
--debug 画面に情報を表示 (デバッグモード)
-i, --in マージする証明書を追加 (ファイル、複数ファイル、SSL証明書が格納されたディレクトリ、
またはリモートドメイン)
-o, --out 結果 (チェーン) をファイルに保存
--with-root ルート証明書を証明書チェーンに追加
-o|--out- このパラメータがない場合、mkchainは出力チェーンをmkchain/chains/ディレクトリに保存します。
読む前に、SSL証明書チェーン に関する記事をご覧ください。
まず ssllabs の証明書チェーンについて説明します。これらは mkchain と一緒に提供され、example/ssllabs.com ディレクトリにあります。このディレクトリには、さらに all ディレクトリ (チェーンを組み立てるために必要なすべての証明書を含む) と server_certificate ディレクトリ (サーバー証明書のみを含む) が含まれています。
ssllabs.com ドメインの正しいチェーン (openssl コマンドの結果):
Certificate chain
0 s:/C=US/ST=California/L=Redwood City/O=Qualys, Inc./CN=ssllabs.com
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
1 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
2 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2009 Entrust, Inc. - for authorized use only/CN=Entrust Root Certification Authority - G2
i:/C=US/O=Entrust, Inc./OU=www.entrust.net/CPS is incorporated by reference/OU=(c) 2006 Entrust, Inc./CN=Entrust Root Certification Authority
上記のコードは、以下で構成される完全なチェーンを示しています:
識別証明書 (サーバー証明書)
ssllabs.com に対して発行され、Entrust Certification Authority - L1K によって署名
中間証明書
Entrust Certification Authority - L1K に対して発行され、Entrust Root Certification Authority - G2 によって署名
中間証明書
Entrust Root Certification Authority - G2 に対して発行され、Entrust Root Certification Authority によって署名
ルート証明書 (自己署名証明書)
Entrust Root Certification Authority に対して発行され、Entrust Root Certification Authority によって署名
このシナリオでは、提供されたすべての証明書をチェーン化します。ツールの実行例:
このシナリオでは、サーバー証明書のみを使用し、それを使用して残りの必要な証明書を取得します。その後、上記と同様に、提供されたすべての証明書を結合します。ツールの実行例:
有効なチェーンを作成するには、ツールに必要なすべての証明書を提供する必要があります (-i|--in パラメータにディレクトリを設定した場合)。以下のものが必要です:
これは非常に重要です。これらがないと、チェーンの開始点と終了点を特定できません。
-i|--inの値として証明書ファイルのみを設定した場合、mkchainは自動的に必要なすべての証明書をダウンロードします。
ただし、mkchain で生成されたチェーン内を見ると、ルート証明書は含まれていません。
なぜでしょうか? 自己署名ルート証明書はWebサーバーの設定に含めるべきではない (含める必要もない) からです。ルート証明書には目的がなく (クライアントは常に無視します)、SSLハンドシェイクのサイズが大きくなるため、わずかなパフォーマンス (レイテンシ) のペナルティが発生します。
ルート証明書を証明書チェーンに追加したい場合は、--with-root パラメータを指定してユーティリティを呼び出します。
mkchain では、2つの 証明書パス を使用できます:
証明書チェーンを生成する際、mkchain は証明書に関する情報 (エラーを含む) を含むコメントを表示します。
すべての可能性のリストは次のとおりです:
このメッセージは、チェーンの開始点となるサーバー証明書がない場合に表示されます。これは特別なケースで、この状況では mkchain はこの情報のみを表示して動作を終了します。サーバー証明書は、チェーンを正しく作成するために必要な唯一の証明書です。この証明書がないと、正しいチェーンは作成されません。
ここでは逆の状況です。有効なサーバー証明書が見つかったときにメッセージが表示されます。
このメッセージは、2つの中間証明書のうち最初のものが見つからない場合に表示されます。この情報は、2番目の中間証明書がないことを明示的に示すものではありませんが、サーバー証明書が署名された中間証明書が存在するかどうかを判断できます。また、2番目の中間証明書が提供されている場合にも表示される可能性があります。
上記と似ていますが、2番目の中間証明書に関するものです。ただし、2番目の証明書パスを使用してチェーンを正しく作成できる場合があります。例えば、最初の中間証明書を使用し、2番目をメインの証明書に置き換えるなどです。
このメッセージは、必要な中間証明書の1つまたはすべてが不足していることを意味し、ルート証明書がない場合に表示されます。
このメッセージは、有効な中間証明書の数を示します。
ルート証明書がない場合は警告として扱われます。もちろん、サーバー側で証明書を設定する際にはルート証明書を添付することは推奨されませんが、mkchain で作成する場合、チェーンは不完全として扱われ、チェーンが正しく作成されなかったことを示す情報が表示されます。
このメッセージはエラーを知らせるものではなく、一部の証明書 (例: example/google.com を参照) ではCNフィールドがない場合があることを示します。Common Name フィールドは、証明書に関連付けられたホスト名を識別します。RFC3280 では、Issuer DN に CN が必須というわけではありません。ほとんどの CA は Issuer DN に CN を含めますが、この Equifax CA のように含めない場合もあります。
mkchain は外部ユーティリティを使用するため、事前にインストールしておく必要があります:
このツールは以下で動作します:
MacOS/FreeBSD:
pkg install getopt)greadlink でも動作しますこちら をご覧ください。
こちら をご覧ください。
GPLv3 : http://www.gnu.org/licenses/
フリーソフトウェア、イェイ!