Shammer's Philosophy

My private adversaria

独自のCA環境を構築する - OpenSSL設定ファイル編

「独自のCA環境を構築する - 環境作成編」の手順で、OpenSSLを実行するためのディレクトリ構造はできあがった。
実際に、OpenSSLでX509証明書を作る際には、コマンド実行時に設定ファイルを定義し、そのファイルの設定に基づいて証明書が作られる。

[ca]
default_ca = MyOwnRootCA
[MyOwnRootCA]
dir = ~/MyOwnRootCA
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial
default_crl_days = 7
default_days = 365
default_md = md5
policy = MyOwnRootCA_policy
x509_extensions = certificate_extensions
[MyOwnRootCA_policy]
countryName = supplied
stateOrProvinceName = supplied
organizationName = supplied
organizationalUnitName = optional
commonName = supplied
emailAddress = supplied
[certificate_extensions]
basicConstraints = CA:false

まず、前半部分は昨日の手順で作成したディレクトリ構造を指定する。
default_crl_daysキーは、CRL(証明書失効リスト)の間隔を指定する。
default_daysは、発行された証明書の有効期間を日数で指定する。
default_mdは、発行された証明書とCRLへの署名に使用するメッセージダイジェスト
アルゴリズムを指定する。md5,sha1,mdc2のいずれかを指定できる。

policyは、デフォルトのpolicyで使用するセクションを指定する。
上記例だと、MyOwnRootCA_policyとなっているので、[MyOwnRootCA_policy]で定義されているポリシー内容が使用される。
suppliedで定義されたものは省略不可能。証明書作成時に、絶対にこの情報を証明書に含めなければならない、という情報。
CSRに含まれる情報であっても、ここに存在していないものは省かれる。

そして、X509V3の証明書を作るのに必要なのが、「x509_extensions」の情報。
このセクション(上記例の場合はcertificate_extensions)が存在していない場合は、X509V1の証明書になってしまう。
セクションの中身が空であっても、これは付けた方がよさそう。上記例だと、CA:falseとして指定されており、
この証明書が他の証明書を署名することができないことを意味する。逆に、CA:trueとして定義されていれば、
その設定情報を使用して作成された証明書はCAとして機能できることを意味する。
独自のCAを構築する際には、CA:trueとして自己署名した証明書を作成して、その証明書を利用して
他の証明書を署名していく、という流れになる。