CA
Ubuntu 12.10 で自己認証局(Self-signed Certificate Authority)を構築して遊んでみよう。
設定内容(こんな雰囲気で)
分類 | 項目 | 値 |
---|---|---|
認証局 | Common Name | ca |
認証局証明書 | cacert.pem | |
パスフレーズ | capassword | |
サーバ | Common Name | server |
サーバ証明書 | servercert.pem | |
サーバ秘密鍵 | serverkey_nopass.pem | |
パスフレーズ | serverpassword | |
クライアント | Common Name | client |
クライアント証明書 | clientcert.p12 | |
パスフレーズ | clientpassword | |
初期値 | Country | JP |
stateOrProvinceName | MyState | |
localityName | MyCity | |
0.organizationName | MyCompany | |
organizationalUnitName | MySection | |
ディレクトリ | Tiny CA | ~/.TinyCA/ca/ |
認証局証明書 | /etc/ssl/CA/ | |
サーバ証明書 | /etc/ssl/CA/certs/server/ |
認証局の構築と証明書の発行(Tiny CA 編)
環境設定
Tiny CA のインストールと起動
$ sudo apt-get install tinyca |
認証局証明書
「CA」-「New CA」メニューで認証局「ca」を作成する。
~/.TinyCA/ca/cacert.pem に格納された認証局証明書をコピーする。
$ sudo mkdir -p /etc/ssl/CA |
サーバ証明書
Certificates タブを選択して、ツールバーの新規作成ボタン(右側の方)を押して、「Create Key and Certificate (Server)」を選択する。
Certificates タブで、「server」の行を選択して、下記設定でエクスポートする。
項目 値 File servercert.pem Export Format PEM(Certificate) Include Key(PEM) No Include Fingerprint(PEM) No Keys タブで、「server」の行を選択して、下記設定でエクスポートする。
項目 値 File serverkey_nopass.pem Export Format PEM(Key) Without Passphrase(PEM/PKCS#12) Yes Include Certificate(PEM) Yes サーバ証明書とサーバ秘密鍵をコピーする。
$ sudo mkdir -p /etc/ssl/CA/server/certs
$ sudo cp ~/servercert.pem /etc/ssl/CA/server/certs/
$ sudo cp ~/serverkey_nopass.pem /etc/ssl/CA/server/certs/
クライアント証明書
Certificates タブを選択して、ツールバーの新規作成ボタン(右側の方)を押して、「Create Key and Certificate (Client)」を選択する。
Certificates タブで、「client」の行を選択して、下記設定でエクスポートする。
項目 値 File clientcert.p12 Export Format PKCS#12(Certificate & Key) Include Key(PEM) Yes Include Fingerprint(PEM) Yes
Web サーバの設定
Web サーバApache 2 をインストールする。
$ sudo apt-get install apache2
$ sudo a2enmod sslクライアント証明書がある場合のみ接続可能に設定する。
/etc/apache2/sites-available/default-ssl #SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateFile /etc/ssl/CA/certs/server/servercert.pem
#SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCertificateKeyFile /etc/ssl/CA/certs/server/serverkey_nopass.pem
#SSLCACertificateFile /etc/apache2/ssl.crt/ca-bundle.crt
SSLCACertificateFile /etc/ssl/CA/cacert.pem
#SSLVerifyClient require
SSLVerifyClient requireWeb サーバを再起動して、443 ポートの状態を確認する。
$ sudo a2ensite default-ssl
$ sudo /etc/init.d/apache2 restart
$ netstat -an | grep 443
クライアントブラウザの設定
ブラウザにクライアント証明書をインポートする。
Firefox の場合は、[編集]-[設定]-[詳細化]-[暗号化]-[証明書を表示…]-[あなたの証明書]-[インポート…]でclientcert.p12 を指定してインポートする。接続テストする。
ブラウザでhttps://server/ にアクセスする。証明書の選択画面が表示される。
認証局の構築と証明書の発行(コマンドライン編)
環境設定
オリジナルのスクリプト、設定ファイルを退避する。$ sudo cp /usr/lib/ssl/misc/CA.sh /usr/lib/ssl/misc/CA.sh.original
$ sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.originalスクリプト、設定ファイルを編集する。
/usr/lib/ssl/misc/CA.sh DAYS="-days 365"
CADAYS="-days 1095"
CATOP=/etc/ssl/CA/etc/ssl/openssl.cnf dir = /etc/ssl/CA # Where everything is kept
default_days = 365 # how long to certify for
countryName_default = JP
stateOrProvinceName_default = MyState
localityName_default = MyCity
0.organizationName_default = MyCompany
organizationalUnitName_default = MySection
commonName_default = ca_or_server_or_client
emailAddress_default = mail_address認証局証明書
$ sudo /usr/lib/ssl/misc/CA.sh -newca
$ sudo openssl x509 -in /etc/ssl/CA/cacert.pem -out /etc/ssl/CA/cacert.pem
サーバ証明書
$ sudo mkdir /etc/ssl/CA/certs/server
$ cd /etc/ssl/CA/certs/server
$ sudo /usr/lib/ssl/misc/CA.sh -newreq
$ sudo /usr/lib/ssl/misc/CA.sh -sign$ sudo openssl x509 -in newcert.pem -out servercert.pem
$ sudo openssl rsa -in newkey.pem -out serverkey_nopass.pemクライアント証明書
$ sudo mkdir /etc/ssl/CA/certs/client
$ cd /etc/ssl/CA/certs/client
$ sudo /usr/lib/ssl/misc/CA.sh -newreq
$ sudo /usr/lib/ssl/misc/CA.sh -sign$ sudo openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -certfile /etc/ssl/CA/cacert.pem -out client.p12