スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

オレオレ証明書を信頼のおけるSSL証明書にしてみる Vol.2 (認証局と証明書の作成)

前回の「オレオレ証明書を信頼のおけるSSL証明書にしてみる Vol.1」の続きです。

今回は実際にオレオレルート認証局、オレオレ中間認証局、オレオレSSL証明書を作成する手順を紹介していきます。

01. OpenSSLを認証局作成先サーバへインストールする
これがないと始まらないので、手短に説明します。
yumでインストールしてもいいし、ソースからインストールしても構いませんが、
今回はディレクトリのパスを共通化するためにソースからのインストールを紹介します。

cd /usr/local/src
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar zxvf openssl-1.0.1e.tar.gz
cd openssl-1.0.1e
./config --prefix=/usr/local --openssldir=/usr/local/ssl -fPIC enable-tlsext shared
make 2>&1 | tee make.log && make install 2>&1 | tee -a make.log

こんな感じでインストールします。


02. ルート認証局を作成する
前回の例えの説明でいうところの「社長」を作成します。
※以降の作業は全てルートユーザにて行っています。

02-01. ルート認証局用のOpenSSL設定ファイルを作成する
以下のコマンドでルート認証局用ディレクトリを作成し、デフォルトの設定ファイルをコピーします。
cd /usr/local/ssl
mkdir RCA
cp openssl.cnf openssl_rca.cnf

02-02. ルート認証局用のOpenSSL設定ファイルを編集する
02-01で作成した「openssl_rca.cnf」を vim などで開き、以下の項目を編集します。
<ディレクトリ変更(※2箇所あるので2箇所とも変更する)>
dir = /usr/local/ssl

dir = /usr/local/ssl/RCA

<認証種別変更>
[ v3_ca ]
#nsCertType = sslCA, emailCA

nsCertType = sslCA, emailCA

<サーバ証明書署名時のNetscape用認証種別変更>
[ usr_cert ]
#nsCertType = server

nsCertType = server

<暗号化bit数の変更>
[ req ]
default_bits = 1024

default_bits = 2048

<証明書有効期間の変更>
[ CA_default ]
default_days = 365

default_days = 1095


02-03. ルート認証局スクリプトを作成する
以下の手順で作成します。
cd /usr/local/ssl/misc
cp CA.sh RCA.sh

また、作成した RCA.sh を vim などで開き、以下の値をヘッダコメントのすぐ下に追加します。
CATOP=/usr/local/ssl/RCA
SSLEAY_CONFIG="-config /usr/local/ssl/openssl_rca.cnf"

02-04. ルート認証局スクリプトでルート認証局を新規作成する
以下のコマンドを実行します。
/usr/local/ssl/misc/RCA.sh -newca


「CA cretificate filename (or enter tocreate)」と聞かれますが、無視してEnterで次へ進みます。
すると、「Enter PEM pass phrase」と認証局の秘密鍵のパスワード入力を促されますので、パスワードを入力します。
その後、以下を項目の入力を促されますので、以下の例を参考に値を入力します。
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Setagaya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SSL Test Company
Organizational Unit Name (eg, section) []:Network
Common Name (e.g. server FQDN or YOUR name) []:SSL Test Company RCA
Email Address []:(メールアドレス)

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

上記項目を入力後、「Enter pass phrase for /usr/local/ssl/RCA/private/./cakey.pem」と再び秘密鍵のパスワードを聞かれますので、パスワードを入力しておきます。
完了すると、/usr/local/ssl/RCA ディレクトリにルート認証局の証明書ファイルが作成されます。

最後に、以下のコマンドにて後でOSやブラウザへインストールするための、ルート認証局証明書のバイナリ形式(DER)ファイルを作成しておきます。
cd /usr/local/ssl/RCA
openssl x509 -inform pem -in cacert.pem -outform der -out rca.der


これでルート認証局を作成することが出来ました。
認証局の証明書のインストールについては後述するとして、
次は中間認証局の作成に移ります。


03. 中間認証局を作成する
前回の例えの説明でいうところの「部長」「課長」「係長」を作成します。

03-01. 中間認証局用のOpenSSL設定ファイルを作成する
以下のコマンドで中間認証局用ディレクトリを作成し、ルート認証局用の設定ファイルをコピーします。
cd /usr/local/ssl
mkdir ICA
cp openssl_rca.cnf openssl_ica.cnf


03-02. 中間認証局用のOpenSSL設定ファイルを編集する
03-01で作成した「openssl_ica.cnf」を vim などで開き、以下の項目を編集します。
<ディレクトリ変更前>
dir = /usr/local/ssl/RCA

<ディレクトリ変更後 (※2箇所あるので2箇所とも変更する)>
dir = /usr/local/ssl/ICA


