27
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenSSLでSSLサーバ証明書の検証をする方法

Last updated at Posted at 2018-10-18

はじめに

Webサーバへ設定するSSL/TLS証明書を設定する際、中間証明書やクロスルート証明書を設定する場合に、設定したい証明書が本当に正しいかを検証したいとき、OpenSSLを使用して検証する方法に手間取ったので備忘として記載。

用意するもの

  • サーバ証明書
  • 中間CA証明書
  • クロスルートCA証明書 (※必要な場合のみ)
  • ルートCA証明書

1. 証明書の準備

各種証明書を作業用ディレクトリに集めておきます。

$ ls -lR
.:
合計 8
drwxrwxr-x 2 kino8 kino8 4096 10月 18 23:12 cacerts       # (CA証明書用ディレクトリ)
-rw-rw-r-- 1 kino8 kino8 2195 10月 18 22:59 server.crt    # サーバ証明書

./cacerts:
合計 8
-rw-r--r-- 1 kino8 kino8 1647 10月 18 22:59 mid-ca.crt    # 中間CA証明書
-rw-r--r-- 1 kino8 kino8 1200  9月 28  2017 root-ca.crt   # ルートCA証明書

2. CA証明書へシンボリックリンクを張る

OpenSSLの仕様[(※)](## 備考:CA証明書のファイル名の規則)で、チェーン検証に使用するCA証明書は証明書ハッシュ値.0というファイル名でないと認識してくれないため各証明書にそれに応じたシンボリックリンクを作成します。

$ cd cacerts
$ ln -s mid-ca.crt "$(openssl x509 -hash -noout -in mid-ca.crt).0"
$ ln -s root-ca.crt "$(openssl x509 -hash -noout -in root-ca.crt).0"

最終的なディレクトリ内容

$ ls -lR
.:
合計 8
drwxrwxr-x 2 kino8 kino8 4096 10月 18 23:05 cacerts
-rw-rw-r-- 1 kino8 kino8 2195 10月 18 22:59 server.crt

./cacerts:
合計 8
lrwxrwxrwx 1 kino8 kino8   11 10月 18 23:05 2e5ac55d.0 -> root-ca.crt   # ルートCA証明書(リンク)
lrwxrwxrwx 1 kino8 kino8   10 10月 18 23:00 4f06f81d.0 -> mid-ca.crt    # 中間CA証明書(リンク)
-rw-r--r-- 1 kino8 kino8 1647 10月 18 22:59 mid-ca.crt
-rw-r--r-- 1 kino8 kino8 1200  9月 28  2017 root-ca.crt

3. 検証する

openssl verifyコマンドを使用して、サーバ証明書の検証を行います。
-CApathには、各CA証明書とリンクが格納されたディレクトリを指定します。

$ openssl verify -CApath ./cacerts server.crt

OKの場合

下記のようなOKのメッセージが出力されれば、-CApathでした配下にあるCA証明書で証明書チェーンに問題はないことになります。

server.crt: OK

NGの場合

下記のようなエラーが表示される場合は、チェーン検証に使用した中間orルートCA証明書が誤っているか、必要なCA証明書が不足していると思われます。

error 2 at 1 depth lookup:unable to get issuer certificate

補足:CA証明書のファイル名の規則

men verifyでマニュアルを確認すると、以下のように記載されています。

  -CApath directory
      A directory of trusted certificates. The certificates should have names of the form: hash.0 or
      have symbolic links to them of this form ("hash" is the hashed certificate subject name: see the
      -hash option of the x509 utility). Under Unix the c_rehash script will automatically create
      symbolic links to a directory of certificates.

検証用のCA証明書のファイル名は何でもよいというわけではなく、証明書のハッシュ値に.0という拡張子を付けたファイル名で保存するか、証明書へそのような名前を付けたシンボリックリンクを張る必要があるようです。

OpenSSLでは証明書のハッシュ値は以下のコマンドで計算が可能です。

$ openssl x509 -hash -noout -in 証明書ファイル名
27
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?