aresimilarquestions 、さらには goodanswers でも、特にローカルホストに関心を持たない、または特定のオプション/ソリューション(自己署名vs CA)について尋ねる。
オプションは何ですか?彼らはどのように比較しますか?なんでこうするの?
tl; dr独自のCAによって発行された証明書を生成します(以下のスクリプトを参照)
ここに私が見つけたものがあります。私が間違っているところを修正してください。
CA(証明機関)があります。他のCA(中間CA)、またはサーバー(エンドエンティティ証明書)に対して証明書を発行(CSRに署名)します。それらのいくつかはルート機関です。彼らは自分で発行した自己署名証明書を持っています。つまり、通常、サーバー証明書からルート証明書に至る信頼のチェーンがあります。そして、ルート証明書を保証する人はいません。そのため、OSには、ルート証明書ストア(または信頼ポリシーストア)、信頼できるルート証明書のシステム全体のリストがあります。ブラウザには、システム全体のリストとユーザーが信頼する証明書で構成される、信頼できる証明書の独自のリストがあります。
Chromiumでは、chrome:// settings/certificatesで証明書を管理します。 Firefoxでは、Preferences > Privacy & Security > Certificates > View Certificates
。どちらにも、信頼されたルート証明書のリストである[権限]タブがあります。 [サーバー]タブ、信頼できるサーバー証明書のリスト。
CSR(証明書署名要求)を作成した証明書を取得するには、CAに送信します。 CAはCSRに署名し、その過程で信頼できる証明書に変換します。
証明書とCSRは、情報と公開キーを含むフィールドの集まりです。一部のフィールドは拡張機能と呼ばれます。 CA証明書は、basicConstraints = CA:true
を含む証明書です。
Developer Tools > Security
でChromiumの証明書エラーを検査できます。
OSのルート証明書ストアを変更すると、ブラウザーを再起動する必要があります。変更するには:
# trust anchor path/to/cert.crt
# trust anchor --remove path/to/cert.crt
trust
は、CA証明書を「authority」カテゴリ(trust list
)、または「other-entry」カテゴリに配置します。 CA証明書は、ブラウザーの[権限]タブ、または[サーバー]タブに表示されます。
Firefoxは、Chromiumとは異なり、OSのルート証明書ストアからのサーバー証明書を信頼しません。どちらもOSのルート証明書ストアからのCA証明書を信頼します。
ChromiumおよびFirefoxでは、証明書を[権限]タブに追加(インポート)できます。非CA証明書をインポートしようとすると、「認証局ではありません」というメッセージが表示されます。ファイルを選択すると、ダイアログが表示され、そこで信頼設定(証明書を信頼するタイミング)を指定できます。サイトを機能させるための関連設定は、「Webサイトを識別するためにこの証明書を信頼する」です。
Chromiumでは、[サーバー]タブで証明書を追加(インポート)できます。ただし、最終的には[認証機関]タブ(CA証明書、ファイル選択後に信頼設定ダイアログが表示されない)、または[その他]タブ(非CA証明書の場合)に表示されます。
Firefoxでは、証明書を[サーバー]タブに正確に追加することはできません。例外を追加します。そして、そこでは拡張子のない(貧しい)証明書を信頼することができます。
私のシステムには、証明書の次のデフォルト設定(追加される拡張機能)が付属しています。
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
/ etc/ssl/openssl.cnf 、セクション v3_ca から取得。さらに詳しく here 。
さらに、Chromiumは、subjectAltName = DNS:$domain
がない場合、証明書を無効と見なします。
セクションから [ usr_cert ]
of /etc/ssl/openssl.cnf
:
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
Chromiumが自己署名証明書を信頼するには、basicConstraints = CA:true
とsubjectAltName = DNS:$domain
が必要です。 Firefoxでは、これでさえ十分ではありません。
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
Firefoxには拡張機能は必要ありませんが、ChromiumにはsubjectAltName
が必要です。
openssl
チートシートopenssl genpkey -algorithm RSA -out "$domain".key
-秘密鍵を生成( man )
openssl req -x509 -key "$domain".key -out "$domain".crt
-自己署名証明書を生成( man )
-subj
がなければ、一般名(CN)、組織(O)、地域(L)などの識別名(DN)に関する質問をします。 「事前に」答えることができます:-subj "/CN=$domain/O=$org"
。
subjectAltName
拡張子を追加するには、すべてを指定する構成を用意するか、configにセクションを追加して-extensions
スイッチでopenssl
に名前を指定する必要があります。
-config <(cat /etc/ssl/openssl.cnf - <<END
[ x509_ext ]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
END
) -extensions x509_ext
openssl req -new -key "$domain".key -out "$domain".csr
-CSRを生成し、-subj
オプションを取ることができます( man )
openssl x509 -req -in "$domain".csr -days 365 -out "$domain".crt \ -CA ca.crt -CAkey ca.key -CAcreateserial
-CSRに署名( man )
-CAcreateserial
なしでは機能しません。最後に生成された証明書のシリアル番号を保持するca.srl
ファイルを作成します。 subjectAltName
を追加するには、-extfile
スイッチが必要です。
-extfile <(cat <<END
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:$domain
END
)
openssl req -in $domain.csr -text -noout
-CSRを表示( man )
openssl x509 -in $domain.crt -text -noout
-証明書の表示( man )
(Firefoxが機能するには例外が必要です)
#!/usr/bin/env bash
set -eu
org=localhost
domain=localhost
Sudo trust anchor --remove "$domain".crt || true
openssl genpkey -algorithm RSA -out "$domain".key
openssl req -x509 -key "$domain".key -out "$domain".crt \
-subj "/CN=$domain/O=$org" \
-config <(cat /etc/ssl/openssl.cnf - <<END
[ x509_ext ]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
END
) -extensions x509_ext
Sudo trust anchor "$domain".crt
#!/usr/bin/env bash
set -eu
org=localhost-ca
domain=localhost
Sudo trust anchor --remove ca.crt || true
openssl genpkey -algorithm RSA -out ca.key
openssl req -x509 -key ca.key -out ca.crt \
-subj "/CN=$org/O=$org"
openssl genpkey -algorithm RSA -out "$domain".key
openssl req -new -key "$domain".key -out "$domain".csr \
-subj "/CN=$domain/O=$org"
openssl x509 -req -in "$domain".csr -days 365 -out "$domain".crt \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-extfile <(cat <<END
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:$domain
END
)
Sudo trust anchor ca.crt
Nginx:
server {
listen 443 ssl;
ssl_certificate ssl/localhost.crt;
ssl_certificate_key ssl/localhost.key;
...
モルボ:
carton exec morbo --listen='https://*:3000?cert=localhost.crt&key=localhost.key' \
site.pl
追伸Chromium 65.0.3325.162、Firefox 59.0、およびopenssl-1.1.0.g
を実行しています。
どうやら、Windowsにはtrust
ユーティリティがありません。 Windowsでは、 2つのストア :ローカルマシンと現在のユーザー証明書ストアがあります。 Local Machine Certificate Storeを使用する意味はありません。現在のユーザーだけのために機能しているからです。次に、サブストアがあります。信頼できるルート認証局と中間認証局ストアの2つの事前定義済みサービスが最も重要です。一般的にコマンドラインでは root and CA と呼ばれます。
Chromeの証明書マネージャーにアクセスするには、chrome:// settings /?search = Manage%20certificatesをフォローし、[証明書の管理]をクリックします。最も興味深いのは、信頼されたルート証明機関および中間証明機関タブです。
証明書を管理する1つの方法は、 コマンドライン を使用することです。
>rem list Current User > Trusted Root Certification Authorities store
>certutil.exe -store -user root
>rem list Local Machine > Intermediate Certification Authorities store
>certutil.exe -store -enterprise CA
>rem GUI version of -store command
>certutil.exe -viewstore -user CA
>rem add certificate to Current User > Trusted Root Certification Authorities store
>certutil.exe -addstore -user root path\to\file.crt
>rem delete certificate from Current User > Trusted Root Certification Authorities store by serial number
>certutil.exe -delstore -user root 03259fa1
>rem GUI version of -delstore command
>certutil.exe -viewdelstore -user CA
結果は次のとおりです(ローカルマシンと現在のユーザー証明書ストアの両方):
root
localhost.crt
error
ca.crt
appears in Trusted Root Certification Authorities tab
CA
localhost.crt
doesn't work, appears in Other People tab
ca.crt
doesn't work, appears in Intermediate Certification Authorities tab
その他のオプションは、エクスプローラーで証明書をダブルクリックする、Chromeの証明書マネージャーから証明書をインポートする、証明書MMCスナップイン(certmgr.msc
を実行)]、または CertMgr.exe
。
grep
がインストールされている場合、証明書がどこにあるかをすばやく確認する方法は次のとおりです。
>certutil.exe -store -user root | grep "localhost\|^root\|^CA" ^
& certutil.exe -store -user CA | grep "locahost\|^root\|^CA" ^
& certutil.exe -store -enterprise root | grep "localhost\|^root\|^CA" ^
& certutil.exe -store -enterprise CA | grep "localhost\|^root\|^CA"
したがって、CA証明書を[現在のユーザー]> [信頼されたルート証明機関]ストアにインストールするのが最良の選択肢のようです。そして、ブラウザの再起動 を忘れないように確認してください。
OpenSSL
genpkey
req
x509
OpenSSL認証局
localhostの証明書
iamaCA-独自の認証局になり、証明書を発行する
Firefoxおよび自己署名証明書
Chromeの証明書エラーページのバイパス