カテゴリー
Linux

SSLサーバ証明書をコマンドを使ってCA認証局とやり取りしながらサーバにインストールした記録♪

ポイント

  • OpenSSL コマンドは自動でディレクトリを生成してくれないので、ないディレクトリは作業前に作成しておくこと!
  • 秘密鍵 = 一種のパスワードだが、秘密鍵自体にさらにパスワードをかける。混乱したが、それだけ大事な情報だということ。しかしこの場合、Apaceh の再起動のたびに秘密鍵のパスワード入力を求められるため、運用方法によっては秘密鍵のパスワードを解除する方法もありうる、といいますかそのようなパターンは結構あると思います。

やりたいことや環境について

  • oki2a24.com に対して、ベリサインの「テスト用無料SSLサーバ証明書」を適用したい
  • oki2a24.com があるのは CentOS 5.9 で、Apache 2.x + mod_ssl + OpenSSL。ユーザは root で操作
  • SSL 証明書の確認は Mac の Chrome で行う

用語の整理

  • コモンネーム = SSL暗号化通信を行うサイトのURL
  • 秘密鍵 = RSA PRIVATE KEY
  • CSR = certificate signing request = certification request = BEGIN CERTIFICATE REQUEST 〜 END CERTIFICATE REQUEST = 証明書署名要求 = CA 認証局に送るサイト内容データ & 公開鍵データ。ひとつのファイルに両方の情報が含まれる。CA 認証局に提出する用に秘密鍵を使用してよくわからない文字列の状態で作成してくれる。
  • SSLサーバ証明書 = crt = BEGIN CERTIFICATE 〜 END CERTIFICATE

登場する CentOS ファイルの整理

No 項目 パス
1 秘密鍵 /etc/httpd/conf/ssl.key/ssl.oki2a24.com2013.key
2 CSR /etc/httpd/conf/ssl.csr/ssl.oki2a24.com2013.csr
3 SSL サーバ証明書 /etc/httpd/conf/ssl.crt/ssl.oki2a24.com2013.crt
4 中間 CA 証明書 /etc/httpd/conf/ssl.crt/dvcacert.cer
5 SSL 設定用 conf ファイル /etc/httpd/conf.d/ssl.conf

No の順番にファイルを作成したり、編集したりを行っていきます。

1.秘密鍵の作成 @ CentOS

まずは OpenSSL がインストールされているか確認します。

[root@oki2a24 ~]# openssl version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
[root@oki2a24 ~]#

作業用 & 保存用ディレクトリである、Apache の設定ファイルである conf のパスに移動します。

[root@oki2a24 ~]# cd /etc/httpd/conf/
[root@oki2a24 conf]#

秘密鍵を生成します。 パスフレーズ(パスワードみたいなもの。)はずっと必要となりますので確実に忘れないようにします。

なお、ディレクトリは自動的に作成してくれませんでした。エラーとなりましたので注意です><。

[root@oki2a24 conf]# openssl genrsa -des3 -out ./ssl.key/ssl.oki2a24.com2013.key 2048
./ssl.key/ssl.oki2a24.com2013.key: No such file or directory
44804:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen('./ssl.key/ssl.oki2a24.com2013.key','w')
44804:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:
[root@oki2a24 conf]#

気を取り直して、ディレクトリを作成 → そこに移動 → 秘密鍵を作成、の手順でやり直します。

秘密鍵作成のコマンドオプションは次の役割があります。

  • genrsa → RSA 秘密鍵を生成
  • des3 → 3DES (Triple-DES。鍵長 112ビット) で暗号化
  • out → 出力ファイル名
  • 2048 → RSA 秘密鍵の長さ
[root@oki2a24 conf]# mkdir -p /etc/httpd/conf/ssl.key/
[root@oki2a24 conf]# cd ssl.key/
[root@oki2a24 ssl.key]# openssl genrsa -des3 -out ssl.oki2a24.com2013.key 2048
Generating RSA private key, 2048 bit long modulus
.........+++
....................+++
e is 65537 (0x10001)
Enter pass phrase for ssl.oki2a24.com2013.key:
Verifying - Enter pass phrase for ssl.oki2a24.com2013.key:
[root@oki2a24 ssl.key]#

2.CSR の生成 @ CentOS

  • CSR = CA 認証局に申請するサイトの身元情報 + 公開鍵

