OpenSSLでの自己認証局(CA)や証明書などの作成方法
SSL通信に必要な証明書の作成方法を、OpenSSLを利用して手順をご紹介します。なお、ここでは、自己認証局(CA)の構築と、サーバ用の証明書作成を行います。
環境は、CentOS-5を利用しました。
CentOS-5では、OpenSSLの必要なファイル群は、/etc/pki/以下に配置されています。
証明書作成の流れ
証明書の作成は大まかに以下の3つの手順が必要です。(自己認証局を作る場合)1.証明書作成用設定ファイルの編集
2.自己認証局(CA)の構築(CAの秘密鍵と証明書の作成)
3.署名要求証明書の作成(申請者の秘密鍵と証明書の作成)
4.自己認証局による署名要求証明書への署名(申請者用の、CAの署名付証明書の作成)
サーバ証明書作成の準備
ここでは、サーバ証明書を作成しますので、/etc/pki/tls/openssl.cnfを編集します。
# This is OK for an SSL server.
nsCertType = server <---コメントを解除
# Some might want this also
nsCertType = sslCA, emailCA <---コメントを解除
# This is OK for an SSL server.
nsCertType = server <---コメントを解除
自己認証局(CA)の構築
最初に、自己認証局(以下CA)の構築を行います、CAの構築は/etc/pki/CAに行います。CAを作成するには、OpenSSL付属の/etc/pki/tls/misc/CAスクリプトを利用します。
なお、構築するCAの設定は/etc/pki/tls/misc/CAファイルに定義してありますので、変更する場合は、これを編集してください。
準備ができたら、CAの構築を行います。
CAの構築で作成されるのは、認証機関の証明書と認証機関の秘密鍵です。
cd /etc/pki/tls/misc
./CA -newca以下の入力情報に適時答えてください。
CA cretificate filename (or enter tocreate) <---上位CAがあれば指定
Enter PEM pass phrase: <---証明書のパスフレーズを入力
Verifying - Enter PEM pass phrase: <---証明書のパスフレーズの確認
Country Name (2 letter code) [AU]:JP <---国名、日本なら'JP'
State or Province Name (full name) [Some-State]:AICHI <---都道府県名を指定
Location Name(eg,city) []:NAGOYA <---組織の本拠地の市区町村名を指定
Orgnaization Name(eg,company)[Internet Widgits Pty Ltd]:UNIXLife <---組織名(法人名)を指定
Orgnaization Unit Name(eg,section)[]: <---部署名を指定
Common Name (eg,YOUR name)[]:sv.unixlife.jp <---サーバのホスト名(FQDN)を指定
Email Address []:master@unixlife.jp <---連絡先E-Mailアドレスを指定
これで/etc/pki/CA/以下に必要なファイルが作成されCAの作成は終了です。
/etc/pki/CA/cacert.pem =認証機関の証明書
/etc/pki/CA/private/cakey.pem =認証機関の秘密鍵
作成した証明書は以下のコマンドで内容の確認ができます。
openssl x509 -in cacert.pem -text
今作ったのが、PEMフォーマットで、バイナリDERフォーマットにするには以下のようにします。
openssl x509 -in cacert.pem -outform DER -out cacert.der
サーバの秘密鍵と署名要求証明書の作成
ここでは、CAに署名してもらう側の、サーバの秘密鍵とCAに署名してもらう為の署名要求証明書を作成します。秘密鍵の作成
作業は、/etc/pki/server/以下で行います。mkdir /etc/pki/server/
まず、サーバの秘密鍵を作成します。パスフレーズを聞かれますので、適時設定してください。
openssl genrsa -des3 -out server.key 1024ここで作成した、server.keyがサーバの秘密鍵になります。
Tips
パスフレーズの付いた秘密鍵を利用してデーモンを立ち上げる場合、パスフレーズを入力するよう求められる事があります。これは、デーモンの自動起動設定をしてある時には厄介な問題になります。
もし、その問題の回避を優先したいなら、秘密鍵のパスフレーズを解除することで問題を解決出来ます。
秘密鍵のパスフレーズを解除するには、以下のコマンドを発行します。
openssl rsa -in server.key -out servernopass.key
署名要求証明書の作成
次に、認証機関(CA)への署名要求証明書(csr)を作成します。openssl req -new -days 365 -key server.key -out csr.pem証明書作成に必要な情報を適時入力してください。
Country Name (2 letter code) [AU]: <---国名、通常は'JP'
State or Province Name (full name) [Some-State]: <---都道府県名を指定
Location Name(eg,city) []: <---組織の本拠地の市区町村名を指定
Orgnaization Name(eg,company)[Internet Widgits Pty Ltd]: <---組織名(法人名)を指定
Orgnaization Unit Name(eg,section)[]: <---部署名を指定
Common Name (eg,YOUR name)[]: <---FQDNを指定
Email Address []: <---連絡先E-Mailアドレスを指定
ここで作成した署名要求証明書csr.pemをCAに送り署名してもらいます。CAでの署名要求証明書への署名
サーバの署名要求証明書にCAが署名したサーバ証明書を作成します。作業は、/etc/pki/tls/misc/以下で行います。
以下のコマンドで、サーバの署名要求証明書にCAが署名します。
openssl ca -config /etc/pki/tls/openssl.cnf -in /etc/pki/server/csr.pem \ -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem \ -out /etc/pki/server/cert.pem-in <---サーバの署名要求証明書ファイル
-keyfile <---認証機関(CA)の秘密鍵ファイル
-cert <---認証機関(CA)の証明書ファイル
-out <---作成する署名済み証明書ファイル
これでCAに署名されたサーバ証明書のcert.pemが作成されます。
サーバの秘密鍵とサーバの署名済み証明書を使って、ApacheなどのSSL通信の設定に利用出来ます。
