私が理解したことが正しい場合、CAは、Webサービス用の複数のサーバー証明書サーバー(FTPサーバー、Webサーバー、Nextcloud、OpenVPNなど)をインストールする必要なしに、そのCA証明書で署名された他の証明書を検証するために使用される親証明書と同じです。 。ちょっと待ってますか?
自分のサービスにアクセスしようとしたときに安全に接続できるように、ローカルネットワークとWANを介して友達のネットワークに展開できるCA証明書を作成しようとしています。たとえば、私がホストしている各サービスに対して、複数の証明書の代わりにCA証明書を1つだけ提供できます。
すべてのサーバー証明書は明らかにCAによって署名されているため、そのコンピュータにCA証明書をインストールすると最初にCAで署名されたため、サーバー証明書は自動的に検証されます。正しいですか?
問題は、今日WindowsクライアントPCにCA証明書をインストールしようとし、HTTPSを介してOpenMediaVault GUIにアクセスしようとしましたが、まだ安全ではない警告画面が表示されることです。
次のコードブロックは、CAとサーバー証明書の完全な生成プロセスを示しています。すべてのファイルとフォルダを表示できるように、ディレクトリツリーのスクリーンショットを添付します。構成ファイルの内容も含めます。
私のガイド
# Make OpenSSL Directory
mkdir ~/Desktop/OpenSSL
# Make Child Directories
mkdir -p ~/Desktop/OpenSSL/{ca,configs,"csr's",keys}
# Change Directory Into OpenSSL Directory
cd ~/Desktop/OpenSSL
# Create CA Certificate
openssl req -x509 -newkey rsa:4096 -keyout ca/cakey.pem -out ca/cacert.pem -days 3650 -sha256 -nodes -config configs/ca_openssl.cnf
# Create serial file
echo '01' > serial
# Create index.txt
touch index.txt
##
### Create server certificates ###
##
# OpenMediaVault
openssl genrsa -out keys/OpenMediaVault.pem 4096
openssl req -new -key keys/OpenMediaVault.pem -config configs/openmediavault_openssl.cnf -out "csr's"/OpenMediaVault.csr
# OpenWrt
openssl genrsa -out keys/OpenWrt.pem 4096
openssl req -new -key keys/OpenWrt.pem -config configs/openwrt_openssl.cnf -out "csr's"/OpenWrt.csr
##
### Sign Server Certificates With CA ###
##
# OpenMediaVault
openssl x509 -req -CA ca/cacert.pem -CAkey ca/cakey.pem -in "csr's"/OpenMediaVault.csr -out certificates/OpenMediaVault.crt -extfile configs/openmediavault_openssl.cnf -extensions v3_req -CAserial serial
# OpenWrt
openssl x509 -req -CA ca/cacert.pem -CAkey ca/cakey.pem -in "csr's"/OpenWrt.csr -out certificates/OpenWrt.crt -extfile configs/openwrt_openssl.cnf -extensions v3_req -CAserial serial
# Convert PEM to CRT
openssl x509 -outform der -in ca/cacert.pem -out "My Custom CA".crt
# Convert PEM to PKCS12
openssl pkcs12 -export -out certificate.pfx -inkey ca/cakey.pem -in ca/cacert.pem -certfile CACert.crt
'ca_openssl.cnf'
[ ca ]
default_ca = CA_default # The default ca section
[ CA_default ]
dir = ~/Desktop/"OpenSSL Certificates"
certs = $dir/certs
crl_dir = $dir/crl
database = $dir/index.txt
new_certs_dir = $dir/newcerts
certificate = $dir/cacert.pem
serial = $dir/serial
crlnumber = $dir/crlnumber
cr = $dir/crl.pem
private_key = $dir/private/cakey.pem
[ req ]
# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
# The size of the key in bits
default_bits = 4096
[ req_distinguished_name ]
countryName = GB
stateOrProvinceName = SOME_PROVINCE
localityName = SOME_CITY
organizationName = domain
organizationalUnitName = domain
commonName = domain Certificate Authority
emailAddress = [email protected]
[ v3_ca ]
# Extensions added to the request
basicConstraints = critical, CA:TRUE
keyUsage = critical, keyCertSign, cRLSign
'openmediavault_openssl.cnf'
[ req ]
# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_distinguished_name
req_extensions = v3_req
# The size of the key in bits
default_bits = 4096
[ req_distinguished_name ]
countryName = GB
stateOrProvinceName = SOME_PROVINCE
localityName = SOME_CITY
organizationName = OpenMediaVault
organizationalUnitName = OpenMediaVault
commonName = OpenMediaVault.local
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alternative_names
[ alternative_names ]
DNS.0 = domain.com
IP.0 = 192.168.1.123
'openwrt_openssl.cnf'
[ req ]
# Don't prompt for the Domanin Name (DN). Use configured values instead.
# This Saves having to type in your DN each time.
prompt = no
string_mask = default
distinguished_name = req_distinguished_name
req_extensions = v3_req
# The size of the key in bits
default_bits = 4096
[ req_distinguished_name ]
countryName = GB
stateOrProvinceName = SOME_PROVINCE
localityName = SOME_CITY
organizationName = OpenWrt
organizationalUnitName = OpenWrt
commonName = OpenWrt.local
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alternative_names
[ alternative_names ]
DNS.0 = domain.com
IP.0 = 192.168.1.1
「/certificates」ディレクトリに「OpenMediaVault.crt」をインストールし、「/keys」ディレクトリに「OpenMediaVault.pem」をインストールしました。
"certificate.pfx"ファイルは "私のガイド"セクションの最後のコマンドの結果であり、Windows certmgrにインポートされました。私はFirefoxの認証オプションと一緒に「My Custom CA.crt」ファイルを使用します。
私は何が間違っていましたか?
非常にありがとう
〜する
アップデート1
問題の原因を見つけたと思います。私が訪れるときhttps://openmediavault.local(これは証明書に設定されている一般名です。)「証明書は次の名前にのみ有効です」というメッセージが表示されます。私の画面に表示される2つ(そのうちの1つはプライバシーのために隠されています)は、私が追加したsubjectAltNamesです。代替名は有効ですが、CNが無効な理由は何ですか?私からhttps://192.168.1.123Firefoxのアドレスバーに緑色のロックがあります。
アップデート2
お知らせするためにsubjectAltNameにCNを追加しましたが、すべてがうまくいきます。
OpenSSLに関する注意事項として、OpenVPN証明書を作成したいと思います。 OpenSSLを使用して作成したCAは私のOpenVPN証明書に署名できますか?
ベストアンサー1
はい、SAN(サブジェクト代替名)拡張がある場合、ブラウザはCNを解決しなくなります。これは以下で指定されます。RFCセクション2818.3.1、Chromeは約2年前にこの作業を開始し(Chrome 58)、Firefoxは約3年前に公に発行された証明書に対して同じことを行いました(Firefox 48)。 FirefoxにプライベートCAの例外があるかどうかはわかりません。 (ところで、自分でデバッグを上手にしました!)
それにもかかわらず、SubjectAltNamesで使用したいすべての名前を使用して証明書を再発行する必要があります。