DTIサーバー構築22 「あなたなら信じてもらえるかも」

StartSSLなら大概のブラウザに信用してもらえる。
そう思った私は、いてもたってもいられなくなり、すぐに電車に飛び乗った。
のではなく、次のページヘ急いだ。

http://www.startssl.com/
http://www.startssl.com/

次の表をみると無料で取得できるのは、Level1のみ。マルチドメインには対応していないので、そこは注意!

Comparison Chart
Comparison Chart

さて、では、もうそろそろ、やっとこさ、次のページから作成に入りましょう。

StartSSL™ Free
StartSSL™ Free

赤枠部分をクリックして、Express Laneへ GO!!

Authenticate or Sign-up?
Authenticate or Sign-up?
すると、まずは、個人情報の入力ページとなる。

Personal Enrollment Details
Personal Enrollment Details

Continueをクリックすると、確認画面が現れるので、OK!

confirm
confirm

すると、メールが届くので、Autherntication Codeをコピー!

Your Authentication Code
Your Authentication Code

そんでもって、ペースト!

Complete Registration
Complete Registration

&、Continue!

Additional Verification Required
Additional Verification Required
さて、待ってると、何やら想定外のメールが。
ほんとに?
ほんとに?
しょうがないので、適当な英語で返信。
ほんまに!
ほんまに!

すると、やっとこさ認められたみたいで、メールが届く。

(ちなみに、2回ほどここまでの作業を行ったが、2回目はすんなり通った。
既に入力されている情報と同じだったからか?)

ほんまやったんかいな〜
ほんまやったんかいな
メール内のアドレスを開いて、確認用のコードを入力!
Complete Registration
Complete Registration

秘密鍵の長さを選択。とりあえず2048で良いでしょ。

Generate Private Key
Generate Private Key

長い。手順が長い。もう嫌だ〜。Install !!

Install Certificate
Install Certificate
やっとここでログインに使う証明書がダウンロードされ、自動的に適用される。
クライアント証明書のインストール
クライアント証明書のインストール

証明書を表示。イヒヒヒヒヒ

クライアント証明書
クライアント証明書
忘れないうちにバックアップしておきたい。

なぜならこれがないと、ログイン出来ないから。

(ちなみに私は、MacBook Airが壊れて証明書が復旧できなかったのは内緒。)

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