DTIサーバー構築21 「本当にそれでいいのね?」

ということで、予告通りCAcertのルート証明書をインストールしてみる。
ちなみにMacです。Windows?何それ?美味しいの?

まずは、次のページからルート証明書(DER)をダウンロードします。

CAcert's roots
CAcert’s roots

キーチェーンアクセスを起動します。

キーチェーンアクセス
キーチェーンアクセス

メニューの「ファイル」-「読み込む…」で、ダウンロードしたファイルを指定します。
目的のキーチェーンはシステムで、常に信用しましょう。

さて、では、再びCAcertに署名された証明書を利用する我がサイトに接続。

https://sin-cos.com/
すると、ど〜でしょ〜。

この証明書は有効です
この証明書は有効です

先ほどまでは警告が出ていたページが、同じ証明書なのにもかかわらず、
「この証明書は有効です」と、保証されています。

でも、これでは使えない。
StartSSLの証明書を取りましょうか。

DTIサーバー構築20 「文句があるのか、お上のお墨付きじゃ!」

タイトルをふざけすぎて、検索サイトでは上位に上がって来れないよね。

さて、サーバー証明書を手に入れたので、Apacheに組み込んでみます。
SSLの設定ファイルを編集しましょう。

$ sudo vi /etc/httpd/conf.d/ssl.conf
以下の部分を作成した秘密鍵と証明書に変更します。

SSLCertificateFile /etc/pki/tls/certs/domain.pem
SSLCertificateKeyFile /etc/pki/tls/private/domain.pem

Apacheを再起動して、

