ライン

ポイント:自己認証局ではないSSLサーバが利用可能

ライン

 はじめに

CAcert.orgを活用

 ホームページのアドレスには「http://」というアドレスから始まるものを良く目にすると思います。
このプロトコルは、インターネット上を流れるパケットを眺めることができるソフトを使うと、すべて見えてしまいます。
個人情報を入力したウェブフォームやアンケート等の情報は、盗み見をしようとすれば見れてしまう可能性が大きいわけです。

 そこで、ホームページの内容を暗号化した通信を実現するのが、SSL通信の登場ということになります。
暗号化されたページを、ユーザに送信しても意味がわからない文字化けしたものが送られるだけですが、SSLには認証局が存在し、そこから公開キーの配布を受けることで、複合された状態でブラウザでは表示をすることができるという仕組みです。
 Apacheなどのウェブサーバでは「自己認証局」という形で、認証局動作をさせて利用することもできます。
認証局は第3者的な位置で認証してくれるというのは、ユーザの立場から見れば自己認証局よりも安心なはず。自己認証局であれば、そのサイトが詐称されていることに気づけないかも知れないし。ベリサインに毎年費用をかけて維持していくのはつらいし、安価な認証局であっても利益にからまないのでお金かけたくないな〜という時に、CAcert.orgを利用するのはいいかも知れない。

 では、 CAcert.org を使って、有料の認証局を使わない方がいいのでは?と考えるかも知れません。残念ながら、有名なインターネットブラウザやメールソフトには CAcert.org のルート証明書がバンドルされていないのです。IEでもFireFoxでも、大手認証局のルート証明書は当たり前のようについているのです。ユーザはルート証明書をインポートするまでは、疑わしいサイト扱いになってしまいますので、通販などのコンシューマ向けではないでしょう。身内だけで使う用途で、SSL通信を使いたいなどのニーズにはマッチするかも知れません。
 期間は半年。半年ごとにロールしていけば、ずっと無料でSSLサーバが利用できます。

 CAcert.orgに登録して利用する

登録

 早速利用していくことにします。
以前は全部英語だけのページでしたが、現在では多言語化していて日本語でも大丈夫なページになっています。
オーストラリアにある本家サイトにアクセスしましょう。

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



右側のメニューに Translations の項目があり、表示可能な言語名が並びます。

「日本語」となっている部分をクリックすると、日本語に切り替わります。

もちろん、英語のままでいいという方はそのままで使っていただいて問題ありません。

 そして、日本語になりました。

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

 ところどころ、日本語の文字化けする部分がありますが、本ページを参考に登録してみてください。現行のバージョンよりも、前のものになりますが項目として大きく差はないはずです。
5つの質問と答えの部分へは、日本ではなく英語で入力されることが良いでしょう。

 電子メールによる、本人確認を行われたのちにログインアカウントが有効になります。

ドメイン登録 / example.jp を追加してみる

さっそくログインして、サーバ証明書を取得してみることにしましょう。


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

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

いずれかのメールアドレスで受信ができるように設定して受信準備をしておきましょう。 わたしは sendmail利用者であり、単純に /etc/mail/virtusertableに、1行を加えてにメール転送するように記述しました。 Email Probeのメールが到着したら確認URLにクリックして処理は完了です。

 さて、今度は Apache側の作業を開始しましょう。FreeBSD 6.2-RELEASEで Apache 2.1系で導入をした例で記述します。

 サーバ設定作業

秘密鍵生成[/usr/local/etc/apache2/ssl.key/example.jp.server.key]

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 にしました)

CSR(証明書申請データ)生成[/usr/local/etc/apache2/ssl.key/example.jp.csr]

# /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のサーバー証明書に登録

さて、また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.confの設定

具体的な、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で接続されていることが確認できたと思います。

 CAのルート鍵を登録

インターネットブラウザに「信頼された証明書」として登録

冒頭に記述した通り、利用者が一般的に利用している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
となったままかも)
これをクリックすると

---------------------------
   潜在するスクリプト違反
---------------------------
この Web サイトは 1 つ以上の証明書をこのコンピュータに追加
しています。信頼されていないWeb サイトがユーザーの証明書を
更新できるようにすると、セキュリティ上、危険です。
信頼されていない証明書が Web サイトによりインストールされ、
さらに信頼されていないプログラムがこのコンピュータ上で
実行され、ユーザーのデータにアクセスする可能性があります。
                        
このプログラムで証明書を追加しますか? この Web サイトを
信頼している場合は、[はい]をクリックします。
信頼していない場合は、[いいえ] をクリックします。
---------------------------
     はい(Y) いいえ(N) 
---------------------------

が表示されますので「はい」を答えます。
2度同じ画面が来ますが、同じく「はい」を入力します。

と表示がされればOKです。

または、
Can't start the CEnroll control: 1AD
とか表示されたかも知れません。
途中、「Install a Root Certificate using Internet Explorer and the CEnroll ActiveX conrol.
This avoids the Microsoft Certificate Installation wizard all of its complexity and extra screen for users.
This however will ONLY work for Microsoft Explorer.」
Microsoft Certificate Enrollment controlというものです。IE 7などを使っている場合には、Class 3 PKI Key側のPEM か DER Formatのどちらかを使って手動で追加することになります。Firefoxの場合であれば、PEM Formatで実施してみてください。

削除するには、http://www.cacert.org/revoke.crlまたは、手動で削除することで対応もできます。

ルート証明書には、

と2033年までのルート証明機関として登録がされました。

それぞれのドメインのキーは半年間ごとに更新しなければなりませんが、登録したメールアドレスには、 切れる前になるとこまめに更新を促す電子メールが届くようになります。 いくつものドメインを登録してかまいません。更新はクリックするだけ。 新しいキーをコピーペーストで example.jp.server.crt に更新してあげればいいだけなので非常に簡単に利用していくことができます。

【改訂履歴】作成:2007/06/29
2009/06/16 … Namazu検索の窓を追加

【参考リンク】
CAcert.org … CAcert.orgのオフィシャルページ

デル株式会社

Copyright © 1996,1997-2006,2007- by F.Kimura,