CentOS7 自己署名証明書の利用

シェアする

通信内容を見られたくない場合、暗号化を施しますが、サイト公開する場合は、SSLサーバ証明書を利用するのが一般的です。当然、第三者機関である認証局より発行されますので、費用も掛かります。
但し、サーバ利用者が特定できるのであれば、必ずしも、第三者機関である認証局を利用せずとも、自前でSSLサーバ証明書を発行して、それを利用することで、HTTPSサイトを公開できます。

世間では、「オレオレ証明書」とか言ったりしますが、卑劣な犯罪で使われている言葉なので、好きではありません。正式ではないかも知れませんが、「自己署名証明書」と言うらしいです。

CA構築前の準備

CA構築前に準備が必要です。
また、ファイルの保管場所や名称などを変更したい場合は、「/etc/pki/tls/openssl.cnf」ファイルを修正する必要があります。※今回はこのファイルはさわらずに、構築します。

# touch /etc/pki/CA/index.txt <LF> <= 証明書データベースファイルを用意
# echo 01 > /etc/pki/CA/serial <LF> <= シリアルファイルを用意

CA証明書のキーファイル作成

キーファイル(RSA秘密鍵)を作成します。

# cd /etc/pki/CA/private <LF>
# openssl dgst -md5 /var/log/messages > randam.dat <LF> <= 擬似的な乱数としてファイル作成
# openssl genrsa -aes256 2048 -rand randam.dat > cakey.pem <LF> <= キーファイルの作成
Generating RSA private key, 2048 bit long modulus
................................................+++
.......................+++
e is 65537 (0x10001)
Enter pass phrase: xxxx <= パスフレーズを入力
Verifying - Enter pass phrase: xxxx <= パスフレーズを入力
# \rm /etc/pki/CA/private/randam.dat <LF> <= 擬似的な乱数ファイルは削除
# chmod 600 cakey.pem <LF> <= 権限の変更
# openssl rsa -in cakey.pem -text <LF> <= 内容を確認する場合
Enter pass phrase for cakey.pem: xxxx <= パスフレーズを入力

CA証明書の作成

CA証明書を作成します。

