ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

OpenSSLコマンドの使い方

 以下に、直接OpenSSLのコマンドを使って、独自CAを作成する方法を説明します。

独自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-----

独自CAによる認証書の作成

 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による認証書の内容の確認

 独自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の登録するための設定

 ブラウザへ独自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

ブラウザへの独自CAの登録方法

 ブラウザで、以下のURLにアクセスしてみます。
 ユーザサポートページなどからリンクしておくと便利です。
  http://www.ash.jp/dir_name/ca.der
 認証の画面が表示されますが、すべて承認([NEXT]か[OK]をクリック)します。
 ニックネームを聞く画面が表示された場合は、任意の名前(ASH)を入力します。
 ブラウザの「セキュリティ」「署名者」に追加されますので、確認しましょう。


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp