OpenSSL Configuration Manual

目次

opensslを用いればCA(認証局)や証明書を作ることができる。 手順を大雑把に記録しておく。

HTTPS通信関連はApacheのところに書きます。 Apacheでの証明書認証も書きたいねぇ

項目について

細かく書いていくのは大変だな・・・ がんばります。

項目略称一言解説
CNCommon Nameの略
OUOrganization Unitの略所属している組織の部署
OOrganization nameの略所属している組織名
LLocality nameの略住んでいる町のことだね
SState or province nameの略都道府県名のことかな
CCountryの略国名
EEmailの略Eメールアドレス

コンフィグファイルの作成

opensslではコンフィグファイルがとても重要である。 ちなみにコンフィグファイルは1つ設定し、使いまわすよりも、 CA・クライアント証明書・サーバ証明書の3種類を用意したほうが便利である。 SSLで使用するファイルを格納するディレクトリを作る

mkdir /home/ca

デフォルトのopenssl.cnfをコピーする

cp /usr/share/ssl/openssl.cnf /home/ca/openssl.conf.ca
cp /usr/share/ssl/openssl.cnf /home/ca/openssl.conf.client
cp /usr/share/ssl/openssl.cnf /home/ca/openssl.conf.server

内容のサンプルをこのページに添付してある。

ちなみになぜClient証明書とServer証明書のコンフィグファイルを分けたかというと 以下の1点を間違いやすいからである

nsCertType? = server

これは証明書の使用目的のようなものを指定するのであるが、 文字のとおりserverはWebやその他のホスト側で使う証明書であることが明記されている。 一方クライアントは

nsCertType? = client, email, objsign

このように表記され、ゲスト側の認証証明書として使用されることが明記されている。 これを間違って設定すると正しい認証が行われない。 しかーし!IEではこの値は見ないため間逆な設定の証明書でも使えてしまう。 一方NetscapeやMozilla・最近流行のFireFox?などではエラーが表示され認証をキャンセルされてしまうのでご注意を・・・ 私はこのミスを何度か繰り返したため、ClientとServerの証明書を分けることを決意。 頭のいい方なら、その都度修正して使っていただいたほうがいいのかもしれません。

CAの構築

CA作成の前準備

/usr/share/ssl/misc/CAに以下の内容を追加

SSLEAY_CONFIG="-sha1 -config /home/ca/openssl.conf.ca"  <==追加
REQ="openssl req $SSLEAY_CONFIG"
CA="openssl ca $SSLEAY_CONFIG"
VERIFY="openssl verify"
X509="openssl x509"

この一行を追加しなければCAの証明書でsha1を使うことができない。 また、Configファイルを指定することで、指定ミスをなくす。

久しぶりにCAを作成しようと思ったら、上記では対応できなかった。 試しに、sha512を使用した証明書を作成する場合には、 CAファイルの中を修正する必要がある。

CADAYS="-days 3650"     # 3 years
SSLEAY_CONFIG="-config /root/ca/openssl.cnf.ca"
REQ="$OPENSSL req $SSLEAY_CONFIG"
CA="$OPENSSL ca $SSLEAY_CONFIG"
VERIFY="$OPENSSL verify"
X509="$OPENSSL x509"
PKCS12="openssl pkcs12"

少し飛んで・・・

echo "Making CA certificate ..."
$REQ -new -sha512 -keyout ${CATOP}/private/$CAKEY \
-out ${CATOP}/$CAREQ
$CA -create_serial -md sha512 -out ${CATOP}/$CACERT $CADAYS -batch \
-keyfile ${CATOP}/private/$CAKEY -selfsign \
-extensions v3_ca \
-infiles ${CATOP}/$CAREQ
RET=$?

直接コマンドのところへメッセージダイジェストのパラメータを入れる必要がある。

CAの作成

cd /home/ca
/usr/share/ssl/misc/CA -newca

作成したCAは/home/ca/demoCAディレクトリ以下に格納される

クライアント証明書の作成

リクエストファイルの作成

第一段階としてCSR(Certificate Signing Request)という証明書署名要求を作成する。 この要求に基づき、CAは証明書に署名する。

openssl req -new -keyout privkey.key -out new.req -config openssl.conf.client

このコマンドを実行することでprivkey.keyという秘密キーとnew.reqというリクエストファイルが作成される。

リクエストファイルに対する署名

クライアントから渡されたリクエストに対し、CAは署名をしてクライアントにキーを返す。 実際には改行しない

openssl ca -in new.req -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem 
-out new.cer -config openssl.conf.client

PEM形式へのエンコード

出力されたファイルはテキスト形式のため、PEM形式へ変換する。 以下のコマンドを実行

openssl x509 -in new.cer -inform PEM -out new.pem

これでクライアント証明書ファイルの出来上がり。 作成した証明書の詳細を見るためには以下のコマンドを実行。

openssl x509 -text -in new.pem

PKCS12ファイルの作成

クライアント証明書としてPKCS12ファイルを作っておくと、Windowsではかなり便利。

openssl pkcs12 -export -inkey privkey.key -in new.pem -certfile demoCA/cacert.pem -out new.pfx

サーバ証明書の作成

リクエストファイルの作成

基本的にはクライアント証明書作成手順と同じ。 コンフィグファイルが違うだけである。

openssl req -new -keyout privkey2.key -out new2.req -config openssl.conf.server

リクエストファイルに対する署名

こちらもクライアント証明書作成と同じ。 実際には改行しない。

openssl ca -in new2.req -keyfile demoCA/private/cakey.pem -cert demoCA/cacert.pem 
-out new2.cer -config openssl.conf.server

PEM形式へのエンコード

こちらもPEM形式へ変換する。

openssl x509 -in new2.cer -inform PEM -out new2.pem

これでサーバ証明書ファイルの出来上がり。

秘密キーのパスフレーズを埋め込む

本来秘密キーを使う場合には設定したパスフレーズを入力する必要があるが、場合によっては秘密キーを埋め込まなければ認証がうまくいかないケースがある。 そのため、作成した証明書に秘密キーを埋め込んでしまい、使用する際にパスフレーズを入力しないで使えるようにする。

openssl rsa -in privkey2.key -out privkey2.key

基本的にApacheやPOP over SSL/TLS等で使用する際にはパスフレーズを解除しておく必要がある。 設定次第ではパスフレーズを解除しなくてもよい方法もある。適宜判断してパスフレーズをクリアーして欲しい。ちなみに証明書を更新する際には、このパスフレーズを解除し忘れて混乱するケースが多発した。 (^-^;;

CRLの作成

証明書の失効

秘密鍵が洩れてしまったり、証明書を作り直したい場合などには、現在使われている証明書を失効しなければならない。

openssl ca -gencrl -revoke new.pem -config openssl.conf.ca

有効期限が切れた証明書の失効

証明書のDBは有効期限が切れていたとしても自動的にその情報が更新されるわけではありません。有効期限が切れた証明書を失効させるためには次のコマンドを実行し証明書データベースを更新(update)する必要があります。

openssl ca -updatedb -config conf/openssl.conf.ca

CRLの作成

openssl ca -gencrl -out crl.pem -config openssl.conf.ca

証明書の更新

ルート証明書の更新

openssl req -new -x509 -nodes -sha1 -days 3650 -in privkey.key.pem -key demoCA/private/cakey.pem
-out new.req -config openssl.conf.ca

クライアント・サーバ証明書の更新

基本的に古い証明書を失効させ、新しい証明書を作り直せばいい。

参考リンク


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-01-01 (日) 20:55:37 (2673d)