であると理解しています。それで、直前に生成した秘密鍵を使ってこれを作っていきます。

CSR を生成するコマンドを打ち、パスフレーズの入力後、下記のように CA 認証局へ申告する内容を入力していきます。

こちらも CSR を保存するディレクトリがない状態だとエラーとなって作成されませんので注意です。

【今回申告する内容】

No 項目 申告内容
1 Country Name (2 letter code) [GB]: JP
2 State or Province Name (full name) [Berkshire]: Hokkaido
3 Locality Name (eg, city) [Newbury]: Sapporo-shi
4 Organization Name (eg, company) [My Company Ltd]: oki2a24.com
5 Organizational Unit Name (eg, section) []: None
6 Common Name (eg, your name or your server’s hostname) []: oki2a24.com
7 Email Address []: 無記入
8 A challenge password []: 無記入
9 An optional company name []: 無記入

コマンドオプションの役割を見てみます。

  • req → CSR を作成。PKCS#10 (証明書発行要求の形式) のデータを扱う、そうです。
  • -new → 新しく作成
  • -key → 秘密鍵を指定
  • -out → 生成される CSR をフルパスで
[root@oki2a24 ssl.key]# cd ..
[root@oki2a24 conf]# mkdir -p /etc/httpd/conf/ssl.csr/
[root@oki2a24 conf]# openssl req -new -key ./ssl.key/ssl.oki2a24.com2013.key -out ./ssl.csr/ssl.oki2a24.com2013.csr
Enter pass phrase for ./ssl.key/ssl.oki2a24.com2013.key:
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) [GB]:JP
State or Province Name (full name) [Berkshire]:Hokkaido
Locality Name (eg, city) [Newbury]:Sapporo-shi
Organization Name (eg, company) [My Company Ltd]:oki2a24.com
Organizational Unit Name (eg, section) []:None
Common Name (eg, your name or your server's hostname) []:oki2a24.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@oki2a24 conf]#

3.CA 認証局に対して、SSLサーバ証明書を申し込み、発行されたサーバ証明書を受け取る @ ウェブブラウザ

作成された CSR を開いていつでもコピーできるようにしておきます。

[root@oki2a24 conf]# cat ssl.csr/ssl.oki2a24.com2013.csr 
-----BEGIN CERTIFICATE REQUEST-----
MIICtjCCAZ4CAQAwcTELMAkGA1UEBhMCSlAxETAPBgNVBAgTCEhva2thaWRvMRQw
EgYDVQQHEwtTYXBwb3JvLXNoaTEUMBIGA1UEChMLb2tpMmEyNC5jb20xDTALBgNV
BAsTBE5vbmUxFDASBgNVBAMTC29raTJhMjQuY29tMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAqqJq0ew1Y3lgwzg5khnTnpOCErCvy4dmlaZIIdBu5DMQ
aQwKXJCNPCCl9ThBo+GmDHjZLWiwS8a+CKYdCWQ4ZSghnhCsb9oleXE5DHd+lTyp
JoSS0jx7MZLpL9XAO/2Hpm0q0zuv9Nk5pVIbqrfTJkLJG+fKtM4VsbKUZwnPU4Je
6Up8Y6OlX7FxinjXx39+cunPecRBgutrO2Jx41UsA2sWzjS6Dsc8GzgnIrDLxLyE
tpYYIyxI2/8rmv6tKTXpewcSYQMff0gEKFUD4/yqZ8OjuVK0ZGA5aNIUI6wew5v8
TJl9mxfyrqgVbWjszS21JHKLZMY16nsb4mB+r1FttwIDAQABoAAwDQYJKoZIhvcN
AQEFBQADggEBAFFGR/rT9cTJ1wDwj2sFvyA39YIJ8EGMKYrfidhLXK3CLh/mNuWN
pJgW4Mka8ioYp/KdJKHZXNXZzGkluJmtTosiXvGJLaoXXOcE3DsYCK7XF2sb598a
cQRkiX+nVTe5HqpPK+dVQVZbW95OVPsbXfHBBvxZDYltmUUFgYefnxb2332025C6
NUnFmFxwtihsmSsrGi14rgJ8Ukm9q6cx1P4dUPuc2NQzdYpfYxDHhGIffxovHG8F
dc6+XWW2hLOQy3HmuEGMDOhg9alCmTqBUdlJFF7mJWKQgFutmSBGU5E85li/9/zv
kKXhHUiIQKJOCoJ24FEmmHWdTBTKrARg0Ok=
-----END CERTIFICATE REQUEST-----
[root@oki2a24 conf]#

今回は流れを把握したいだけなので、テスト用無料SSLサーバ証明書を申し込みます。

①テスト用無料SSLサーバ証明書のスタートページ

ベリサインのテスト用無料SSLサーバ証明書のページ。初めてなので右側のリンクをクリック

スクリーンショット_2013-06-22_11.33.46.png

②製品選択

CentOS は Linux サーバなので、サーバタイプは「Microsoft 以外のサーバ」を選択します。

スクリーンショット_2013-06-22_11.35.16-2.png

③お客さま情報入力

お客様情報入力では、「企業・団体名」「部署名」など企業体を連想するフォームがありました。個人サイトのテストでしたので、サイトを企業と読み替え、あとは嘘つきにならない程度に適当に入力しました。

スクリーンショット_2013-06-22_11.36.32.png

④CSR 貼り付け

ウェブページに移る前に最初に確認した、CentOS で作成した CSR のファイル内容をここに貼り付けます。

スクリーンショット_2013-06-22_11.42.05.png

⑤入力情報確認 利用規約の同意にチェックして、「申請する」

「ディスティングイッシュネーム( CSR 情報)」は発行される SSL 証明書に記載される内容で、万人が見るものですので慎重に確認します。もし間違えていたら、CentOS での操作に戻って CSR の作成をやり直します。

スクリーンショット_2013-06-22_11.47.34.png

⑥完了

完了画面が出た後、登録したアドレスにメールが届きます。その内容に従って CentOS に SSL 証明書をインストールしていきます。

スクリーンショット_2013-06-22_11.49.25.png

4.SSL サーバ証明書をインストールと SSL 設定ファイルの編集と有効化 @ CentOS

SSL サーバ証明書の作成

「ベリサイン テスト用サーバ証明書発行のお知らせ」メール本文から「■B) X.509形式 (Apacheを代表とするサーバ(Microsoft IIS以外)用)」のデータ(—–BEGIN CERTIFICATE—– から —–END CERTIFICATE—–まで)をコピーしてサーバに保存します。