$ sudo service httpd restart
httpd を停止中:                                            [ OK ]
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (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 yourdomain.com:443 (RSA)
Enter pass phrase: ←ここで秘密鍵のパスワードを入力
OK: Pass Phrase Dialog successful.

秘密鍵がパスワードで暗号化されていると、起動時に入力が必要になります。
しかし、これはちょっと実用的ではありません。
なので、パスワードを出力するスクリプトを用意してみます。
場所はどこでもOKです。

$ sudo vi /path/to/passphrase-script

次の内容でファイルを保存します。

#!/bin/sh
echo “password”
ファイルの属性を変更します。

$ sudo chmod 500 /path/to/passphrase-script

先ほどの設定ファイルを再び開いて、

$ sudo vi /etc/httpd/conf.d/ssl.conf

パスワードの取得方法を変更します。

SSLPassPhraseDialog  exec:/path/to/passphrase-script

Apacheを再度再起動すると、

$ sudo service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

パスワードを聞かれることなく起動しました。
ちなみに、秘密鍵の暗号化を解いておくという方法もあります。

$ sudo openssl rsa -in /etc/pki/tls/private/domain.pem -out /etc/pki/tls/private/nopass.pem
Enter pass phrase for /etc/pki/tls/private/domain.pem: ←ここで又もやパスワード入力
writing RSA key

さてと、ブラウザで開いてみましょう。

https://yourdomain.com/
ちなみに、CAcertの証明書を使っています。
そしてブラウザはChrome。

このサイトのセキュリティ証明書は信頼できません
このサイトのセキュリティ証明書は信頼できません

やっぱりダメです。ブラウザに認証用のファイルが含まれていません。
念の為に証明書を見てみますが、きちんとCAcertにて署名されています。

この証明書は不明な機関によって署名されています
この証明書は不明な機関によって署名されています

ということで、CAcertのroot証明書をインストールしてみますか?

DTIサーバー構築19「タダほど怖い物はないぞ」

どうしてSSLで接続するのか?
暗号化して、途中経路での盗聴を防ぐため。
通信相手を確認するため。
自分で認証した証明書でも盗聴は防げるが、自分であることの証明はできない。
それに、SSLに使う証明書が公的に証明されていないと、GMailさんに拒否られたりする。
Unable to establish secure SSL connection to mail.yourdomain.com [ Help ]
Server returned error: “SSL error: self signed certificate”
対処法は、、、SSLなしでユーザー認証するしかないのか?

否!

CAsertで、無料でサーバー証明書をゲットだぜ!!
http://www.cacert.org/
とりあえず、上記URLへ行く。

CAcert
CAcert

まずは、コミュニティに参加するために、赤枠部分をクリック!
だがしかし、、、

このサイトのセキュリティ証明書は信頼できません
このサイトのセキュリティ証明書は信頼できません

え?
CAcert自身の証明書がブラウザに登録されてない。
無料とはいえ、いちいち証明書を登録なんか一度もしたことない承認局の承認を受けても、、、

需要があるかどうか分からないけど、続ける。

まずは、入力。

詳細情報
詳細情報

しかし、「 5つの質問と答え」を入力しないといけないとは。

登録後、しばらくすると確認のメールが届くので、URLをクリックして確認。

送信済み
送信済み

ログインして次の作業に進みましょう。

ログイン
ログイン

ログインができたら、サーバ証明書を作っていきましょう。

まずはメニューから「ドメイン」-「追加」を選びます。
ドメインの所有者だという確認を行うために、ドメインを入力します。
ドメイン
ドメイン

ドメイン管理者として有効なメールアドレスを選択してメールを待ちます。

メールアドレス選択
メールアドレス選択
送信済み
送信済み
送られたメールのアドレスをブラウザで開くと選択画面が開きます。
(Google Appsでのメールを利用している場合、postmasterはデフォルトで受信できません。
Verify
Verify
Verifyを選択すると確認完了です。
ドメイン確認完了
ドメイン確認完了
次にメニューから「サーバ証明書」-「新規作成」を選びます。
サーバ証明書 - 新規作成
サーバ証明書 – 新規作成

CAcert 証明書の利用規定(Acceptable Use Policy)を読んで、サーバーで作成したCSRを貼り付けましょう。

CSR(Certificate Signing Request)
CSR(Certificate Signing Request)

送信すると確認画面。

CommonName確認
CommonName確認

確認して送信すると、いきなり証明書が現れます。

サーバ証明書
サーバ証明書

さてと、使いますかね。使えますかね?

DTIサーバー構築18 「ここと〜、ここに、ご記入お願いします。」

証明書を認証局に頼んで作ってもらうために、申請用のファイル(CSR)を作ります。
とりあえず、申請書用のフォルダを作りましょうかね。

$ sudo mkdir /etc/pki/tls/csr
$ sudo chmod 700 /etc/pki/tls/csr
さて、申請書を作ります。

$ sudo openssl req -new -key /etc/pki/tls/private/domain.pem -out /etc/pki/tls/csr/domain.csr
Enter pass phrase for /etc/pki/tls/private/neo.sin-cos.com.pem: ←ここで秘密鍵を作るときに利用したパスワードを入力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) []:都道府県
Locality Name (eg, city) [Default City]:市町村
Organization Name (eg, company) [Default Company Ltd]:会社名
Organizational Unit Name (eg, section) []:部署名
Common Name (eg, your name or your server’s hostname) []:yourdomain.com
Email Address []:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

ちなみに、CAcertだと、Common Nameしか利用されません。
さて、生成したファイルを表示して、コピーしたりして使いましょう。

$ sudo cat /etc/pki/tls/csr/domain.csr

DTIサーバー構築17「人に見せるもんじゃないだろ!」

SSL証明書を作る前に、秘密鍵(domain.pem)を作りましょう。
さらに鍵を作る前に、乱数の種(seed.dat)を作りましょう。
さらにさらに乱数の種を作る前に、、、いや、もうありません。

$ sudo openssl md5 /var/log/* > seed.dat
ログフォルダのハッシュ値を種として使います。

次のコマンドで秘密鍵が生成されます。とても大事な誰にも見せてはいけない物です。

$ sudo openssl genrsa -rand seed.dat -des3 -out /etc/pki/tls/private/domain.pem 2048
1492 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
……………………………..+++
……………………………………………………………….+++
e is 65537 (0x10001)
Enter pass phrase for /etc/pki/tls/private/domain.pem: ←ここで秘密鍵自体を暗号化するためのパスワードを入力
Verifying – Enter pass phrase for /etc/pki/tls/private/domain.pem: ←更に同じパスワードを入力(忘れるとどうにもなりません。)

さらに、rootしか見れないように、権限も厳しくしておきます。

$ sudo chmod 600 /etc/pki/tls/private/domain.pem

さて、秘密鍵の作成は完了です。
次はこれを元に証明書作成のためのファイルを作りましょうか。