OpenSSL メモ

#openssl#ca#ssl

fuji44

OpenSSL メモ

ユースケース

秘密鍵と公開鍵をPKCS#12(pfx)形式に変換する

既に秘密鍵(key)、公開鍵(証明書ともいう。crt or cer)を持っている場合、OpenSSLでPFXファイルに変換できます。

秘密鍵、公開鍵形式からPKCS#12(pfx)形式への変換方法

openssl pkcs12 -export -inkey sample_private.key -in sample.crt -out sample.pfx

CSRの内容を確認する

openssl req -noout -text -in sample.csr

CAを設定する

今回はCAのディレクトリ構造を一から作る。

mkdir ca
mkdir ca/certs
mkdir ca/crl
mkdir ca/newcerts
mkdir ca/private
touch ca/index.txt
echo "01" > ca/serial

次に元のコンフィグファイルをコピーしてコンフィグファイルを作る。

cp /usr/lib/ssl/openssl.cnf ./

CAにかかわる部分だけ書き換えた。詳細は後述。

  • 各パスを直前に作成したものに変更。
  • certificateprivate_key は事前に作成していたCA用の証明書(公開鍵)と秘密鍵を指定する。
  • SANなどX509のパラメータを有効にしたい場合は、 copy_extensions = copy をコンフィグファイルで有効にしておく。

これでとりあえずCAは使えるようになる。 openssl ca コマンド実行時に作成したコンフィグファイルを指定すること。

[ CA_default ]
dir              = ./ca      # Where everything is kept
certs            = $dir/certs        # Where the issued certs are kept
crl_dir          = $dir/crl      # Where the issued crl are kept
database         = $dir/index.txt    # database index file.
new_certs_dir    = $dir/newcerts     # default place for new certs.
certificate      = $dir/ca-maruino.crt   # The CA certificate
serial           = $dir/serial       # The current serial number
crlnumber        = $dir/crlnumber    # the current crl number
crl              = $dir/crl.pem      # The current CRL
private_key      = $dir/private/ca-maruino.key# The private key
x509_extensions  = usr_cert      # The extensions to add to the cert
name_opt         = ca_default        # Subject Name options
cert_opt         = ca_default        # Certificate field options
copy_extensions  = copy
default_days     = 3650          # how long to certify for
default_crl_days = 30            # how long before next CRL
default_md       = default       # use public key default MD
preserve         = no            # keep passed DN ordering
policy           = policy_match

...

[ usr_cert ]
basicConstraints       = CA:FALSE
nsComment              = "OpenSSL Generated Certificate"
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer

CSRを署名する方法

事前にCAの設定を済ませていないと実行できない。

openssl ca -config openssl.cnf -in sample.csr -days 365 -out sample.crt

デフォルトのコンフィグファイルを使用する場合は、 -config は必要ない。 国、都道府県などが認証局と一致しているかを見ない場合、 -policy policy_anything を指定する。

資料

コマンドリファレンス

解説