無料 SSL 証明書 StartSSL を使う
無料で利用できる StartSSL の証明書を使って、Apache + mod_ssl で HTTPS 通信ができるように設定をする方法です。StartSSL は、個人であれば、1年間の期限付きで SSL 証明書を無料で取得できます。ただし、ドメインの所有者である必要があります。
無料とはいえ、Firefox や Safari であれば、認証局として登録されているので、これらのブラウザで警告は出ません。残念ながら IE は対応していないようです。私の場合は Firefox で試しました。なお、私が試した内容を参考程度に書いているだけですので、この記事をもとに何か損害が発生しても、責任が取れません。くれぐれも自己責任でお願いします。
StartSSL に登録
まず StartSSL に登録します。StartSSL Free を選択し、「Register」を選択します。
住所、氏名、メールアドレスなどを入力します。「Zip, Locality/Place」には郵便番号と市町村名(もちろんローマ字で)を入力します。「State/Region」は都道府県名を選択します。「Phone」 は海外か日本国内へかける要領で、03-1234-5678 であれば +81-3-1234-5678 のようになります。Continue を押します。
すぐに登録したメールアドレスに認証用のコードが送られてきますので、これを貼り付けて「continue」を押します。ちなみに最初メールが届いてから15分くらい経って入力したら、すでにキーが破棄されていて最初からやり直しになりましたので、すぐに作業しましょう。
なぜか日本語化されている「高強度の暗号化」を選んで、「Continue」を押します。
ブラウザに証明書がインストールされました。今後は StartSSL へのログインは、この証明書を使って行なわれます。そのため、パスワードはありません。
クライアント証明書のバックアップ
StartSSL には、クライアント証明書がインストールされたブラウザでなければアクセスできなくなりますので、万が一に備えて証明書をバックアップしましょう。次の例は Firefox 3 の場合です。
「ツール」-「オプション」でオプション画面を出して、「詳細」タブを選択します。「証明書を表示」ボタンを押します。
StartCom Free ……という証明書を選択し、「バックアップ」ボタンを押します。
バックアップ用パスワードを訊かれますので入力します。このパスワードは後で証明書をインポートする際に必要となるものです。
ドメインを認証する
Web サーバの証明書作成の前に、ドメインの所有者であることを確認するためのプロセスがあります。
タブの Validations Wizard をクリックします。
Type として Domain Name Validation を選択します。
自分の所有するドメイン名を指定します。この時点では、www をつける必要はありません。
ドメインの正当な所有者であることを確認するためのキーが送られてくるメールアドレスを選択します。こちらで任意のアドレスを指定することはできません。「continue」を押すと、メールにキーが送られてきます。このキーを入力すると、ドメインの所有者であることが確認され、Web サーバ用の証明書などが作成できるようになります。
Webサーバ用の証明書を作成する
いよいよ Webサーバ用の証明書を作成します。
「Certificates Wizard」のタブを押して、SSL/TLS Web Serber Certificate を選択します。
自分で作成した秘密鍵ファイルが無い場合は、ここで作成することもできます。10文字以上32文字以下のパスフレーズを入力して continue を押します。パスフレーズにはアルファベットと数字のみが使えます。(自分で作成した秘密鍵ファイルがある場合は、Skip を押して先に進みます。)
このファイルをサーバに保存します。説明文では ssl.key という名前で保存と書かれていますが、ここでは /etc/httpd.conf/ssl.key/server.key に保存します。
サーバのサブドメインを指定します。ここではサブドメインとして www を指定しています。サブドメインを使わないについても証明書には含まれますので、とりあえず www を指定しておきましょう。なお、無料では複数のサブドメインや、ワイルドカード (*.example.org) の指定はできません。
CSR ファイルが作成されました。CSR ファイルは署名の要求をするためのもので、StartSSL がこの内容に署名をして証明書として発行してくれるものです。通常は同じサーバ・ドメインでも証明書の発行ごとに毎回異なる秘密鍵を生成して CSR ファイルを生成するものなので、特に保存の必要はないと思います。必要であればダウンロードして保存します。次に「continue」をクリックします。
PEM エンコードされた CRT ファイルができます。これが Web サーバの証明書ファイルです。これを /etc/httpd/conf/ssl.crt/server.crt として保存します。保存したら「continue」をクリックします。これで証明書の作成は終了です。
Apache + mod_ssl で設定
次に Apache + mod_ssl の環境で、これらの証明書を使うように設定します。通常、httpd.conf は変更する必要はありません。CentOS で PRM から入れていれば、/etc/httpd/conf.d/ssl.conf というファイルがありますので、これを編集します。
<VirtualHost _default_:443> DocumentRoot "/var/www/html ServerName example.org:443 ServerAlias www.example.org:443 ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key …… </VirtualHost>
SSL は NameNameVirtualHost を利用している場合でも利用できます。保存したら httpd を再起動します。
# service httpd configtest
Syntax OK
# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: Apache/2.0.52 mod_ssl/2.0.52 (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 example.org:443 (RSA)
Enter pass phrase: //←パスフレーズを入力
OK: Pass Phrase Dialog successful. [ OK ]
再起動時に、秘密鍵作成時に入力したパスフレーズを入力すれば Apache が起動します。この作業を毎回しないと Apache が起動しなくなり不便です。秘密鍵のパスフレーズを解除しておくには、openssl コマンドを使って次のようにします。
# openssl rsa -in server.key -out server.key
なお、秘密鍵ファイルは root と apache 以外の第三者が閲覧できないようなパーミッションに設定しておきましょう。
Web ブラウザでアクセスしてみる
Firefox でサーバに https://~ でアクセスしてみます。設定に問題がなければ、何も警告が出ずに SSL 通信ができるはずです。
ブラウザでアクセスできない場合、Port 443 がファイアウォールで遮断されていないか確認してください。
ssl_error_rx_record_too_long のエラーが出る場合は、httpd.conf か ssl.conf でバーチャルホストの設定が正しくされていない可能性がありますので、設定を確認してください。
コメントはまだありません
No comments yet.
Sorry, the comment form is closed at this time.