お勉強
OpenSSL その2
OpenSSLの認証局作成スクリプトを眺めてみる。
OpenSSLで認証局を作るには CA という便利スクリプトが用意されています。
私の環境だとLinuxでは CA Windows では CA.pl でした。
Linux は CentoOS6.5 なのですが
yum install openssl
でインストールすると
にあります。
Windows は Windows用バイナリをインストールすると
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 なのですが。
CA.pl ではなおってますね。
-newreq-nodes
openssl req -new -nodes -keyout newkey.pem -out newreq.pem $DAYS
まぁこのあたりは普通はCA使わずに opensslコマンドを打つよねってことでしょうか。
前置きはここまでにして
CAの作成
これで作成できます。
認証局の公開鍵/秘密鍵を作成しますので、まずパスフレーズを聞かれます。
その後自己証明書を作成しますのでリクエストファイル作成時に聞かれるような
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にリネームします。
とやれば途中、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
に書き換えればいいです。
ポリシーは自分で自由にセクション作って追加もできるので実情に合わせて作ればいいんじゃないかなと思います。