[ホーム] -> [Aache + PHP + PostgreSQL 実験室]

サーバ証明書の作成

SSL を使う場合、ほとんどのケースでサーバに「サーバ証明書」というのが必要になります。これは、「あなたがアクセスしたサーバは本物ですよ」というのを証明するためファイルです。もしこれがないと、何かでサーバがダウンしているときに、誰かが同じ IP アドレスでネットワークに接続し、正しいサーバを偽るかもしれません。

ちなみに、サーバが使う証明書なので、サーバ証明書と言っているだけで、実際は、クライアントでも使う証明書と同じものです。メールの署名などで使う証明書も、同じ方法で作れます。

OpenSSL の場合、openssl コマンドを使って作業します。証明書を作成するには(正確には証明書署名要求)、openssl req -new -keyout 秘密鍵ファイル.pem -text -out 証明書署名要求.req というコマンドを使います。-keyout 秘密鍵ファイル.pem は省略可能ですが、省略すると、privkey.pem という秘密鍵ファイルが出来ます。

このコマンドを入力すると、次のログのようなメッセージが流れ、いろいろ聞かれます。Enter PEM pass phrase: ですが、ここに秘密鍵ファイル用のパスワードを入力します。何でも構わないですが、4文字以上ないと受け付けてくれません。残りの項目は適当に埋めて構いません。ですが、公開する場合は、あまり変な値を入れると笑われてしまいますよ。

> openssl req -new -keyout certkey.pem -text -out cert.req
Using configuration from /usr/share/ssl/openssl.cnf
Generating a 1024 bit RSA private key
................++++++
.++++++
writing new private key to 'certkey.pem'
Enter PEM pass phrase:pass phrase
Verifying password - Enter PEM pass phrase: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) []:.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:HizLab
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:www.hizlab.net
Email Address []:hizuya@hizlab.net

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

最後の A challenge password []:An optional company name []: ですが、気にせず何も入力しなくて大丈夫です。

次に、この証明書に自己署名をします。これにもやはり openssl コマンドを使います。実際は、openssl req -x509 -in 証明書署名要求.req -text -key 秘密鍵ファイル.pem -out 署名済み証明書.crt という感じになります。パスワードを聞かれるので、先ほどの秘密鍵ファイルのパスワードを入力してください。

> openssl req -x509 -in cert.req -text -key certkey.pem -out cert.crt
Using configuration from /usr/share/ssl/openssl.cnf
Enter PEM pass phrase:pass phrase

これで自己署名のされたサーバ証明書ができあがりました。PostgreSQL や Apache で SSL を使うには、この署名済みのサーバ証明書と、先ほどの秘密鍵ファイルの二つのファイルが必要です。しかしこのままだと、PostgreSQL/Apache の起動時に、秘密鍵ファイルのパスワードを聞いてきてしまい、自動で起動しなくなってしまいます。これを避けるために、秘密鍵ファイルからパスワードを削除してしまいます(もちろん、毎回入力するつもりの人は、削除しなくてもいいです)。

削除するには、openssl rsa -in 秘密鍵ファイル.pem -out パスワード無し秘密鍵ファイル.pem とします。このときにもやはり、秘密鍵ファイルのパスワードを聞いてきます。

> openssl rsa -in certkey.pem -out certnokey.pem
read RSA key
Enter PEM pass phrase:pass phrase
writing RSA key

ちなみに、パスワード無し秘密鍵ファイルにパスワードを付けるには、openssl rsa -des3 -in パスワード無し秘密鍵ファイル.pem -out パスワード付き秘密鍵ファイル.pem と実行すると、新たに付けるパスワードを聞いてきます。

とにかくこれで、パスワード無し秘密鍵ファイル(certnokey.pem)とサーバ証明書(cert.crtが作成されました

戻る