.
セキュリティ / SSL => OpenSSLについて > 5.SSLサーバー構築に必要なサーバー証明書作成手順
Linux 活用ガイド:目次

サーバ構築ガイド

レンタル ガイド

ショップ 構築ガイド

情報漏洩対策

SSLサーバー構築に必要なサーバー証明書作成手順

サーバー証明書の作成

サーバーがSSLで動作するために必要なサーバーのための証明書です。なのでサーバー管理者の立場でOpenSSLを操作し、証明書を発行します。ここでは、Sendmail でのクライアント認証のための証明書作成を例にしていますが、他のサービスでも共通します。

サーバー証明書 にはCAを必要としない [自己証明型証明書] とCA署名による [x509 CA署名型証明書] がありますが、ここでは立ち上げたCA局に証明書の発行を依頼する後者の証明書を作成します。この依頼書を署名要求(CSR)といい、まずこれをサーバー管理が作成します。

仮にメールサーバー管理者がCA管理者に署名要求を行う場合、ディレクトリはどこでも構いませんが、Sendmailであれば、設定ディレクトリに certs 証明書を作成し、これをカレントディレクトリとします。

署名要求(CSR)

サーバー管理者の立場で署名要求書を作成します。

# cd /etc/mail/certs
# openssl req -new -nodes -out newreq.pem


Using configuration from /var/ssl/openssl.cnf
Generating a 1024 bit RSA private key
.......++++++
........................++++++
writing new private key to 'privkey.pem'
-----
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) [JP]:
State or Province Name (full name) [Aichi]:
Locality Name (eg, city) [Nagoya]:
Organization Name (eg, company) [Creative.Unit.ZERO]:
Organizational Unit Name (eg, section) [Design]:
Common Name (eg, YOUR name) []:mail.mydomain.net
Email Address []:info@mydomain.net

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

この時注意するのは
Common Name (eg, YOUR name) [ ]:

smtpサーバーにmail.mydomain.net など、DNSを割り当てている場合、すなわちユーザーがサーバー指定にmail.mydomain.netで接続するような場合は そのサービスのドメインmail.mydomain.net と指定します。Webサーバーであればwww.mydomain.net となります。この後に作成するユーザーの提出する証明書がサービスを提供するドメインと異った場合、接続の度にその旨の警告が出ることになるので注意が必要です。

また、-nodes オプションをつけなかった場合、サーバープログラム起動時にパスフレーズが要求されます。リブートの度にパスフレーズが要求されるのは面倒なことが多いた めこのようにしています。セキュリティは低下しますが、サーバー証明書の場合はパスフレーズを取る場合が多いようです。

この作業で /etc/mail/certs 下に以下のファイルが生成されます。

./newreq.pem メールサーバーの署名要求書(CSR)
./privkey.pem メールサーバーの秘密鍵

この署名要求書を 安全な方法でCA管理者に渡し証明してもらうことで証明書が発行されます。

CAによる署名作業

同一ホストにCA,サーバーがある場合、そのままOpenSSLコマンドを実行すれば、署名作業が行えますが、自分は今、CA管理者の立場にいることを忘 れないで下さい。先程まではサーバー管理者の立場で署名要求書を作成しました。今度はCA管理者の立場で署名作業を行います。

まず、サーバー管理者が要求した証明書タイプを設定するために、OpenSSLの初期設定を変更します。これらは証明書タイプを判断するNetscapeのための設定です。

/var/ssl/openssl_server.cnf

[ usr_cert ]
nsCertType = server

修正したファイルを
/var/ssl/openssl_server.cnf
と別名で保存します。

Netscapeでは X.509 v3 証明書の独自拡張nsCertTypeが使用されており、それらを有効にせず生成された証明書をNetscapeにインストールした場合、落ちてしまいます。
CA局が別ホストにある場合は、この newreq.pem (署名要求書CSR) をCA管理者に渡します。

同一ホストにCAがある場合は、先程のメールサーバーカレントディレクトリ
/etc/mail/certs で以下を実行します。この時、OpenSSLを操作しているのはCA管理者です。

# cd /etc/mail/certs
# openssl ca -config /var/ssl/openssl_server.cnf -policy policy_anything -out cert.pem -infiles newreq.pem

Enter PEM pass phrase:**************** ←パスフレーズを入力
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Aichi'
localityName :PRINTABLE:'Nagoya'
organizationName :PRINTABLE:'Creative.Unit.ZERO'
commonName :PRINTABLE:'mail.mydomain.net'
emailAddress :IA5STRING:'korogi@mydomain.net'
Certificate is to be certified until Jul 7 10:46:50 2002 GMT (365 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

証明書署名要求の内容が正しければ Y
コミットするかに対し Y

この作業によりCA局にデータベースとして登録され、以下の証明書が発行されます。

/etc/mail/certs/cert.pem

CAが別ホストにある場合はこのcert.pemをサーバー管理者に渡すことになります。先にも述べましたが、Mailサーバーや、WebサーバーなどでSSL による暗号路を確保する場合、これらの作業は共通しています。ただし、サーバーのタイプによってcert_typeが異なるのでサーバー証明書を作成する度に openssl.cnfの調整は必要です。

クライアント認証に必要な証明書

クライアントに対して証明書の発行を行う場合、つまり、クライアント認証を行うための証明書を発行する場合も作業自体は共通しています。ただし、クライアントの環境によって、サーバー証明書と同様、目的に合わせて openssl.cnf を修正し、作業を行う必要があります。

例えば、NetscapeMailクライアント(Smtpサーバー)を利用するユーザーのためのクライアント証明書は専用の証明書を発行しなければ互換性の問題で使えません。

クライアント認証に関しては、それぞれのSSLサーバー構築のページで説明しています。

bottom_mark
ページ最上部
ページ最上部 前のページ