![]()
![]()
ホームページのアドレスには「http://」というアドレスから始まるものを良く目にすると思います。
このプロトコルは、インターネット上を流れるパケットを眺めることができるソフトを使うと、すべて見えてしまいます。
個人情報を入力したウェブフォームやアンケート等の情報は、盗み見をしようとすれば見れてしまう可能性が大きいわけです。
そこで、ホームページの内容を暗号化した通信を実現するのが、SSL通信の登場ということになります。
暗号化されたページを、ユーザに送信しても意味がわからない文字化けしたものが送られるだけですが、SSLには認証局が存在し、そこから公開キーの配布を受けることで、複合された状態でブラウザでは表示をすることができるという仕組みです。
Apacheなどのウェブサーバでは「自己認証局」という形で、認証局動作をさせて利用することもできます。
認証局は第3者的な位置で認証してくれるというのは、ユーザの立場から見れば自己認証局よりも安心なはず。自己認証局であれば、そのサイトが詐称されていることに気づけないかも知れないし。ベリサインに毎年費用をかけて維持していくのはつらいし、安価な認証局であっても利益にからまないのでお金かけたくないな〜という時に、CAcert.orgを利用するのはいいかも知れない。
では、 CAcert.org を使って、有料の認証局を使わない方がいいのでは?と考えるかも知れません。残念ながら、有名なインターネットブラウザやメールソフトには
CAcert.org のルート証明書がバンドルされていないのです。IEでもFireFoxでも、大手認証局のルート証明書は当たり前のようについているのです。ユーザはルート証明書をインポートするまでは、疑わしいサイト扱いになってしまいますので、通販などのコンシューマ向けではないでしょう。身内だけで使う用途で、SSL通信を使いたいなどのニーズにはマッチするかも知れません。
期間は半年。半年ごとにロールしていけば、ずっと無料でSSLサーバが利用できます。
早速利用していくことにします。
以前は全部英語だけのページでしたが、現在では多言語化していて日本語でも大丈夫なページになっています。
オーストラリアにある本家サイトにアクセスしましょう。

まずは英語のページです。

右側のメニューに Translations の項目があり、表示可能な言語名が並びます。
「日本語」となっている部分をクリックすると、日本語に切り替わります。
もちろん、英語のままでいいという方はそのままで使っていただいて問題ありません。
そして、日本語になりました。

日本語表示がされると、安心するという人にはこちらがいいでしょう。
メニューの「CAcert.org への参加」の「参加」をクリックします。

ところどころ、日本語の文字化けする部分がありますが、本ページを参考に登録してみてください。現行のバージョンよりも、前のものになりますが項目として大きく差はないはずです。
5つの質問と答えの部分へは、日本ではなく英語で入力されることが良いでしょう。
電子メールによる、本人確認を行われたのちにログインアカウントが有効になります。
さっそくログインして、サーバ証明書を取得してみることにしましょう。

メニューでは、「ドメイン」→「追加」を選択します。
以下のようにドメインを追加します。

メールアドレスは以下から選択、メールで受信できることを確認として求められます。