# cd /etc/pki/CA <LF>
# openssl req -new -x509 -keyout private/cakey.pem -days 1825 > cacert.pem <LF>
Generating a 2048 bit RSA private key
...............................+++
.............+++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase: xxxx <= キーファイル作成時のパスフレーズ
Verifying - Enter PEM pass phrase: xxxx <= キーファイル作成時のパスフレーズ
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Hyogo
Locality Name (eg, city) [Default City]:Takarazuka
Organization Name (eg, company) [Default Company Ltd]:orangetakam
Organizational Unit Name (eg, section) []:. <= 何も指定しない時は「.」(ピリオド)
Common Name (eg, your name or your server's hostname) []:orangetakamCA
Email Address []:. <= 何も指定しない時は「.」(ピリオド)
# ls -l ca*.pem ../ca*.pem <LF>
-rw-r--r-- 1 root root 1021 Jan  5 22:49 ../cacert.pem <= CA証明書(自己署名済)
-rw------- 1 root root 1766 Jan  5 22:45 cakey.pem <= CA証明書の秘密鍵
# openssl x509 -in cacert.pem -text <LF> <= 内容を確認する場合

サーバ証明書のキーファイル作成

キーファイル(RSA秘密鍵)を作成します。

# cd /etc/pki/tls/private <LF>
# openssl dgst -md5 /var/log/messages > randam.dat <LF> <= 擬似的な乱数としてファイル作成
openssl genrsa -aes256 2048 -rand randam.dat > orange_key.pem <LF> <= キーファイルの作成
Generating RSA private key, 2048 bit long modulus
.................................................................................+++
.......................+++
e is 65537 (0x10001)
Enter pass phrase: zzzz <= パスフレーズを入力
Verifying - Enter pass phrase: zzzz <= パスフレーズを入力
# \rm /etc/pki/tls/private/randam.dat <LF> <= 擬似的な乱数ファイルは削除
# chmod 600 orange_key.pem <LF> <= 権限の変更
# openssl rsa -in orange_key.pem -text <LF> <= 内容を確認する場合
Enter pass phrase for orange_key.pem: zzzz <= パスフレーズを入力

サーバ証明書作成用のCSRファイル作成

証明書を発行するためのCSRファイル(公開鍵+証明書申請情報)を作成します。
通常は、ここで作成したファイルを認証局に提出してサーバ証明書を発行してもらいます。
※実際は、各認証局の手順に従ってください。

# openssl req -new -sha256 -key orange_key.pem > orange_csr.pem <LF> <= CSRファイルの作成
Enter pass phrase for orange_key.pem: zzzz <= キーファイル作成時のパスフレーズ
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Hyogo
Locality Name (eg, city) [Default City]:Takarazuka
Organization Name (eg, company) [Default Company Ltd]:orangetakam
Organizational Unit Name (eg, section) []:. <= 何も指定しない時は「.」(ピリオド)
Common Name (eg, your name or your server's hostname) []:orangetakam
Email Address []:. <= 何も指定しない時は「.」(ピリオド)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: <= 何も入力しない
An optional company name []: <= 何も入力しない
# chmod 600 orange_key.pem <LF> <= 権限の変更
# ls -l orange*.pem <LF>
-rw-r--r-- 1 root root 1017 Jan  5 23:08 orange_csr.pem <= サーバ証明書の要求(CSR)
-rw------- 1 root root 1766 Jan  5 23:04 orange_key.pem <= サーバ証明書の秘密鍵
# openssl req -in orange_csr.pem -text <LF> <= 内容を確認する場合

サーバ証明書の発行

サーバ証明書を発行します。

# cd /etc/pki/tls/certs <LF>
# openssl ca -in orange_csr.pem > orange_crt.pem <LF>
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem: xxxx <= キーファイル作成時のパスフレーズ
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jan  5 15:19:39 2015 GMT
            Not After : Jan  5 15:19:39 2016 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Hyogo
            organizationName          = orangetakam
            commonName                = orangetakam
         X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                DC:C1:8C:16:50:75:87:BA:04:ED:28:2D:3F:14:BE:D3:CA:DE:C3:C3
            X509v3 Authority Key Identifier:
                keyid:2E:74:6A:9E:84:FC:B7:6B:76:D8:B0:08:92:3E:FC:D8:B2:09:73:87

Certificate is to be certified until Jan  5 15:19:39 2016 GMT (365 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
# openssl x509 -in orange_crt.pem -text <LF> <= 内容を確認する場合

作成した証明書の利用

サービスの再起動をするたびに下記のように、パスフレーズの入力を求められるので、キーファイルにRSAキーを書き込んでおきます。

# systemctl restart httpd <LF>
Enter SSL pass phrase for orange.servecounterstrike.com:443 (RSA) : ****
# cd /etc/pki/tls/private <LF>
# mv orange_key.pem orange_key.pem.org <LF>
# openssl rsa -in orange_key.pem.org -out orange_key.pem <LF>
Enter pass phrase for orange_key.pem.org: zzzz
writing RSA key

ブラウザにCA証明書をインストール

自己署名されたCA証明書をブラウザにインストールをしなければ、ブラウザ側で「信頼された証明書でない。」
と、警告を出力します。なので、ブラウザにCA証明書をインストールできるようにします。

# openssl x509 -inform PEM -outform DER -in /etc/pki/CA/cacert.pem \
> > /etc/pki/CA/cacert.der <LF>
# cp -p /etc/pki/CA/cacert.der /var/www <LF>

Apache HTTPへの設定

Apache HTTPで利用するには、下記のような設定になるでしょう。

# vim /etc/httpd/conf.d/ssl.conf <LF>
   :
SSLCertificateFile /etc/pki/tls/orange_crt.pem
   :
SSLCertificateKeyFile /etc/pki/tls/private/orange_key.pem
   :
# vim /etc/httpd/conf/httpd.conf <LF>
   :
< IfModule mime_module>
   :
  AddType application/x-x509-ca-cert .der <= 追加
   :
< /IfModule>