Linux
certificate

証明書に関する各種操作

opensslのインストール

証明書に関する操作は主にopensslコマンドを利用するので、無ければインストールしておくこと。

コマンド
yum install openssl

秘密鍵にパスフレーズが設定されているか確認する

パスフレーズが設定されている秘密鍵は、例えばhttpdサービスとかだと起動時にパスフレーズを聞かれる。
その場合、いろいろと対処の必要が出てくるので事前に確認しておく。

コマンド
openssl rsa -in {秘密鍵ファイル}

パスフレーズが設定されていなければ実行結果は次のようになる。

実行例
# openssl rsa -in sample.key
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
英数記号の羅列...
-----END RSA PRIVATE KEY-----

秘密鍵と証明書に不整合がないか確認する

大量の証明書と秘密鍵を扱うような業務をしていると、ファイルを取り違ってしまう危険性がある。
万が一そんなことがあるとマズいのでペアが取れているか確認する。

コマンド
test `openssl rsa -in {秘密鍵ファイル} -modulus -noout | openssl md5 | cut -c 9-` = \
`openssl x509 -in {証明書ファイル} -modulus -noout | openssl md5 | cut -c 9-`; echo $?

上記コマンドで0が出力されれば整合、1が出力されれば不整合となる。

実行例
# test `openssl rsa -in sample.key -modulus -noout | openssl md5 | cut -c 9-` = \
`openssl x509 -in sample.crt -modulus -noout | openssl md5 | cut -c 9-`; echo $?
0

サーバー証明書なのか中間CA証明書なのかを判別する

サーバー証明書と中間CA証明書を両方渡されて、渡した側もどっちがどっちなのか分かっていない場合がある。
仕方がないので中身を見て判断する。もっと確実な方法があれば知りたい。

まずは証明書の中身を出力する。

コマンド
openssl x509 -text -noout -in {証明書ファイル}

サーバー証明書の場合、中身にそのサーバーのドメインが書かれている。

実行例(サーバー証明書)
# openssl x509 -text -noout -in sample.crt
X509v3 extensions:
  X509v3 Subject Alternative Name: 
    DNS:sample.com, DNS:sample.com ←このへんとか
  X509v3 Basic Constraints: 
    CA:FALSE
  X509v3 CRL Distribution Points: 
    ...

中間証明書の場合、中身に認証局の情報が書かれている。

実行例(中間CA証明書)
# openssl x509 -text -noout -in sample.crt
Signature Algorithm: sha256WithRSAEncryption
  Issuer: C=US, O=GeoTrust Inc., CN=GeoTrust Global CA  ←このへんとか
  Validity
    Not Before: Jun 11 22:02:59 2014 GMT
    Not After : May 20 22:02:59 2022 GMT
  Subject: C=US, O=GeoTrust Inc., OU=Domain Validated SSL, CN=GeoTrust DV SSL CA - G3
  Subject Public Key Info:
  ...

PFXファイルから証明書ファイル類を取り出す

証明書が欲しいといったらPFXで渡された場合の変換方法。

# openssl pkcs12 -in {PFXファイル} -clcerts -nokeys -out {証明書ファイル名}
# openssl pkcs12 -in {PFXファイル} -nocerts -nodes -out {秘密鍵ファイル名}
# openssl pkcs12 -in {PFXファイル} -cacerts -nokeys -out {中間証明書ファイル名}

調べたいことメモ

  • 自己署名証明書の作成方法
  • 秘密鍵のパスフレーズ解除方法