ポイント
- 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サーバ証明書のページ。初めてなので右側のリンクをクリック
②製品選択
CentOS は Linux サーバなので、サーバタイプは「Microsoft 以外のサーバ」を選択します。
③お客さま情報入力
お客様情報入力では、「企業・団体名」「部署名」など企業体を連想するフォームがありました。個人サイトのテストでしたので、サイトを企業と読み替え、あとは嘘つきにならない程度に適当に入力しました。
④CSR 貼り付け
ウェブページに移る前に最初に確認した、CentOS で作成した CSR のファイル内容をここに貼り付けます。
⑤入力情報確認 利用規約の同意にチェックして、「申請する」
「ディスティングイッシュネーム( CSR 情報)」は発行される SSL 証明書に記載される内容で、万人が見るものですので慎重に確認します。もし間違えていたら、CentOS での操作に戻って CSR の作成をやり直します。
⑥完了
完了画面が出た後、登録したアドレスにメールが届きます。その内容に従って CentOS に SSL 証明書をインストールしていきます。
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 サーバ証明書のインストールを確認 @ ウェブブラウザ
ブラウザから確認したところ、今まで設定した内容が反映されていました!
けれども、「この証明書は、信頼されていない発行者によって署名されています」と警告が出てしまいます><。これはテスト証明書のためだそう。なんだか釈然としません。せっかくインストールしましたのに。。。
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 ファイルをダブルクリックなどで実行すると、証明書の追加ウインドウが表示されます。
「証明書を表示」から、内容を確認します。ルート証明書についてのウェブページと内容が同じか確認します。
「常に信頼」をクリックして、Mac のキーチェーンアクセスアプリにSSL証明書を追加します。
このあと、Mac のユーザー認証情報の入力が表示されるので、入力して「設定をアップデート」で完了です。たぶん。。。
6.再び SSL サーバ証明書のインストールを確認 @ ウェブブラウザ
ブラウザからアクセスして確認しました。。。
ダメだったです><。
キーチェーン「システム」としてルート証明書をインストールしなおしてみましたけれども、やっぱりだめです。
証明書の指紋をあらためましたところ、一致しないのでこれが原因でしょうか?わかりません。今回はここまでとします!
おわりに
本ブログのドメイン「oki2a24.com」に対して SSL を使いますと「このサイトのセキュリティ証明書は信頼できません」と無慈悲なメッセージが表示されます。
これを何とかするには第3者機関に、このサイトの暗号化通信はいい感じ!大丈夫!と認めていただき、その内容をサーバにインストールする必要があります。
ですけれども、ダイジョブ!と認めていただくためには年間数〜十数万円程度のお金を支払う必要があります。信頼ってお高いのですね♪
せめてやり方だけでも体験できないものでしょうかと考えていたところ、「テスト用無料SSLサーバ証明書」なるものがあることを知ることができました。今回、実際にやってみて、その記録を残そうと思ったのでした。
また、今回実際にやって見るにあたり、次のページが参考になりました。ありがとうございます♪
- [CSR生成] Apache 2.x + mod_ssl + OpenSSL(新規・更新)|SSLサーバ証明書ならグローバルサイン (旧日本ジオトラスト株式会社)
- [インストール] Apache 2.x + mod_ssl + OpenSSL(新規・更新)|SSLサーバ証明書ならグローバルサイン (旧日本ジオトラスト株式会社)
- 03) サブホストで独自SSL | SSL | RVカスタムシリーズ マニュアル | VPSならラピッドサイト
- 01) CSRの発行 | SSL | RVカスタムシリーズ マニュアル | VPSならラピッドサイト
- 02) SSL証明書(Cert)のインストール | SSL | RVカスタムシリーズ マニュアル | VPSならラピッドサイト
- UNIXの部屋 コマンド検索:openssl (*BSD/Linux)
- OpenSSL: Documents, openssl(1)
以上です。