なんかてきとうに

わりと個人的な忘備録的ですよ。

お勉強

OpenSSL その2

OpenSSLの認証局作成スクリプトを眺めてみる。

OpenSSLで認証局を作るには CA という便利スクリプトが用意されています。

私の環境だとLinuxでは CA Windows では CA.pl でした。

Linux は CentoOS6.5 なのですが

yum install openssl

でインストールすると

/etc/pki/tls/misc/CA

にあります。

WindowsWindows用バイナリをインストールすると

openssldir/bin/CA.pl

あたりにあります。

CA スクリプトの主なオプションは

-newca -newreq -newcert -newreq-nodes -sign -verify

です。

-newreq

openssl req -new -keyout newkey.pem -out newreq.pem $DAYS

-newcert

openssl req -new -x509 -keyout newkey.pem -out newcert.pem $DAYS

-newreq-nodes

openssl req -new -nodes -keyout newreq.pem -out newreq.pem $DAYS

-sign

openssl ca $SSLEAY_CONFIG -policy policy_anything -out newcert.pem -infiles newreq.pem

-verify

openssl verify -CAfile $CACERT newcert.pem

みたいな感じで

openssl のオプションを入力する手間を省くためのwrapperです。

$DAYSは標準で1年です スクリプト実行時に $DAYS=-days 3650 みたいに環境変数で与えてやるとその日数になります。

これを見るとどうも -newreq-nodes がおかしいような気がするのはきのせいですかね

openssl-1.0.1e-30.el6_5.2.i686 なのですが。

と思いつつwindowsスクリプトを見てみると……

CA.pl ではなおってますね。

-newreq-nodes

openssl req -new -nodes -keyout newkey.pem -out newreq.pem $DAYS

まぁこのあたりは普通はCA使わずに opensslコマンドを打つよねってことでしょうか。

前置きはここまでにして

CAの作成

/etc/pki/tls/misc/CA -newca

これで作成できます。

認証局の公開鍵/秘密鍵を作成しますので、まずパスフレーズを聞かれます。

その後自己証明書を作成しますのでリクエストファイル作成時に聞かれるような

Country Name (2 letter code() [XX]: (国コード2文字で JPとか)

State or Province Name (full name) : (日本だと都道府県名あたり)

Locality Name (eg, city) [Default City]: (市町村名あたり)

Organization Name (eg, company) [Default Company Ltd]: (組織名)

Organizational Unit Name (eg, section) : (部署名)

Common Name (eg, your name or your server's hostname) : (FQDNとかですかね、認証局ですし。内部だけで使うならhostnameでも良いとおもいますが)

Email Address : (管理者のメールアドレス admin@company.comとか?)

あたりをそれなりに入力すると

$CATOP (/etc/pki/CA) にいろいろファイルやディレクトリが作られて完成です。

CAで証明書の作成

ユーザさんからリクエストファイル(csrファイル) をもらってきてnewreq.pemにリネームします。

/etc/pki/tls/misc/CA -sign

とやれば途中、CAの秘密鍵パスフレーズを聞かれるので入力すると

証明書 (newcert.pem) が出来上がります。

証明書を作成するときの openssl.conf

上でさらっと書いてますが、証明書の作成にあたっては、ルールを設定できます。

といっても、CAスクリプトを使う場合は -policy policy_anything と決めうちで設定されているのであんまり意味がありませんが。

openssl ca -config pathtoopenssl.conf -policy policy_name -out newcert.pem -infiles newreq.pem

とか自分でコマンドを打つときくらいですね。

pathtoopenssl.conf に openssl.confファイルを

policy_name に openssl.conf の中の設定したいpolicyを

記載してください。

どちらも無いと標準設定を使用します。 (/etc/pki/tls/openssl.conf と policy_match)

openssl.confの

policy = policy_match

[ policy_match ]

countryName = match

stateOrProvinceName = match

organizationName = match

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

このあたりです。

この設定(標準)だと

国名、都道府県名、会社名 が一致して、commonName(FQDN かなにか) が空でないこと

が証明書発行の条件になってますね。

標準で用意されてるポリシーはもう1個あって

[ policy_anything ]

countryName = optional

stateOrProvinceName = optional

organizationName = optional

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

という、commonNameがあれば何でも発行しますよというやつです。

こっちを標準で使いたければ

policy = policy_anything

に書き換えればいいです。

ポリシーは自分で自由にセクション作って追加もできるので実情に合わせて作ればいいんじゃないかなと思います。