[root@oki2a24 conf]# mkdir -p /etc/httpd/conf/ssl.crt/
[root@oki2a24 conf]# vim /etc/httpd/conf/ssl.crt/ssl.oki2a24.com2013.crt
[root@oki2a24 conf]#

保存した証明書を確認してみます。コマンドの内容です。

  • x509 → X.509 公開鍵証明書を操作する
  • -text → 認証情報を全部表示する
  • -noout → エンコードの表示はしない
  • -in → 確認するファイル
[root@oki2a24 conf]# openssl x509 -text -noout -in ssl.crt/ssl.oki2a24.com2013.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            43:c5:9e:27:a2:86:5a:57:e2:99:fc:df:24:16:d2:be
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=JP, O=VeriSign Japan K.K., OU=For Test Purposes Only. No assurances., OU=Terms of use at https://www.verisign.co.jp/testcps, CN=Trial SSL Japan CA
        Validity
            Not Before: Jun 22 00:00:00 2013 GMT
            Not After : Jul  6 23:59:59 2013 GMT
        Subject: C=JP, ST=Hokkaido, L=Sapporo-shi, O=oki2a24.com, OU=None, OU=https://www.verisign.co.jp/repository/testdrive/index.html, OU=r45011306379302, CN=oki2a24.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (2048 bit)
                Modulus (2048 bit):
                    00:aa:a2:6a:d1:ec:35:63:79:60:c3:38:39:92:19:
                    d3:9e:93:82:12:b0:af:cb:87:66:95:a6:48:21:d0:
                    6e:e4:33:10:69:0c:0a:5c:90:8d:3c:20:a5:f5:38:
                    41:a3:e1:a6:0c:78:d9:2d:68:b0:4b:c6:be:08:a6:
                    1d:09:64:38:65:28:21:9e:10:ac:6f:da:25:79:71:
                    39:0c:77:7e:95:3c:a9:26:84:92:d2:3c:7b:31:92:
                    e9:2f:d5:c0:3b:fd:87:a6:6d:2a:d3:3b:af:f4:d9:
                    39:a5:52:1b:aa:b7:d3:26:42:c9:1b:e7:ca:b4:ce:
                    15:b1:b2:94:67:09:cf:53:82:5e:e9:4a:7c:63:a3:
                    a5:5f:b1:71:8a:78:d7:c7:7f:7e:72:e9:cf:79:c4:
                    41:82:eb:6b:3b:62:71:e3:55:2c:03:6b:16:ce:34:
                    ba:0e:c7:3c:1b:38:27:22:b0:cb:c4:bc:84:b6:96:
                    18:23:2c:48:db:ff:2b:9a:fe:ad:29:35:e9:7b:07:
                    12:61:03:1f:7f:48:04:28:55:03:e3:fc:aa:67:c3:
                    a3:b9:52:b4:64:60:39:68:d2:14:23:ac:1e:c3:9b:
                    fc:4c:99:7d:9b:17:f2:ae:a8:15:6d:68:ec:cd:2d:
                    b5:24:72:8b:64:c6:35:ea:7b:1b:e2:60:7e:af:51:
                    6d:b7
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 CRL Distribution Points:
                URI:http://onsitecrl.verisign.co.jp/VeriSignJapanKKTrialSSLJapanCA/LatestCRL.crl

            X509v3 Subject Alternative Name:
                DNS:oki2a24.com
            X509v3 Certificate Policies:
                Policy: 2.16.840.1.113733.1.7.21
                  CPS: https://www.verisign.co.jp/testcps

            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Authority Key Identifier:
                keyid:43:11:B7:31:0F:78:3E:5E:50:9A:31:97:1A:AF:61:D9:A0:90:FC:1E

    Signature Algorithm: sha1WithRSAEncryption
        62:bb:98:a1:f6:91:f6:03:04:bd:d7:01:58:48:14:26:1e:c5:
        b9:41:8a:a2:48:45:c4:a8:0d:6a:fc:3f:81:42:92:7e:d6:a4:
        3a:3e:e1:3a:5e:a0:51:6c:65:11:73:a2:4d:dc:c6:1d:c4:c9:
        57:b7:46:a9:ea:fd:00:33:9c:fc:b4:be:cd:1e:94:aa:47:46:
        73:13:a5:29:0d:a0:03:2b:c3:00:44:72:61:90:29:aa:14:8e:
        ec:d5:11:cc:54:cd:c9:0e:61:fe:07:5e:da:b7:1e:53:6b:bd:
        c8:43:c7:f3:c2:11:12:f6:f8:25:a6:69:b9:27:42:aa:48:00:
        3a:62:f9:79:90:2c:59:be:7e:06:99:0a:97:3e:49:72:11:4c:
        45:49:28:11:f7:ea:ff:d7:ae:68:fc:35:81:6b:35:0f:1c:16:
        9f:08:4b:3e:79:5a:c5:96:53:8a:bc:8e:81:cf:4f:76:48:8c:
        b8:cc:4b:85:9d:70:b3:44:45:f9:62:8f:5b:6e:c7:94:ab:06:
        4c:11:a5:c3:75:b9:5b:bb:d1:14:cc:5c:42:9b:ad:9a:79:fd:
        8b:df:e9:79:07:6b:d0:b6:29:c6:a4:73:b3:67:00:27:f4:b1:
        88:cf:40:b9:9a:a9:b3:01:73:a6:fa:86:88:cc:c7:02:d2:ee:
        27:d1:58:44
