#contents
* SSL用証明書の作成(Linux編) [#o09cc8bd]
- ここで、作成した証明書は、ApacheやPostfix、Courier-IMAP等のメールシステム、ProFTPD等で使用する。
- http://acorn.zive.net/~oyaji/www/certs_linux.htm  を元に自宅環境(Fedra2)に組み込んだ状況を記録する。
** プライベート認証局(CA)の作成 [#tf742cda]
*** 事前準備 [#qfdb1a94]
- openssl-perl のインストール

 [root@power root]# yum install openssl-perl
- /usr/share/ssl/openssl.cnf の設定

 [ usr_cert ]
 &ref(server.cr
 # 最初にサーバ証明書を作成するため、「nsCertType」を「server」
 # とするため、コメントアウトを外して有効にする。
 # This is OK for an SSL server.
 # nsCertType = server
 nsCertType = server
  
 [ v3_ca ]
 
 # CA証明書作成時の証明書のタイプをSSL/E-mail用と指定するため、
 #「nsCertType」を「sslCA, emailCA」とするため、コメントアウトを外して有効にする。
 # Some might want this also
 # nsCertType = sslCA, emailCA
 nsCertType = sslCA, emailCA

- 作業用ディレクトリを作成します

 [root@power root]# mkdir /usr/local/certs
*** CA用秘密鍵 (cakey.pem) とCA用証明書 (cacert.pem) の作成 [#i5027dff]
- ''COLOR(RED){プライベート認証局(CA) のパスフレーズを "munakatafreedmanhisao" とした}''

 [root@power root]# cd /usr/local/certs/
 [root@power certs]# /usr/share/ssl/misc/CA.pl -newca
 CA certificate filename (or enter to create)
 
 Making CA certificate ...
 Generating a 1024 bit RSA private key
 .......++++++
 ...++++++
 writing new private key to './demoCA/private/cakey.pem'
 Enter PEM pass phrase:  ← "munakatafreedmanhisao"
 Verifying - Enter PEM pass phrase:
 -----
 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) [GB]:JP
 State or Province Name (full name) [Berkshire]:Kanagawa
 Locality Name (eg, city) [Newbury]:Yokohama
 Organization Name (eg, company) [My Company Ltd]:Private_CA
 Organizational Unit Name (eg, section) []:Admin
 Common Name (eg, your name or your server's hostname) []:Private_CA
 Email Address []:server_admin@hmuna.com

- この作業で以下のようなディレクトリ・ファイルが作成される。

 /usr/local/certs [ ルートディレクトリ ]
               |
               └ demoCA [ 各種証明書等のルートディレクトリ ]
                    |
                    ├ certs [ 証明書等のディレクトリ(バックアップに利用) ]
                    |
                    ├ crl [ 破棄証明書一覧用のディレクトリ ]
                    |
                    ├ newcerts [ クライアント証明書(sireal追番)のディレクトリ ]
                    |  |
                    |  ├ xxxxx..pem [ クライアント証明書 ]
                    |  |    :
                    |  └ xxxxx..pem [ クライアント証明書 ]
                    |
                    ├ private [ CA用の秘密鍵用ディレクトリ ]
                    |  |
                    |  └ cakey.pem [ CA用の秘密鍵 ]
                    |
                    ├ cacert.pem [ CA用の証明書 ]
                    ├ index.txt     [ クライアント証明書用DB ]
                    └ serial [ クライアント証明書用シリアル ]
*** CA証明書をブラウザにインポートするための ca.der ファイルの作成 [#zc2f915a]

 [root@power certs]# openssl x509 -inform pem -in ./demoCA/cacert.pem -outform der -out ./demoCA/ca.der
- ここで作成した ca.der をブラウザに登録する方法 →  http://acorn.zive.net/~oyaji/www/ssl_client.htm
** サーバ用証明書の作成 [#t258c727]
- ApacheやPostfix、ProFTPD等で使用する サーバ証明書を作する
- ''COLOR(RED){[注意]: サーバ証明書を作成する場合、CA証明書とサーバ証明書のON(Organization Name)は、異なる名称にしないとうまく動作しないので注意が必要です。}''
*** サーバ用秘密鍵(server.key)の作成 [#scdea863]
- 鍵長1024ビットでサーバ用秘密鍵を作成

 [root@power certs]# openssl genrsa -out server.key 1024
 Generating RSA private key, 1024 bit long modulus
 ...++++++
 ...++++++
 e is 65537 (0x10001)
*** サーバ用公開鍵 (server.csr) の作成 [#k30b3861]
- CAに送るデジタル証明書のリクエストファイルを作成

 [root@power certs]# openssl req -new -key server.key -out server.csr
 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) [GB]:JP
 State or Province Name (full name) [Berkshire]:Kanagawa
 Locality Name (eg, city) [Newbury]:Yokohama
 Organization Name (eg, company) [My Company Ltd]:power.hmuna.com
 Organizational Unit Name (eg, section) []:Admin
 Common Name (eg, your name or your server's hostname) []:www.hmuna.com
 Email Address []:server_admin@hmuna.com 
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []: ← 何も入れずに Enter
 An optional company name []: ← 何も入れずに Enter
 [root@power certs]#
- ここのホスト名(上の例では www.hmuna.com )は、必ずhttps://・・・・でアクセスするホスト名とすること。
- ''COLOR(RED){今回 SSL の Virtual server で2種類のエントリーを作成したが、www 以外の名前でアクセスする virtual host では 認証エラ−になった。}''
- wiki 用の server.csr を別に作成する。
- wiki virtualhost 用の公開鍵(wiki_server.csr) の作成

 [root@power certs]# openssl req -new -key server.key -out wiki_server.csr
 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) [GB]:JP
 State or Province Name (full name) [Berkshire]:Kanagawa
 Locality Name (eg, city) [Newbury]:Yokohama
 Organization Name (eg, company) [My Company Ltd]:wiki.hmuna.com
 Organizational Unit Name (eg, section) []:Admin
 Common Name (eg, your name or your server's hostname) []:wiki.hmuna.com
 Email Address []:server_admin@hmuna.com
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:
*** サーバ用証明書 (server.crt) の作成 [#u9f06045]
- 認証局の証明書とキーを使って、X.509サーバ証明書の作成と署名を行う。
- 認証局が使用するシリアルナンバーファイルがないので、demoCAディレクトリ配下に ca-cert.srl を作成して使用する。

 [root@power certs]# echo 01 > ./demoCA/ca-cert.srl
 [root@power certs]# cat ./demoCA/ca-cert.srl
 01
 [root@power certs]# openssl x509 -CA ./demoCA/cacert.pem - CAkey ./demoCA/private/cakey.pem (改行せずに続ける)
 -CAserial ./demoCA/ca-cert.srl -req -in server.csr -out server.crt
 Signature ok
 subject=/C=JP/ST=Kanagawa/L=Yokohama/O=hmuna.com/OU=Admin/CN=www.hmuna.com/emailAddress=munakata@hmuna.com
 Getting CA Private Key
 Enter pass phrase for ./demoCA/private/cakey.pem: ← CA用パスフレーズ入力
 [root@power certs]#
- wiki.hmuna.com の中で www.hmuna.com の証明書を指定するとエラーになるのでvirtual_server の指定の中で指定する wiki 用のサーバー証明書を別に作成する。
 [root@power certs]# openssl x509 -CA ./demoCA/cacert.pem - CAkey ./demoCA/private/cakey.pem
 -CAserial ./demoCA/ca-cert.srl -req -in wiki_server.csr -out wiki_server.crt
 
 Signature ok
 subject=/C=JP/ST=Kanagawa/L=Yokohama/O=hmuna.com/OU=Admin/CN=wiki.hmuna.com
 /emailAddress=munakata@hmuna.com
 Getting CA Private Key
 Enter pass phrase for ./demoCA/private/cakey.pem: ← munakatafreedmanhisao
 
 [root@power certs]# openssl x509 -CA ./demoCA/cacert.pem 
 -CAkey ./demoCA/private/cakey.pem
 -CAserial ./demoCA/ca-cert.srl -req -in webmail_server.csr 
 -out webmail_server.crt
 
 Signature ok
 subject=/C=JP/ST=Kanagawa/L=Yokohama/O=hmuna.com/OU=Admin/CN=webmail.hmuna.com
 /emailAddress=munakata@hmuna.com
 Getting CA Private Key
 Enter pass phrase for ./demoCA/private/cakey.pem: ← munakatafreedmanhisao
- www 用(server.crt)とwiki 用(wiki_server.crt)が別に作成された
 [root@power certs]# ls -l
 合計 52
 drwxr-xr-x  6 root   root   4096  1月 15 21:27 demoCA
 -rw-r--r--  1 root   root   1864  1月 15 21:33 mail.pem
 -rw-r--r--  1 root   root   1864  1月 15 19:50 mail.pem_old
 -rw-r--r--  1 root   root    973  1月 15 21:32 mail_server.crt
 -rw-r--r--  1 root   root    725  1月 15 20:23 mail_server.csr
 -rw-------  1 apache apache   23  1月 15 19:51 secret_wiki_basic
 -rw-------  1 apache apache   55  1月 15 19:51 secret_wiki_digest
 -rw-------  1 apache apache   54  1月 15 19:51 secret_www_digest
 -rw-r--r--  1 root   root    973  1月 15 21:31 server.crt
 -rw-r--r--  1 root   root    725  1月 15 19:46 server.csr
 -rw-r--r--  1 root   root    891  1月 15 19:44 server.key
 -rw-r--r--  1 root   root    973  1月 15 21:31 wiki_server.crt
 -rw-r--r--  1 root   root    725  1月 15 19:47 wiki_server.csr
** メール用証明書の作成 [#ld2ceebd]
- 以下の手順でメール用(Courier-IMAP)の証明書を作成
*** メール用証明書 (mail.pem) の作成 [#t9349da8]
- メール用証明書 (mail.pem) を、サーバ証明書と鍵から作成
- ここで問題発生、今回サーバーの DNS エントリーはプライマリーに mail.hmuna.com~
が登録されており、www.hmuna.com と wiki.hmuna.com は別名(CNAME) として参照される~
構成となっている。メールサーバーがSSL通信に引用する証明書はサーバー名(CN名)として~
 mail.hmuna.com を期待しているので、ここで www.hmuna.com の CN名 を持ったサーバー~
証明書からメール証明書を作成すると、メール送受信時にエラーが出ることがわかった。
- この問題の対策のために mail_server.csr を作成してから mail_server.crt を~
作成して、ここからメール用証明書を作成した。 (2005-1-14) 
 [root@power certs]# (cat mail_server.crt ; cat server.key)> mail.pem
// ** クライアント用証明書等のバックアップ [#v4cc4d19]
// - CA.plを使用して、クライアント証明書を発行するとリクエストファイル(newreq.pem)と証明書(newcert.pem)は発行するたびに書き換えられてしまう。
// - 中でも、リクエストファイルは後述するクライアント証明書の失効処理に必要なので、バックアップしておかなければならない。
// -- (実際には、./demoCA/newcerts配下にバックアップされてはいるが、シリアル番号で作成されるため対応付けができない。)
// - 以下に、バックアップの一例を示すが何らかの方法でクライアントが分かる形でバックアップしておくことが重要である。
// - ここでは、demoCA配下のcertsディレクトリにユーザ毎のディレクトリを作成し、そこにバックアップした。
// - 間違えて、連続してクライアントを作成してしまった場合は、画面上からシリアルが分かるはずなので対応が分からなくなる前に、./demoCA/newcerts配下のファイルを対応付けしてバックアップしておくと良いのでは?
// - シリアル番号をテキストベースで管理するのもひとつの手であるし、一連の作業を自動化してしまうほうが手っ取り早いのでは。
// 
//  [root@power certs]# mkdir ./demoCA/certs/muna
// [root@power certs]# mv new* ./demoCA/certs/muna/
// mv: cannot stat `new*': そのようなファイルやディレクトリはありません
// [root@power certs]# mv *.p12 ./demoCA/certs/muna/
// mv: cannot stat `*.p12': そのようなファイルやディレクトリはありません
// [root@power certs]#
//
// - 参照したページでは クライアント証明書を作成しており、これをバックアップすることを意図した処理と思われるが、現時点ではクライアント証明書は作成していない (そこまで厳密な管理をしていない) ので、上記の処理はエラーになっている。
// ** クライアント用証明書の失効処理 [#j14d2ffb]
// - クライアント証明書で運用するようなケースではセキュリティ管理が重要であり、証明書を紛失したり使用しなくなったりしたら、直ちに失効処理を行い当該証明書が使用できないようにする必要がある。
// - 以下に、失効処理を示すが、ここで作成されたcrl.pem(証明書失効リスト)をApacheに読ませれば(Windowsの場合はApacheの再起動)、該当証明書を無効化できる。
// - まず、失効処理用のcrlnumberを作成し、失効したいクライアントのリクエストファイルを指定して失効処理とリスト作成を行う。
// - 失効処理を行うと、index.textは以下のように行頭がRに変わり、失効時間が3番目のパラメータとして追加される。
// 
// R 051003025313Z 041003031948Z FB4C837477EB7B41
// unknown /C=JP/ST=Tokyo/L=Edogawa/O=Acorn/OU=user/CN=oyaji/emailAddress=oyaji@acorn.zive.net
* 各証明書 (2005-1-14 時点) [#l2841c1a]
- サーバー用秘密鍵 (server.key) → &ref(server.key);
- サーバー用証明書 (server.crt) → &ref(server.crt);
- サーバー用公開鍵 (server.csr) → &ref(server.csr);

- サーバー用証明書 [Wiki virtual server] (wiki_server.crt) → &ref(wiki_server.crt);
- サーバー用公開鍵 [Wiki virtual server] (wiki_server.csr) → &ref(wiki_server.csr);

- サーバー用証明書 [mail server] (mail_server.crt) → &ref(mail_server.crt);
- サーバー用公開鍵 [mail server] (mail_server.csr) → &ref(mail_server.csr);

- メール用  証明書 (mail.pem) → &ref(mail.pem);

- クライアントに登録する CA 証明書 → &ref(ca.der);

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS