自己認証局を構築します
Linux OS には初期状態で認証局構築ツールが入っています。ここではこのツールを使って自己認証局を構築します。
OpenSSL の設定を自己認証局構築用に変更します
# vi /etc/pki/tls/openssl.cnf
[ usr_cert ]
(略)
basicConstraints=CA:FALSE
↓
basicConstraints=CA:TRUE
[ v3_ca ]
(略)
# nsCertType = sslCA, emailCA
↓
nsCertType = sslCA, emailCA
有効期限を10年に変更したい場合
# vi /etc/pki/tls/misc/CA
CADAYS="-days 1095" # 3 years
↓
CADAYS="-days 3650" # 10 years
証明書のラベル付けファイル
「/etc/pki/CA/」ディレクトリ下に証明書のラベル付けに使用するシリアルファイルを作成します。
# echo '1000' > /etc/pki/CA/serial
自己認証局の作成
自己認証局を作成します。赤文字の箇所以外は [Enter] でOKです。
# /etc/pki/tls/misc/CA -newca CA certificate filename (or enter to create) [Enter] (略) Enter PEM pass phrase: 8888 Verifying - Enter PEM pass phrase: 8888 (略) Country Name (2 letter code) [XX]: JP State or Province Name (full name) []: Tokyo Locality Name (eg, city) [Default City]:[Enter] Organization Name (eg, company) [Default Company Ltd]:[Enter] Organizational Unit Name (eg, section) []:[Enter] Common Name (eg, your name or your server's hostname) []: private-ca Email Address []:[Enter] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:[Enter] An optional company name []:[Enter] Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for /etc/pki/CA/private/./cakey.pem: 8888 Check that the request matches the signature Signature ok (略:入力した認証局の情報が表示されます) Certificate is to be certified until May 31 10:44:53 2026 GMT (3650 days) Write out database with 1 new entries Data Base Updated
自己認証局の秘密鍵のパスフレーズを削除
# cd /etc/pki/CA/private/ # openssl rsa -in cakey.pem -out cakey.pem Enter pass phrase for cakey.pem: 8888
自己認証局の秘密鍵のパーミションを変更
# chmod 400 /etc/pki/CA/private/cakey.pem
以上で、自己認証局の構築完了です。
「/etc/pki/CA/cacert.pem」が「自己認証局のルート証明書」になりますので、これを作業するPCのブラウザにインストールします。
サーバー証明書の発行・・・サーバー毎に作成します
サーバー証明書用の秘密鍵を作成します
# openssl ecparam -name prime256v1 -genkey -out server.key
証明書発行要求(CSR)を作成
証明書発行要求(CSR)を作成します。自己認証局構築の時と同じく、赤文字の箇所以外は<空エンター>でOKです。
# openssl req -new -key server.key > server.csr Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:[Enter] Organization Name (eg, company) [Default Company Ltd]:[Enter] Organizational Unit Name (eg, section) []:[Enter] Common Name (eg, your name or your server's hostname) []:east-mikas.com Email Address []:[Enter] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:[Enter] An optional company name []:[Enter]
OpenSSL の設定をサーバー証明書発行用に変更
自己認証局構築用になっている OpenSSL の設定をサーバー証明書発行用に変更します。(サーバー証明書の有効期限も10年に変更しています)
# vi /etc/pki/tls/openssl.cnf
[ CA_default ]
(略)
default_days = 365
↓
default_days = 3650
[ usr_cert ]
(略)
basicConstraints=CA:TRUE
↓
basicConstraints=CA:FALSE
# nsCertType = server
↓
nsCertType = server
サーバー証明書を発行
証明書発行要求(CSR)を元に、自己認証局を使ってサーバー証明書を発行します。
# openssl ca -in server.csr -out server.crt Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok (略:入力したCSRの内容が表示されます) Certificate is to be certified until Oct 15 21:46:11 2027 GMT (3650 days) Sign the certificate? [y/n]: y 1 out of 1 certificate requests certified, commit? [y/n] y Write out database with 1 new entries Data Base Updated
server.csrの削除
# rm -f server.csr
SSL証明書をインストールするWebサーバーでの作業
自己認証局で作成したserver.keyとserver.crtファイルは、運用する対象PCに設置する必要があります。簡単なのは、自己認証局に接続したSSHターミナルと、運用するWebサーバーに接続したSSHターミナル間で、catで内容をコピーペーストするのが簡単です。
証明書ファイルとキーファイルの設置
# cd /etc/pki/tls/private/ # vi server.key 中身は、自己認証局に接続したSSHターミナルでserver.keyの中身を表示させ、コピーペーストします。 # cd /etc/pki/tls/certs/ # vi server.crt server,key 同様に自己認証局からコピーペーストします。
パーミッションを変更
# chmod 600 /etc/pki/tls/private/server.key # chmod 600 /etc/pki/tls/certs/server.crt
SELinuxの設定
SELinux を有効にしている場合は、秘密鍵とサーバー証明書にセキュリティコンテキストをつけておきます。(WEBサーバーの起動時にエラーが発生することがあります)
# restorecon -v /etc/pki/tls/private/server.key # restorecon -v /etc/pki/tls/certs/server.crt
SSLファイルの設定
サーバー証明書を設置するサーバーはApacheが既にインストールされ、サーバー名等の設定も済んでいるとします。
運用するWEBサイト(east-mikas.com)で、自己認証局で発行したサーバー証明書と秘密鍵を設定します。
# vi /etc/httpd/conf.d/ssl.conf
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443
↓
DocumentRoot "/var/www/html"
ServerName east-mikas.com:443
・・・
SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/private/server.key
firewalld で HTTP(80/tcp) と HTTPS(443/tcp) を開けておきます。
# firewall-cmd --add-port=80/tcp --permanent # firewall-cmd --add-port=443/tcp --permanent # firewall-cmd --reload
Apache httpd を起動します。
# systemctl start httpd
表示するクライアントPCでの確認
hostsファイルの編集
クライアントPCの hosts ファイルに次の一行を追加しておきます。
# vi /etc/hosts
<WEBサーバのIPアドレス> east-mikas.com
この段階ではブラウザから「https://east-mikas.com/」を表示すると、自己認証局のルート証明書がインストールされていないため、下のような信頼エラーが表示されます。
ルート証明書のインストール
今回は WEBブラウザの FireFox に自己認証局のルート証明書をインストールしてみます。他のブラウザについては未確認です。
自己認証局のルート証明書「/etc/pki/CA/cacert.pem」を手元のパソコンにコピーしておきます。
右上のメニューアイコンをクリックし、出てきたメニューから「設定」を選択します。
プライバシーとセキュリティを選択し、出てきた画面の一番下にある証明書を選択します。
証明書マネージャーから、認証局証明書⇒インポートボタンから、「cacert.pem」を指定してインポートします
下図は、自己認証局から発行されたSSL証明書で稼働した場合、ルート証明書をブラウザにインストールすると、ブラウザの鍵マークが緑色になる事が分かります