マソム自宅サーバ構築の記録

  • SSL証明書の作成
  • 作成日:08/02/11    更新日:09/08/07

概要

WWWサーバ(https)、SMTPサーバ(SMTP over SSL/TLS) 、POPサーバ(POP over SSL/TLS) 等で使用する、SSL証明書を作ります。
正式には、Verisign等の認証局に署名した証明書を発行してもらいますが、自宅サーバ用なので自分で署名します。
テストや勉強用にSSL暗号化通信さえ出来ればOKだからです。
但し、自己署名だとhttpsでアクセスした場合にブラウザの警告メッセージが出ます。出さない為には自前のCA認証局を作成してその証明書をブラウザにインストールすれば良いようですが、そこまでは行いません。
なお、Apacheの自動起動に支障がないように、 鍵のパスフレーズは付けないで作成します。

openSSLのインストール

openssl-0.9.8b-12.fc7がFedora 7のRPMパッケージでインストールされているので、それをそのまま使うことにしました。
ディレクトリは/etc/pki/tls/となっているようです。 環境によって/usr/share/ssl/等のように違いますので読み替えて下さい。

作成手順

自己署名の証明書を作る方法は幾つかあるようです。
1.Fedora 7 では /etc/pki/tls/certs/Makefileを実行して、鍵と自己署名済み証明書を作れるようです。
但し、パスフレーズ付きなので作成の後 openssl コマンドでパスフレーズ無しの鍵を作っておく必要があります。
# cd /etc/pki/tls/certs/
# make 証明書ファイル名(server.crt等)
# openssl rsa -in 鍵ファイル名(server.key等) -out パスフレーズなし鍵ファイル名(server_nopswd.key等)

2.他に、次のopenssl コマンドを使って、鍵と自己署名済み証明書を作成する方法もあります。
-nodesオプションでパスフレーズは付きません。 -daysオプションで有効期間(日)を指定できます。
# cd /etc/pki/tls/certs/
# openssl req -new -x509 -nodes -keyout 鍵ファイル名(server.key等) -out 証明書ファイル名(server.crt等) -days 365

3.しかし、今回は正式な証明書を作る手順を確認しておきたいので、
  プライベートCA(認証局)を作成
  サーバ証明書の署名要求(CSR)の作成
  署名要求(CSR)にプライベートCAが署名しサーバ証明書(CRT)を作成
の手順で作成してみることにしました。

プライベートCA(認証局)の作成

証明書に署名するCA(認証局)を作成します。上位の認証局はありませんのでルート証明書として自己署名します。