いずれかのメールアドレスで受信ができるように設定して受信準備をしておきましょう。 わたしは sendmail利用者であり、単純に /etc/mail/virtusertableに、1行を加えてにメール転送するように記述しました。 Email Probeのメールが到着したら確認URLにクリックして処理は完了です。
さて、今度は Apache側の作業を開始しましょう。FreeBSD 6.2-RELEASEで Apache 2.1系で導入をした例で記述します。
portsで www/apache21 を導入し終わっている状態を想定しています。
ここでは、apache2として記述していますが、適当に読み替えて参照いただければと思います。
# /usr/local/etc/apache2 # mkdir ssl.key ssl.crt # chmod 700 ssl.key ssl.crt # /usr/bin/openssl genrsa -rand /var/log/messages -des3 \ -out /usr/local/etc/apache2/ssl.key/example.jp.server.key 1024 54002 \ semi-random bytes loaded Generating RSA private key, 1024 bit long modulus ....++++++ .............++++++ e is 65537 (0x10001) Enter pass phrase for /usr/local/etc/apache2/ssl.key/example.jp.server.key:********* Verifying - Enter pass phrase for /usr/local/etc/apache2/ssl.key/example.jp.server.key:********* # cd ssl.key # chmod 600 *
こんな感じで秘密キーはできあがり。パスフレーズは忘れないものをとりあえず付けておくようにしてください。
(後でパスフレーズレスにしますので、とりあえずなものでもいいです。ここではkokekokko にしました)
# /usr/bin/openssl req -new -key \ /usr/local/etc/apache2/ssl.key/example.jp.server.key \ -out /usr/local/etc/apache2/ssl.key/example.jp.csr Enter pass phrase for \ /usr/local/etc/apache2/ssl.key/example.jp.server.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) [AU]:JP State or Province Name (full name) [Some-State]:TOKYO Locality Name (eg, city) []:CHIYODA Organization Name (eg, company) [Internet Widgits Pty Ltd]:CAcert.org Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:secure.example.jp Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
のように入力しました。
一瞬でできあがったと思います。CSRは、認証局(CA)に渡すものなので、これをcat で表示させて、その内容を範囲コピーしておきます。
(私は TeraTerm Proでの作業で行っています)
-----BEGIN CERTIFICATE REQUEST----- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ -----END CERTIFICATE REQUEST-----
のような内容になっていたと思います。
| さて、またCAcert.orgのページ作業に戻り、上記で生成された証明書で登録を行います。 | |
![]() |
メニューの「サーバ証明書」→「新規作成」をクリックします。 |
![]() |
このようなページが表示されてきたと思います。 『下にCSRをペーストしてください。』と書かれている部分のフォームに、上記で生成した CSRの内容をペーストします。 「送信」をクリックすると、手順に従って進めていけば、秘密キーができあがってきました。 |
-----BEGIN CERTIFICATE----- KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 1111111111111111111111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222222222222222222222 3333333333333333333333333333333333333333333333333333333333333333 4444444444444444444444444444444444444444444444444444444444444444 5555555555555555555555555555555555555555555555555555555555555555 6666666666666666666666666666666666666666666666666666666666666666 77777777777777777777 -----END CERTIFICATE----- |
|
上記のような内容が表示されたと思います。 今度は、その内容をブラウザ上で範囲コピーを行い、 /usr/local/etc/apache2/ssl.crt の example.jp.server.crt として、保存します。 (利用するエディタは、eeやviでかまいません。新規で作成・保存します) 完了したら、同ディレクトリにあるものを # chmod 600 * してパーミッションを変更しておきます。 これでキーの生成は完了です。 |
|
このままでは、Apacheの開始時に毎回パスフレーズを求められるようになってしまいますので、これをあらかじめ解消して使うことにしています。
# cd /usr/local/etc/apache2/ssl.key # mv example.jp.server.key example.jp.server.key.orig # openssl rsa -in example.jp.server.key.orig -out example.jp.server.key Enter pass phrase for example.jp.server.key.orig:********* writing RSA key # chmod 600 example.jp.server.key
この作業で、欲しいSSLのキーファイルはすべてそろいました。
具体的な、SSLの設定ファイルを設定しておきます。
/usr/local/etc/apache2/ssl.conf
または、 /usr/local/etc/apache2/Includes 以下に作成した該当ドメイン用の設定ファイルは以下のように指定することになります。
DocumentRoot "(ドキュメントルート)" ServerName サーバ名:443 ServerAdmin admin@example.jp ErrorLog /var/log/httpsd-error.log TransferLog /var/log/httpsd-access.log SSLCertificateFile /usr/local/etc/apache2/ssl.crt/example.jp.server.crt SSLCertificateKeyFile /usr/local/etc/apache2/ssl.key/example.jp.server.key
や、
<VirtualHost IPアドレス:443>
ServerAdmin webmaster@example.jp
DocumentRoot /home/user01/example.jp
ServerName secure.example.jp:443
ServerAlias www.example.jp:443
ScriptAlias /cgi-bin/ /home/user01/example.jp/cgi-bin/
UserDir disabled
ErrorLog /home/user01/log/https-example-jp-error_log
CustomLog /home/user01/log/https-example-jp-access_log combined
DirectoryIndex index.html
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/etc/apache2/ssl.crt/example.jp.server.crt
SSLCertificateKeyFile /usr/local/etc/apache2/ssl.key/example.jp.server.key
<Directory "/home/user01/example.jp">
AllowOverride FileInfo AuthConfig Limit
Options Includes SymLinksIfOwnerMatch execCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/home/user01/example.jp/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</FilesMatch>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog /home/user01/log/https-example-jp-ssl_request.log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
ように指定します。
/etc/rc.confには
apache2_enable="YES" apache2ssl_enable="YES"
を入れておきましょう。
ページを参照して、確認すると128bitのSSLで接続されていることが確認できたと思います。
冒頭に記述した通り、利用者が一般的に利用しているIEやFireFoxなどのブラウザには、知名度の高い認証局のルート証明書しか入っていません。
ここでは、IEで、CAcert.orgのルート証明書を加える方法について記述しておきます。
利用者には、同様の説明ページなどを作成して、環境を整えていただくなどで、毎回表示されるエラー表示を解消してしまえばいいでしょう。
まず、ここをクリックしてください。(これは利用するユーザが行う作業ですから、それぞれのサイトにページを設けるか、CAcert.org
の該当ページにリンクして作業をしてもらうべき内容です。)
| Microsoft Internet Explorerにルート証明書をインポートしたい場合はここをクリック | |
| というのがあると思います。 (※ないかも知れません。 Click here if you want to import the root certificate into Microsoft Internet Explorer 5.x/6.x となったままかも) これをクリックすると |
|
![]() |
|
| が表示されますので「はい」を答えます。 2度同じ画面が来ますが、同じく「はい」を入力します。 |
|
![]() |
|
| と表示がされればOKです。 | |
|
または、 削除するには、http://www.cacert.org/revoke.crlまたは、手動で削除することで対応もできます。 |
|
| ルート証明書には、 | |
![]() |
|
| と2033年までのルート証明機関として登録がされました。 |
それぞれのドメインのキーは半年間ごとに更新しなければなりませんが、登録したメールアドレスには、 切れる前になるとこまめに更新を促す電子メールが届くようになります。 いくつものドメインを登録してかまいません。更新はクリックするだけ。 新しいキーをコピーペーストで example.jp.server.crt に更新してあげればいいだけなので非常に簡単に利用していくことができます。
【改訂履歴】作成:2007/06/29
2009/06/16 … Namazu検索の窓を追加
【参考リンク】
CAcert.org … CAcert.orgのオフィシャルページ
design テンプレート