03-03. 中間認証局スクリプトを作成する
以下の手順で作成します。
cd /usr/local/ssl/misc
cp RCA.sh ICA.sh

また、作成した ICA.sh を vim などで開き、以下の値を変更します。
<変更前>
CATOP=/usr/local/ssl/RCA
SSLEAY_CONFIG="-config /usr/local/ssl/openssl_rca.cnf"

<変更後>
CATOP=/usr/local/ssl/ICA
SSLEAY_CONFIG="-config /usr/local/ssl/openssl_ica.cnf"


03-04. ルート認証局スクリプトから中間認証局の証明書を作成するための要求証明書を作成する
ここからルート認証局作成時とは手順が変わってきます。
中間認証局はルート認証局によって認められたものになるわけですから、
これから作成したい中間認証局の要求証明書を作成します。
この要求証明書に企業名などの各種情報が記載されており、
ルート認証局はその要求証明書を審査することで、中間認証局の証明書を作成するかどうかを判断します。

要求証明書の作成には以下のコマンドを実行します。
cd /usr/local/ssl/ICA
/usr/local/ssl/misc/ICA.sh -newreq


すると、「Enter PEM pass phrase」と作成する中間認証局の秘密鍵のパスワード入力を促されますので、パスワードを入力します。
その後、以下を項目の入力を促されますので、以下の例を参考に値を入力します。
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Setagaya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SSL Test Company
Organizational Unit Name (eg, section) []:Network
Common Name (e.g. server FQDN or YOUR name) []:SSL Test Company ICA
Email Address []:(メールアドレス)

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

すると、中間認証局の秘密鍵「newkey.pem」と要求証明書の「newreq.pem」が /usr/local/ssl/ICA ディレクトリへ作成されます。(ファイル名はこの時点では絶対に変えないで下さい)

03-05. ルート認証局を使って中間認証局の要求証明書を署名する
中間認証局の証明書を発行するために、ルート認証局を使って中間認証局の要求証明書を署名します。
これも前回の例えでいいますと、ルート認証局である社長が中間認証局である部長に「お前は今日から部長だ」と認めるというわけです。
以下のコマンドを実行します。
cd /usr/local/ssl/ICA
/usr/local/ssl/misc/RCA.sh -signCA

すると、ルート認証局の秘密鍵のパスワードを聞かれますので、パスワードを入力します。
その後、以下の様な画面になります。
Using configuration from /usr/local/ssl/openssl_rca.cnf
Enter pass phrase for /usr/local/ssl/RCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 12558440992105649970 (0xae488b8b7b295732)
Validity
Not Before: Mar 31 09:17:54 2013 GMT
Not After : Mar 30 09:17:54 2016 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
localityName = Setagaya
organizationName = SSL Test Company
organizationalUnitName = Network
commonName = SSL Test Company RCA
emailAddress = (要求証明書発行時に入力したメールアドレス)
X509v3 extensions:
X509v3 Subject Key Identifier:
1E:9E:D3:F3:68:1F:7E:F6:F9:8E:E2:3D:B1:CB:90:A1:AE:CB:95:BD
X509v3 Authority Key Identifier:
keyid:7C:27:6F:57:B2:70:E9:11:1F:75:8B:C1:02:66:D0:DA:0B:BB:B0:67

X509v3 Basic Constraints:
CA:TRUE
Netscape Cert Type:
SSL CA, S/MIME CA
Certificate is to be certified until Mar 30 09:17:54 2016 GMT (1095 days)
Sign the certificate? [y/n]:

署名するかどうかを聞かれていますので、問題なければ「y」を入力していきます。
その後、「1 out of 1 certificate requests certified, commit? [y/n]」と聞かれますので、問題なければ「y」を入力して確定します。

すると、中間認証局の証明書ファイルである「newcert.pem」ファイルが /usr/local/ssl/ICA ディレクトリへ作成されます。


03-06. 中間認証局を認証局として動作させる
これで中間認証局の証明書ファイルは作成されましたが、このままだと中間認証局は証明書があるだけで認証局として動作しません。
そのため、認証局として動作させるために必要なファイルを作成します。
以下のコマンドを実行します。
/usr/local/ssl/misc/ICA.sh -newca


「CA cretificate filename (or enter tocreate)」と聞かれますが、
ルート証明書のときとは違って今回は元となる証明書ファイルを指定します。
元となる証明書ファイルとは 03-05 で作成した「newcert.pem」ファイルになりますので、
以下のパスを入力して決定します。

/usr/local/ssl/ICA/newcert.pem


すると、中間認証局の必要な各種ファイルが /usr/local/ssl/ICA へ作成されます。
あとは、中間認証局の秘密鍵をファイル名を変更して private ディレクトリへ移動すれば完了です。

cd /usr/local/ssl/ICA
mv newkey.pem private/cakey.pem


最後に、ルート認証局のときと同様に中間認証局の証明書を後ほどブラウザやOSへインストールするために、バイナリ形式(DER)版も作成し、ApacheやNginxで利用するためのCRTファイルを作成しておきます。
cd /usr/local/ssl/ICA
openssl x509 -inform pem -in cacert.pem -outform der -out ica.der
openssl x509 -in cacert.pem -out ica.crt


これで中間認証局の作成が完了しました。
いわゆる「部長」の作成が終わったことになるのですが、
「課長」を作成する場合はこの手順のルート証明書の部分を「部長」に置き換えて作成する必要があります。
同様に、「係長」を作成する場合は、この手順のルート証明書の部分を「課長」に置き換えて作成する必要があります。
今回は全て作成したことにして次へ進みます。


04. サーバ証明書を作成する
ようやく認証局の作成が完了しましたので、
サーバ証明書の作成に入れます。
サーバ証明書の作成も中間認証局作成時と同様で、秘密鍵と要求証明書をまず作成します。

04-01. サーバの秘密鍵を作成する
以下のコマンドで作成します。
cd /usr/local/ssl/private
openssl genrsa -des3 2048 > newkey.pem


認証局のときとは違い、秘密鍵のパスフレーズを解除しておきます。
(毎回パスワードを聞かれるとApacheやnginxで使えないため)
openssl rsa -in newkey.pem -out newkey.pem


04-02. サーバの要求証明書を作成する
以下のコマンドで要求証明書を新規作成する。
openssl req -new -key newkey.pem -out newreq.pem

その後、以下を項目の入力を促されますので、以下の例を参考に値を入力します。
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Setagaya
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SSL Test Company
Organizational Unit Name (eg, section) []:Development
Common Name (e.g. server FQDN or YOUR name) []:www.testserver.com ← サーバのFQDNを入力
Email Address []:(メールアドレス)

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

入力完了後、「newreq.pem」ファイルが作成されます。

04-03. 中間認証局を使ってサーバ証明書を発行する
中間認証局でサーバの要求証明書を署名し、サーバ証明書を発行します。
以下のコマンドを入力します。
cd /usr/local/ssl/private
/usr/local/ssl/misc/ICA.sh -sign

すると、中間認証局の秘密鍵のパスワードを聞かれますので入力します。
その後、以下の様な表示になりますので、「y」を選択して署名します。
Using configuration from /usr/local/ssl/openssl_ica.cnf
Enter pass phrase for /usr/local/ssl/ICA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 12558440992105649971 (0xae488b8b7b295733)
Validity
Not Before: Mar 31 10:03:44 2013 GMT
Not After : Mar 30 10:03:44 2016 GMT
Subject:
countryName = JP
stateOrProvinceName = Tokyo
localityName = Setagaya
organizationName = SSL Test Company
organizationalUnitName = Development
commonName = www.testserver.com
emailAddress = (入力したメールアドレス)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Cert Type:
SSL Server
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
C0:C8:EB:E9:B1:AD:14:8C:36:2C:E8:AC:07:38:BB:69:1C:25:1F:47
X509v3 Authority Key Identifier:
keyid:1E:9E:D3:F3:68:1F:7E:F6:F9:8E:E2:3D:B1:CB:90:A1:AE:CB:95:BD

Certificate is to be certified until Mar 30 10:03:44 2016 GMT (1095 days)
Sign the certificate? [y/n]:

署名後、「newcert.pem」ファイルが /usr/local/ssl/private ディレクトリへ作成されます。
「newcert.pem」ファイルのままだと利用できないので、
以下のコマンドで余計な情報を排除した CRT ファイルを作成します。
mv /usr/local/ssl/private/newcert.pem /usr/local/ssl/certs
cd /usr/local/ssl/certs
openssl x509 -in newcert.pem -out server.crt


また、秘密鍵も区別しやすいようにファイル名を変更しておきます。
cd /usr/local/ssl/private
mv newkey.pem server.key


これでサーバ証明書の作成は完了です。
ちなみに、証明書の有効期間を変更する場合は
サーバ証明書を署名する中間認証局の設定ファイル(openssl_ica.cnf)にある
default_days の値を変更することで期間を変更できます。


以上で、認証局と証明書の作成については完了です。
次回は作成した証明書をApacheやnginxに設定したり、
ブラウザやOSにインストールする手順を紹介します。

Vol.3へ続く
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

Author:Kou
モバイル関連の開発ばかりやってる人のブログです。たまにWebもやります。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。