以下に、直接OpenSSLのコマンドを使って、独自CAを作成する方法を説明します。
本来、セキュアなWebサーバを運用するためには、認証局から、署名付きの証明書を発行してもらう必要があります。 認証局とは、CA(Certification Authority)とも呼び、証明書を発行する第三者機関のことです。 認証局を利用しないで、独自でCAの証明書を発行し、認証することもできます。 以下に、独自CAの作成方法について説明します。
opensslのメッセージダイジェスト機能(md5)を使って、ランダム情報ファイルを作成します。 ランダム情報ファイルは、rand.datという名前で作成します。
unix# cd /usr/local/ssl/bin unix# ./openssl dgst * > rand.dat |
opensslのRSAパラメータ生成機能を使って、パスフレーズ付き秘密鍵を生成します。
秘密鍵は、server.keyという名前でssl.keyディレクトリに生成します。
生成したサーバの秘密鍵は、httpd.confのSSLCertificateKeyFileで指定します。
unix# ./openssl genrsa -rand rand.dat -out ca.key -des3 1024 Enter PEM pass phrase:XXXXXXXX Verifying password - Enter PEM pass phrase:XXXXXXXX unix# cp ca.key /usr/local/apache/conf/ssl.key/server.key unix# chmod 600 /usr/local/apache/conf/ssl.key/server.key |
秘密鍵ファイルが正しく生成されたかどうかを確認します。
以下のような内容のファイルが生成されます。
unix# vi ca.key -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-CBC,478DA013EDD514D0 VrG8FQHVKX84byl/D9KxX9Ctr+aIp+loedPVzX/ANxcwV5n9tWctM+3dHNOvgDN+ i4XFs6CBgxRazBZZXlefDg45xYDGv2eY/8QII23iVuUh9v3izSRBQrbQnsQ9mibA yBSqzoH1sU3fnBbSnwWzzTLN19aQvaWnZ3qh+X35qwKnPty6w3UQA5v4G6O14qN8 OtXLJ9O68/5KrRdXw7so4bve/MxKpkrOD7UfCojovclI0Vzx4ncUtKVx/8SsTsMS uV7ki5TCkOQsmQL2CVv2mBKA1ipDRv+IoBCVTl1jNJ4RWXV4ELs6BpMBJozSTiTN FVjWNXGzNR70xHmDToNWqjH7nNImylK7g3j3YcfDImLQWyhnuzOZeepQAqiB4Eym AKb+KN2YONrxrfD5BF7AgrPPdgVJQuGLLAO9L+7fQMN1C0eUO74g1p6qDmdNyuN0 m5wxaZpctTGRA1mec4NhsUvW0/WQGuqj3K77/ZGny96q+ZyzeUohbli861zuEC7C +9n5eZk+wjwIcOfAMVr5W+2fUtP6o3oiAfP/Y6r61/b1bdofrSPk0ZQ7EevzqftR HpLtMECqy8CbtH987yiS1KPTTDy23sXe3WRb+gstIdG/yp2u0hEylA== -----END RSA PRIVATE KEY----- |
opensslの認証要求ファイル作成機能と、x509にもとづく署名機能を使って、独自で認証した認証書を作成します。 認証書は、server.crtという名前でssl.crtディレクトリに作成します。 作成したサーバの証明書は、httpd.confのSSLCertificateFileで指定します。
unix# ./openssl req -new -x509 -key ca.key -out ca.crt Enter PEM pass phrase:XXXXXXXX Country Name (2 letter code) []:JP State or Province Name (full name) [Some-State]:Ishikawa Locality Name (eg, city) []:Kanazawa Organization Name (eg, company) [Internet Widgits Pty Ltd]:ASH Organizational Unit Name (eg, section) []:Webmaster Common Name (eg, YOUR name) []:www.ash.jp Email Address []: unix# cp ca.crt /usr/local/apache/conf/ssl.crt/server.crt unix# chmod 600 /usr/local/apache/conf/ssl.crt/server.crt |
独自CAによる認証書が正しく作成されたかどうかを確認します。 以下のような内容のファイルが作成されます。
unix# vi ca.crt -----BEGIN CERTIFICATE----- DjAMBgNVBAgTBVRva3lvMRIwEAYDVQQHEwlNaW5hdG8ta3UxGDAWBgNVBAoTD05F QyBDb3Jwb3JhdGlvbjEZMBcGA1UECxMQQklHTE9CRSBTZXJ2aWNlczEeMBwGA1UE AxMVbWVtYmVyMi5iaWdsb2JlLm5lLmpwMB4XDTk5MDYwMjEwMzczOVoXDTk5MDcw MjEwMzczOVowgYYxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzESMBAGA1UE BxMJTWluYXRvLWt1MRgwFgYDVQQKEw9ORUMgQ29ycG9yYXRpb24xGTAXBgNVBAsT EEJJR0xPQkUgU2VydmljZXMxHjAcBgNVBAMTFW1lbWJlcjIuYmlnbG9iZS5uZS5q cDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxdP20VBkJuo50aZupOpr+cCj jg5AxPQ1rEF8wjZ/Y8KkhrHOn85HP15svd/2s77rg1w6wLk63vjfSd/D1h3Xv2o1 MOM47w32Y8Lqk1XsX5kCAwEAAaOCAQowggEGMAwGA1UdEwQFMAMBAf8wHQYDVR0O BBYEFJdb0W28plNJ9PYorbjXG+pBkK6PMIGzBgNVHSMEgaswgaiAFJdb0W28plNJ 9PYorbjXG+pBkK6PoYGMpIGJMIGGMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9r eW8xEjAQBgNVBAcTCU1pbmF0by1rdTEYMBYGA1UEChMPTkVDIENvcnBvcmF0aW9u MRkwFwYDVQQLExBCSUdMT0JFIFNlcnZpY2VzMR4wHAYDVQQDExVtZW1iZXIyLmJp Z2xvYmUubmUuanCCAQAwCwYDVR0PBAQDAgEGMAkGA1UdEQQCMAAwCQYDVR0SBAIw ADANBgkqhkiG9w0BAQQFAAOBgQA813N0kICjveWgqZo3dAsxE5O7w0JIVtdWddkZ Z1t2j6pK5CtRiPfYRaB2xdugpzgd2gdpTnvD21ZBdt0HE1dfs63vLxKwEiepWslW kFEFSA== -----END CERTIFICATE----- |
認証書の設定値を確認する場合は、以下のコマンドを使います。
unix# ./openssl asn1parse -in ca.crt 0:d=0 hl=4 l= 795 cons: SEQUENCE 4:d=1 hl=4 l= 644 cons: SEQUENCE 8:d=2 hl=2 l= 3 cons: cont [ 0 ] 10:d=3 hl=2 l= 1 prim: INTEGER :02 13:d=2 hl=2 l= 1 prim: INTEGER :00 16:d=2 hl=2 l= 13 cons: SEQUENCE 18:d=3 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption 29:d=3 hl=2 l= 0 prim: NULL 31:d=2 hl=2 l= 109 cons: SEQUENCE 33:d=3 hl=2 l= 11 cons: SET 35:d=4 hl=2 l= 9 cons: SEQUENCE 37:d=5 hl=2 l= 3 prim: OBJECT :countryName 42:d=5 hl=2 l= 2 prim: PRINTABLESTRING :JP 46:d=3 hl=2 l= 17 cons: SET 48:d=4 hl=2 l= 15 cons: SEQUENCE 50:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName 55:d=5 hl=2 l= 8 prim: PRINTABLESTRING :Ishikawa 65:d=3 hl=2 l= 17 cons: SET 67:d=4 hl=2 l= 15 cons: SEQUENCE 69:d=5 hl=2 l= 3 prim: OBJECT :localityName 74:d=5 hl=2 l= 8 prim: PRINTABLESTRING :Kanazawa 84:d=3 hl=2 l= 12 cons: SET 86:d=4 hl=2 l= 10 cons: SEQUENCE 88:d=5 hl=2 l= 3 prim: OBJECT :organizationName 93:d=5 hl=2 l= 3 prim: PRINTABLESTRING :ASH 98:d=3 hl=2 l= 18 cons: SET 100:d=4 hl=2 l= 16 cons: SEQUENCE 102:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName 107:d=5 hl=2 l= 9 prim: PRINTABLESTRING :Webmaster 118:d=3 hl=2 l= 22 cons: SET 120:d=4 hl=2 l= 20 cons: SEQUENCE 122:d=5 hl=2 l= 3 prim: OBJECT :commonName 127:d=5 hl=2 l= 13 prim: PRINTABLESTRING :www.ash.jp 142:d=2 hl=2 l= 30 cons: SEQUENCE 144:d=3 hl=2 l= 13 prim: UTCTIME :010214051856Z 159:d=3 hl=2 l= 13 prim: UTCTIME :010316051856Z 174:d=2 hl=2 l= 109 cons: SEQUENCE 176:d=3 hl=2 l= 11 cons: SET 178:d=4 hl=2 l= 9 cons: SEQUENCE 180:d=5 hl=2 l= 3 prim: OBJECT :countryName 185:d=5 hl=2 l= 2 prim: PRINTABLESTRING :JP 189:d=3 hl=2 l= 17 cons: SET 191:d=4 hl=2 l= 15 cons: SEQUENCE 193:d=5 hl=2 l= 3 prim: OBJECT :stateOrProvinceName 198:d=5 hl=2 l= 8 prim: PRINTABLESTRING :Ishikawa 208:d=3 hl=2 l= 17 cons: SET 210:d=4 hl=2 l= 15 cons: SEQUENCE 212:d=5 hl=2 l= 3 prim: OBJECT :localityName 217:d=5 hl=2 l= 8 prim: PRINTABLESTRING :Kanazawa 227:d=3 hl=2 l= 12 cons: SET 229:d=4 hl=2 l= 10 cons: SEQUENCE 231:d=5 hl=2 l= 3 prim: OBJECT :organizationName 236:d=5 hl=2 l= 3 prim: PRINTABLESTRING :ASH 241:d=3 hl=2 l= 18 cons: SET 243:d=4 hl=2 l= 16 cons: SEQUENCE 245:d=5 hl=2 l= 3 prim: OBJECT :organizationalUnitName 250:d=5 hl=2 l= 9 prim: PRINTABLESTRING :Webmaster 261:d=3 hl=2 l= 22 cons: SET 263:d=4 hl=2 l= 20 cons: SEQUENCE 265:d=5 hl=2 l= 3 prim: OBJECT :commonName 270:d=5 hl=2 l= 13 prim: PRINTABLESTRING :www.ash.jp 285:d=2 hl=3 l= 159 cons: SEQUENCE 288:d=3 hl=2 l= 13 cons: SEQUENCE 290:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption 301:d=4 hl=2 l= 0 prim: NULL 303:d=3 hl=3 l= 141 prim: BIT STRING 447:d=2 hl=3 l= 202 cons: cont [ 3 ] 450:d=3 hl=3 l= 199 cons: SEQUENCE 453:d=4 hl=2 l= 29 cons: SEQUENCE 455:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key Identifier 460:d=5 hl=2 l= 22 prim: OCTET STRING 484:d=4 hl=3 l= 151 cons: SEQUENCE 487:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Authority Key Identifier 492:d=5 hl=3 l= 143 prim: OCTET STRING 638:d=4 hl=2 l= 12 cons: SEQUENCE 640:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Basic Constraints 645:d=5 hl=2 l= 5 prim: OCTET STRING 652:d=1 hl=2 l= 13 cons: SEQUENCE 654:d=2 hl=2 l= 9 prim: OBJECT :md5WithRSAEncryption 665:d=2 hl=2 l= 0 prim: NULL 667:d=1 hl=3 l= 129 prim: BIT STRING |
ここで、ASN.1のデータ形式が、PRINTABLESTRINGか、T61STRING以外のデータがあると、ベリサイン社に申請してもエラーとなるため、注意が必要です。
OpenSSLで、'&'など記号を入力すると、IA5STRINGとして出力されます。
独自CAで運用する場合は、全く問題ありません。
また、NetscapeServerで、同じデータを出力すると、T61STRINGで出力されるため問題は発生しません。
ASN.1の形式 | 独自CAで利用 | ベリサイン社に申請 |
---|---|---|
PRINTABLESTRING | ○ | ○ |
T61STRING | ○ | ○ |
IA5STRING | ○ | × |
Apacheを自動起動できるように、パスフレーズを解除することができます。 ただし、セキュリティ上は、パスフレーズは解除せず、起動する毎にパスフレーズを入力することをお勧めします。
unix# cd /usr/local/apache/conf/ssl.key unix# cp -p server.key server.key.org unix# ./openssl rsa -in server.key.org -out server.key パスフレーズの入力 |
ブラウザへ独自CAを登録するためには、DERエンコードされた証明書(ca.der)が必要です。 そこで、認証局の証明書をDERエンコードします。
unix# ./openssl x509 -inform PEM -outform DER -in ca.crt -out ca.der unix# cp ca.der /usr/local/apache/htdocs/dir_name/ |
ブラウザでダウンロードするためには、*.derファイルに対する、MIMEタイプを
追加する必要があります。
また、ca.derファイルをブラウザからアクセスできるディレクトリに格納する必要があります。
unix# cd /usr/local/conf unix# vi mime.types (以下の1行を追加) application/x-x509-ca-cert der |
ブラウザで、以下のURLにアクセスしてみます。 ユーザサポートページなどからリンクしておくと便利です。 http://www.ash.jp/dir_name/ca.der 認証の画面が表示されますが、すべて承認([NEXT]か[OK]をクリック)します。 ニックネームを聞く画面が表示された場合は、任意の名前(ASH)を入力します。 ブラウザの「セキュリティ」「署名者」に追加されますので、確認しましょう。