サーバ証明書の作成 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設定方法を参照して下さい。