まず、openSSLの設定ファイル/etc/pki/tls/openssl.cnfのバックアップを取ってから以下の変更をしました。
[ CA_default ] x509_extensions = v3_ca  : CAとして証明書に署名できるようにする為です。(basicConstraints=CA:TRUE)
[ v3_ca ] nsCertType = sslCA, emailCA
(要検証)しかし、これが正解かはまだ未検証
・・・省略・・・
[ CA_default ]
・・・省略・・・
## x509_extensions = usr_cert # The extentions to add to the cert
x509_extensions = v3_ca
・・・省略・・・
[ v3_ca ]
・・・省略・・・
# nsCertType = sslCA, emailCA
nsCertType = sslCA, emailCA
・・・省略・・・
シェルスクリプト/etc/pki/tls/misc/CA を使ってCA環境、鍵と証明書を作成します。
無い場合は/etc/pki/CA/ディレクトリ以下が作成され、CA環境となります。
ルート証明書は /etc/pki/CA/cacert.pem、その鍵は /etc/pki/CA/private/cakey.pem となります。
# cd /etc/pki/tls/misc/
# ./CA -newca
CA certificate filename (or enter to create)
Enterキー
Making CA certificate ...
Generating a 1024 bit RSA private key
.....................++++++
...++++++
writing new private key to '../../CA/private/./cakey.pem'
Enter PEM pass phrase:CA用パスフレーズ
Verifying - 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) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Musashino-shi
Organization Name (eg, company) [My Company Ltd]:Mathom Factory
Organizational Unit Name (eg, section) []:Enterキー
Common Name (eg, your name or your server's hostname) []:Mathom Factory CA
Email Address []:webmaster@mathomfactory.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Enterキー
An optional company name []:Enterキー
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ../../CA/private/./cakey.pem:CA用パスフレーズ
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 0 (0x0)
        Validity
            Not Before: Feb 15 13:39:02 2008 GMT
            Not After : Feb 14 13:39:02 2011 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = Mathom Factory
            commonName                = Mathom Factory CA
            emailAddress              = webmaster@mathomfactory.com
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                18:94:F6:AA:77:ED:F4:BE:4B:2E:D1:22:24:8A:91:FE:A4:57:3C:E4
            X509v3 Authority Key Identifier:
                keyid:18:94:F6:AA:77:ED:F4:BE:4B:2E:D1:22:24:8A:91:FE:A4:57:3C:E4
                DirName:/C=JP/ST=Tokyo/O=Mathom Factory/CN=Mathom Factory CA/emailAddress=
                                                               webmaster@mathomfactory.com
                serial:00

            X509v3 Basic Constraints:
                CA:TRUE
            Netscape Cert Type:
                SSL CA, S/MIME CA
Certificate is to be certified until Feb 14 13:39:02 2011 GMT (1095 days)

Write out database with 1 new entries
Data Base Updated
作成できたら、 取っておいたバックアップでopenSSLの設定ファイル/etc/pki/tls/openssl.cnfを元に戻します。

サーバ用CSR(証明書要求)の作成

サーバ用の鍵と証明書要求を作成します。
デフォルトの/etc/pki/tls/以下に置くことにしました。
まず、サーバ鍵を作成します。パスフレーズを外した鍵ファイルも作っておきます。
# cd /etc/pki/tls/certs/
# openssl genrsa -out www.mathomfactory.com.key -des3 1024
Generating RSA private key, 1024 bit long modulus
..........++++++
.....++++++
e is 65537 (0x10001)
Enter pass phrase for www.mathomfactory.com.key:パスフレーズ
Verifying - Enter pass phrase for www.mathomfactory.com.key:パスフレーズ

# openssl rsa -in www.mathomfactory.com.key -out www.mathomfactory.com_nopswd.key
Enter pass phrase for www.mathomfactory.com.key:パスフレーズ
writing RSA key
次に、CSR(証明書要求)を作成します。
注)Organization Name をプライベートCAと同じにしておかないと、CAで証明書を発行する時に以下のようなエラーになりました。
  The organizationName field needed to be the same in the
  CA certificate (Mathom Factory CA) and the request (Mathom Factory))
# openssl req -new -key www.mathomfactory.com_nopswd.key -out www.mathomfactory.com.csr
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) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Musashino-Shi
Organization Name (eg, company) [My Company Ltd]:Mathom Factory
Organizational Unit Name (eg, section) []:Enterキー
Common Name (eg, your name or your server's hostname) []:www.mathomfactory.com
Email Address []:webmaster@mathomfactory.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Enterキー
An optional company name []:Enterキー
鍵を /etc/pki/tls/private/ に移動しておきます。
# mv www.mathomfactory.com.key ../private/
# mv www.mathomfactory.com_nopswd.key ../private/

サーバ証明書の作成

CAとして証明書要求からサーバ証明書を発行します。

まず、openSSLの設定ファイル/etc/pki/tls/openssl.cnfをコピーしてサーバ証明書用の設定ファイルを作成します。
以下の変更をします。Netscapeの為の対応だそうです。
# cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl_server.cnf
# vi /etc/pki/tls/openssl_server.cnf
    ・・・省略・・・
 [ usr_cert ]
    ・・・省略・・・
 # nsCertType = server
 nsCertType = server
    ・・・省略・・・
作成したサーバ証明書用の設定ファイルを使って、証明書を作成します。
有効期限は -days 3650 で10年にしてしまいました。指定しなければ規定値の365日となります。
# cd /etc/pki/tls/certs/
# openssl ca -config /etc/pki/tls/openssl_server.cnf -in www.mathomfactory.com.csr -out www.mathomfactory.com.crt -days 3650
Using configuration from /etc/pki/tls/openssl_server.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:CA用パスフレーズ
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Feb 19 10:53:37 2008 GMT
            Not After : Feb 16 10:53:37 2018 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = Mathom Factory
            commonName                = www.mathomfactory.com
            emailAddress              = webmaster@mathomfactory.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Cert Type:
                SSL Server
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                2B:C9:0C:DA:4E:BE:0B:A1:2C:33:70:89:C7:BC:25:E6:80:6A:A4:71
            X509v3 Authority Key Identifier:
                keyid:18:94:F6:AA:77:ED:F4:BE:4B:2E:D1:22:24:8A:91:FE:A4:57:3C:E4

Certificate is to be certified until Feb 16 10:53:37 2018 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
これで鍵 /etc/pki/tls/private/www.mathomfactory.com_nopswd.key と、証明書 /etc/pki/tls/certs/ww.mathomfactory.com.crt が出来ました。
紆余曲折Tips