[root@oki2a24 conf]#

中間CA証明書を作成

これはなんのためにあるのか、今のわたくしにはわからないですけれども、メールに入れてください!とありますので、入れます。

メール本文「■B)-2 X.509形式 -中間CA証明書-」で指定されたリンクから「-テスト用SSLサーバ証明書専用 中間CA証明書」および「-テスト用SSLサーバ証明書専用 中間CA証明書」データを入手し、サーバに保存します。

その際、「上に中間CA証明書、下にクロスルート設定用証明書の順で1つのテキストエディタに続けて貼り付ける」ことが注意点です。

【貼り付けイメージ】

-----BEGIN CERTIFICATE----- 
中間CA証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
クロスルート設定用証明書
-----END CERTIFICATE-----
[root@oki2a24 conf]# vim /etc/httpd/conf/ssl.crt/dvcacert.cer
[root@oki2a24 conf]#

Apacheの設定ファイル ssl.confに SSL の設定を 3 ヵ所行います。

[root@oki2a24 conf]# vim /etc/httpd/conf.d/ssl.conf

1カ所目、SSL サーバ証明書

SSLCertificateFile /etc/pki/tls/certs/localhost.crt

#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/httpd/conf/ssl.crt/ssl.oki2a24.com2013.crt

2カ所目、秘密鍵

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/ssl.oki2a24.com2013.key

