読者です 読者をやめる 読者になる 読者になる

パンダのメモ帳

技術系のネタをゆるゆると

CentOS 5.4でSSL/TLS証明書の作成

CentOS 5.4でSSL/TLS通信用の証明書を作成したのでその時の手順をメモ。

1. 秘密鍵の生成

まず、サーバー用の秘密鍵を生成する。生成後、パーミッションを変更してroot以外からは読めないようにする。すでになにかで作成済みの場合は二重に作成する必要はないので省略可。

[root@localhost ~]# cd /etc/pki/tls/private
[root@localhost private]# openssl genrsa -out server.key -des3 2048
Generating RSA private key, 2048 bit long modulus
................................+++
.................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:(秘密鍵用パスワードを入力)
Verifying - Enter pass phrase for server.key:(秘密鍵用パスワードを入力)
[root@localhost private]# chmod 400 server.key

秘密鍵用のパスワードの設定ははセキュリティ的には好ましいのだが、サーバー再起動時に各デーモンが自動で起動できなくなるなど、弊害も大きい。必要に応じて、秘密鍵のパスワードを解除する。以下に解除方法を示す。

[root@localhost private]# mv server.key server.key.orig
[root@localhost private]# openssl rsa -in server.key.orig -out server.key
[root@localhost private]# rm server.key.orig
[root@localhost private]# chmod 400 server.key

また、最初からパスワードを掛けずに秘密鍵を生成することもできる。

[root@localhost private]# openssl genrsa -out server.key 2048
[root@localhost private]# chmod 400 server.key

いずれにせよ、作成された秘密鍵は証明書とペアで使用されるため、必ずバックアップを取ること。

2. CSRの作成

続いて証明書の発行に必要となるCSR(Certificate Signing Request)を作成する。

[root@localhost ~]# cd /etc/pki/tls/certs
[root@localhost certs]# openssl req -new -key /etc/pki/tls/private/server.key -out server.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(所属する国のCountry Codeを入力。日本なら"JP")
State or Province Name (full name) [Berkshire]:Tokyo(所在地[都道府県]を入力。東京の場合は"Tokyo")
Locality Name (eg, city) [Newbury]:Nerima-ku(所在地[市区町村]を入力。練馬区の場合は"Nerima-ku")
Organization Name (eg, company) [My Company Ltd]:Example Inc.(組織名を入力)
Organizational Unit Name (eg, section) []:System (部署名を入力。)
Common Name (eg, your name or your server's hostname) []:secure.example.com(サーバーのホスト名[FQDN]を入力)
Email Address []:(空Enter)

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

実行後に新しいファイル "server.csr" が作成される。これがCSRだ。ベリサインなど公の認証局に署名を依頼する場合はこのCSRの内容を送り、証明書を発行してもらうことになる。

3. 証明書の発行(署名)

公の認証局を利用しない場合、自前の認証局(プライベートCA)で署名を行う。プライベートCAの構築については以下の記事で解説した。

上記の手順でCAを構築している場合、以下の様にして証明書を発行できる。

[root@localhost ~]# cd /etc/pki/tls/certs
[root@localhost certs]# openssl ca -config /etc/pki/myCA/ca.conf -in server.csr -out server.crt
Using configuration from /etc/pki/myCA/ca.conf
Enter pass phrase for /etc/pki/myCA/private/cakey.pem:(CA構築時に設定したパスフレーズを再入力)
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Dec 17 01:39:17 2009 GMT
            Not After : Dec 15 01:39:17 2019 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = Example Inc.
            organizationalUnitName    = System
            commonName                = secure.example.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                E4:C2:D5:63:32:65:44:39:BE:8C:BF:DC:E7:F9:1D:0B:73:51:E5:EC
            X509v3 Authority Key Identifier: 
                keyid:C2:D2:1D:9D:E4:6B:E8:F3:BB:63:B9:F5:90:9A:9C:C3:A6:19:45:DF
                DirName:/C=JP/ST=Tokyo/O=Example Inc./OU=System/CN=secure.example.com
                serial:00

Certificate is to be certified until Dec 15 01:39:17 2019 GMT (3650 days)
Sign the certificate? [y/n]:y("y"と入力)

1 out of 1 certificate requests certified, commit? [y/n]y("y"と入力)
Write out database with 1 new entries
Data Base Updated

この様に自前の認証局で署名した証明書は「自己署名証明書」俗に「オレオレ証明書」と呼ばれ、HTTPSなど不特定多数に公開するサービスで使用するべきではない。