web-dev-qa-db-ja.com

ローカルホストにSSLを実装する正しい方法

ChromeおよびMozillaで受け入れられる、localhostに実装する自己署名証明書を生成する最新の方法を誰かが提案できますか?

私はopenssl世代を試してみましたが、Mozillaは発行者が信頼できないと文句を言っています。

Centos 7、nginx

9

警告:独自の認証局を運営する地雷原に飛び込む前に、セキュリティへの影響を調査する必要があるかもしれません!

しかし、必要な場合は、警告メッセージなしでhttps://localhost/を提供する迅速でダーティなCAを読んでください...

次のテキストファイルを作成します。

# OpenSSL configuration for Root CA

[ req ]

Prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name
x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = Test Root CA

[ x509_ext ]

basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign

root.cnfとして保存し、次のコマンドでリクエストを生成します。

$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf

これにより、ルートCA証明書(root.cer)とルートCA秘密キー(root.key)が作成されます。これらは秘密にしておく必要があります。秘密鍵のパスワードの入力を求められます-強力なパスワードを選択してください。

次に、サーバー証明書の構成ファイルを作成します。

# OpenSSL configuration for end-entity cert

[ req ]

Prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name

x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = localhost

[ x509_ext ]

keyUsage=critical,digitalSignature,keyAgreement

subjectAltName = @alt_names

# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com

それをserver.cnfとして保存し、次のコマンドでリクエストを生成します。

openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf

上記は、保護する必要がある別の秘密鍵(server.key)を生成します。この場合、キーはパスワードで保護されていませんが、-nodesオプションを削除してパスワードを追加できます。

最後に、新しいルートCAとserver.cnfファイルの拡張子を使用してリクエストに署名します(便宜上)。

$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext

注:-set_serialオプションには任意の乱数を選択してください。

ルートCAの生成時に入力したパスワードを要求されます。

サーバー証明書(server.cer)が生成されます。

次に、ルートCA証明書(root.cer)をFirefoxのトラストアンカーストアに追加し、次のコマンドでテストを実行します。

$ Sudo openssl s_server -key server.key -cert server.cer -accept 443 -www

注:サーバーがすでにポート443で実行されている場合、エラーが発生する可能性があります。その場合、実行中のサーバーを停止するか、上記のポート番号を別の未使用のポートに変更します。

Firefoxでhttps://localhost(または上記のポート番号を変更した場合はhttps://localhost:<port>)に移動すると、警告が表示されず、OpenSSLのインストールで提供できる暗号のリストが表示されます。

結果に満足したら、server.keyおよびserver.cerをWebサーバーに追加し、それに応じて構成します。

9
garethTheRed