3カ所目、中間 CA 証明書

#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/dvcacert.cer

Apache の再起動

今後は常に秘密鍵のパスワードを求められます。ですので、秘密鍵のパスワードは忘れてはならないのです。

[root@oki2a24 conf]# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Apache/2.2.3 mod_ssl/2.2.3 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server oki2a24.com:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
                                                           [  OK  ]
[root@oki2a24 conf]#

5.一旦 SSL サーバ証明書のインストールを確認 @ ウェブブラウザ

ブラウザから確認したところ、今まで設定した内容が反映されていました!

けれども、「この証明書は、信頼されていない発行者によって署名されています」と警告が出てしまいます><。これはテスト証明書のためだそう。なんだか釈然としません。せっかくインストールしましたのに。。。

スクリーンショット_2013-06-22_12.50.54.png

6.ルート証明書の取得 @ ウェブブラウザ、ルート証明書のインストール @ Mac

「信頼されていない」を取り除くために、「ベリサイン テスト用サーバ証明書発行のお知らせ」メールの「3) ルート証明書について」のリンクのデータを使用して、ルート証明書をクライアント端末、つまり Mac にインストールします。

  • ルート証明書(4階層接続用) Trial Class 3 Japan Root G1
  • ルート証明書(3階層接続用) Trial Class 3 Japan Root – G5

の2種類あってどちらを選択したらよいか迷います><。ブラウザから確認した SSL 証明書情報を確認すると、「Trial Class 3 Japan Root – G5」とあるので「ルート証明書(3階層接続用)」を使用します。

Mac のターミナルの vim などで Mac の好きな場所にルート証明書のデータをコピーして貼りつけたファイルを作成です。ファイル名は自由ですけれども、拡張子は「cer」とします。

user-no-MacBook-Pro:~ username$ vim ~/Documents/oki2a24.com.cer

Finder から oki2a24.com.cer を実行します。cer ファイルをダブルクリックなどで実行すると、証明書の追加ウインドウが表示されます。

スクリーンショット_2013-06-22_13.15.07-2.png

「証明書を表示」から、内容を確認します。ルート証明書についてのウェブページと内容が同じか確認します。

スクリーンショット_2013-06-22_13.05.24.png

「常に信頼」をクリックして、Mac のキーチェーンアクセスアプリにSSL証明書を追加します。

スクリーンショット_2013-06-22_13.06.30.png

このあと、Mac のユーザー認証情報の入力が表示されるので、入力して「設定をアップデート」で完了です。たぶん。。。

6.再び SSL サーバ証明書のインストールを確認 @ ウェブブラウザ

ブラウザからアクセスして確認しました。。。

ダメだったです><。

キーチェーン「システム」としてルート証明書をインストールしなおしてみましたけれども、やっぱりだめです。

証明書の指紋をあらためましたところ、一致しないのでこれが原因でしょうか?わかりません。今回はここまでとします!

おわりに

本ブログのドメイン「oki2a24.com」に対して SSL を使いますと「このサイトのセキュリティ証明書は信頼できません」と無慈悲なメッセージが表示されます。

これを何とかするには第3者機関に、このサイトの暗号化通信はいい感じ!大丈夫!と認めていただき、その内容をサーバにインストールする必要があります。

ですけれども、ダイジョブ!と認めていただくためには年間数〜十数万円程度のお金を支払う必要があります。信頼ってお高いのですね♪

せめてやり方だけでも体験できないものでしょうかと考えていたところ、「テスト用無料SSLサーバ証明書」なるものがあることを知ることができました。今回、実際にやってみて、その記録を残そうと思ったのでした。

また、今回実際にやって見るにあたり、次のページが参考になりました。ありがとうございます♪

以上です。

コメントを残す