サーバ証明書の作成 | HTTPD Installation Last modified : 2000/03/24 |
自分で自身のサーバ証明書を用意する方法について説明します。サーバの証明書にお金をかけたくない 場合や、通信の暗号化だけを主な目的にする場合に有用です。 認証の流れ CAとは、Certificate Authority のことであり、サーバを証明するための認証機関のことである。 基本的には誰でもCAになれるわけだが、SSL化したWebサービスを本格的に運用するためには、 「世の中で認められた」CAから証明書を発行してもらうことが必要だ。これらのCAは、認証作業 事態を主な業務としている。 サーバの秘密鍵を作成したら、CAから認証を受けるためにサーバの公開鍵や名前を含んだデジタル ファイルであるCSR(Certificate Signing Request)を作成する。CAは受け取ったCSRから 証明書(CRT:Certificate)を作成し、送り返してくる。CRTはCAによって電子的に署名され ており、サーバの公開鍵、名前、CAの名前などが含まれている。 CA秘密鍵/公開鍵作成 OpenSSLには、CA用のスクリプトが付属しており簡単にCAの作成が出来る。 スクリプト制御ファイルは、/usr/local/openssl/openssl.cnf です。「サーバ証明書有効期限」などを 必要に応じて変更して下さい。 # cd /usr/local/openssl/misc # ./CA.sh -newca CA certificate filename (or enter to create) Making CA certificate ... Using configuration from /usr/local/openssl/openssl.cnf Generating a 1024 bit RSA private key .....+++++ ...............+++++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase: ← CAのパスワード入力 Verifying password - Enter PEM pass phrase: ← CAのパスワード入力 ----- 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) []:Shinagawa Organization Name (eg, company) [Internet Widgits Pty Ltd]:XXX CA Organizational Unit Name (eg, section) []:Admin Common Name (eg, YOUR name) []:event2.xxx.co.jp Email Address []:supp-ev2.xxx.co.jp CA証明書が作成される。(/usr/local/openssl/misc/demoCA/cacert.pem) サーバ秘密鍵(KEY)/サーバ公開鍵(CSR)作成 CAへ提出するリクエストを作る。Webサーバのサイト情報や公開鍵が記述してあり、これにCAの 電子署名をもらうとサーバ証明書になる。 # ./CA.sh -newreq Using configuration from /usr/local/openssl/openssl.cnf Generating a 1024 bit RSA private key ...............+++++ ..................................................+++++ writing new private key to 'newreq.pem' Enter PEM pass phrase: ← サーバのパスワード入力 Verifying password - 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) [AU]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []:Shinagawa Organization Name (eg, company) [Internet Widgits Pty Ltd]:XXX Organizational Unit Name (eg, section) []:Admin Common Name (eg, YOUR name) []:event2.xxx.co.jp Email Address []:supp-ev2@xxx.co.jp Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Request (and private key) is in newreq.pem リクエストは、newreq.pemという名前で出力される(下記ファイル)。秘密鍵まで同一ファイルに出力され てしまうので、実際にCAにリクエストを送る際には必ず秘密鍵の部分を削るようにしなければならない。 ここでは、エディタで秘密鍵を/usr/local/www/certs/server_key.pemという名前で書き出し、リクエスト からは削って下さい。 このサーバ秘密鍵で、Apache-SSLを自動起動すると、毎回パスフレーズを聞かれます。 自動起動させる場合は邪魔なので、鍵からパスフレーズを削除します。 # cd /usr/local/www/certs % /usr/local/openssl/bin/openssl rsa -in server_key.pem -out server_key.pem read RSA private key Enter PEM pass phrase: ← パスフレーズ入力 writing RSA private key -----BEGIN RSA PRIVATE KEY----- ← サーバ秘密鍵 Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,4D7DB99DB2155F7B fOtnLTfIw0Fg2HGsiUjuI1cBRJtWvlDIAZDWioUiRPHs/LBt6tR/rGVX22T5fuzn Oy22EyUEubkPmdPofk4EvnkcRGUPwX6DbIAWHiUlPHzc7LFqJ4qhGkXCybRkzAjq ...略 tIlik4ZhaVSclj44bbm/7BB4TQUNZvUivj0K0pRRrW5+Lq5iYVOJtA226DewVjFb suHMTOWsgdcimoNKrkL3xhwZa0KEg3+XepbQWBAJ3r5Sp6fg0Dwio9h4q269X1ia 5+OFKbv3P/ysdafMklazF/vtH4QgWBFipxw1oaN9tR0xgmzcTSIqwQ== -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE REQUEST----- ← サーバ公開鍵 MIIBzjCCATcCAQAwgY0xCzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzESMBAG A1UEBxMJU2hpbmFnYXdhMQwwCgYDVQQKEwNTTUsxDjAMBgNVBAsTBUFkbWluMRkw ...略 gQCfz9vJ9p+mbrhchGxZBkDbuKn6YlRpvQ9+HpjmEvMuAeOCLVItKPsrLQqJ+VA7 I6FqBNO/m5xyK9dJbSE1pJw4/WaJHYoZMcIwfQQBSoNn8cBiRtcP3BfIm4WhRa22 l/7/Rah9bmAiSMqBdPmvn1WOaM/PQUtc94oc/U2VzKegzw== -----END CERTIFICATE REQUEST----- サーバ証明書(CRT)作成 CAも同一マシンにあるため、リクエストを送る必要はない。その場でCAに署名してもらいます。 # ./CA.sh -sign Using configuration from /usr/local/openssl/openssl.cnf Enter PEM pass phrase: ← CAのパスワード入力 Check that the request matches the signature Signature ok The Subjects Distinguished Name is as follows countryName :PRINTABLE:'JP' stateOrProvinceName :PRINTABLE:'Tokyo' localityName :PRINTABLE:'Shinagawa' organizationName :PRINTABLE:'XXX' organizationalUnitName:PRINTABLE:'Admin' commonName :PRINTABLE:'event2.xxx.co.jp' emailAddress :IA5STRING:'supp-ev2@xxx.co.jp' Type :Valid Expires on :010325122327Z Serial Number :01 File name :unknown Subject Name :/C=JP/ST=Tokyo/L=Shinagawa/O=XXX/OU=Admin/CN=event2.xxx.co.jp/Email=supp-ev2@xxx.co.jp Signed certificate is in newcert.pem 署名をすませた証明書は、/usr/local/openssl/misc/newcert.pemに出力されます。 ファイルの内容を確認後、証明書の部分を取り出し、/usr/local/www/certs/server_crt.pemという名前で 保存して下さい。 -------------- フォルダ /usr/local/www/certs/に3つのファイルが作成されました。制御ファイル httpsd.confで これらのファイルを指定指定するように変更します。 cacert.pem --- CA証明書 server_crt.pem --- サーバ証明書 server_key.pem --- サーバ秘密鍵 詳細については、httpsd.conf設定方法を参照して下さい。