Edited at

OpenSSLでよく使うコマンド

More than 1 year has passed since last update.


概要


前提条件


  • SSLサーバ証明書の発行にあたり、必要なコマンドをまとめます。

  • 作成した内容が正しいか等、要所要所で確認を行うためのコマンドをまとめます。

  • SSLサーバ証明書は外部のCA局(Certificate Authority)で発行してもらうこととします。自己署名証明書(≒オレオレ証明書)は利用しません。

  • 「SSLサーバ証明書」という語で、Internet上で公開するWebサーバにインストールするX.509準拠の証明書、を指すこととします。プロトコルとしてのSSLは既に利用されていませんが、慣習上からこう呼ぶことにします。

  • 「SSLサーバ証明書」を、単に「証明書」と記述することもあります。


重要な知識


  • CSR(Certificate Signing Request)は大きく二つの要素、「サーバの公開鍵」及び「サーバ運営者の情報」で構成されています。

  • SSLサーバ証明書とは、CSRに対してCA局の電子署名を付与したものとなります。

  • 原則、CA局の秘密鍵が分からない限り、SSLサーバ証明書の内容を改ざんすることは出来ません。

  • 鍵ペアという観点から見ると、秘密鍵は秘密鍵ファイルに、公開鍵はCSRファイル/証明書ファイルに記録されます。

  • ファイルに保存する際の形式・拡張子については下記記事がとても参考になります。この内容は必ず押さえておきましょう。

  • http://qiita.com/kunichiko/items/12cbccaadcbf41c72735

  • Modulusとは、簡単に言うと公開鍵・秘密鍵の積です。


想定するフロー

下記のフローに則る形で、OpenSSLの各コマンドを記述します。


  1. 秘密鍵とCSRを作成します。

  2. CSRの内容を確認します。

  3. 鍵の対称性を確認します。

  4. 秘密鍵が破損していないことを確認します。

  5. CA局に発行してもらったSSLサーバ証明書の内容を確認します。


OpenSSLコマンド


CSR・秘密鍵新規作成

$ openssl req -newkey rsa:2048 -keyout encrypted_privkey.pem -rand file:/dev/urandom

秘密鍵を併せて新規に作成し、「encrypted_privkey.pem」として保存します。

ランダムシードとして、「/dev/urandom」を利用します。

作成されたCSRは、標準出力に出力されます。


CSR内容確認

$ openssl req -in csr_filename.pem -text -noout

作成したCSRが正しいかどうかを確認します。通常は下記の項目を確認します。

これは、Webサーバにアクセスしてきたクライアントにて、当該サーバ証明書が妥当なものかどうかをチェックする情報となります。

具体的には、アクセス先のドメイン名とSSLサーバ証明書のドメイン名が一致しているかを確認するための情報となります。

- Subject: CN=example.com

- X509v3 extensions: X509v3 Subject Alternative Name: DNS:example.com


秘密鍵パスフレーズ解除

$ openssl rsa -in encrypted_privatekey.pem > decrypted_privatekey.pem

通常は、秘密鍵をWebサーバにインストールする場合、秘密鍵ファイルのパスフレーズは解除しておきます。

パスフレーズが分からない場合、Webサーバは秘密鍵の内容を取得できないためです。


CSR/証明書と秘密鍵の対称性確認(Modulusの確認)

公開鍵となるCSR/証明書と、秘密鍵が一致しているかどうかは、Modulusという値を確認することで判断することが出来ます。

CSR/証明書と、秘密鍵のModulusが一致すれば、その両者はペアであるということが言えます。


CSRのModulusを確認

$ openssl req -in csr_filename.pem -modulus -noout


SSLサーバ証明書のModulusを確認

$ openssl x509 -in cert_filename.pem -modulus -noout


秘密鍵のModulusを確認

$ openssl rsa -in decrypted_privatekey.pem -modulus -noout


秘密鍵が破損していないことの確認

$ openssl rsa -in decrypted_privatekey.pem -check -noout


SSL証明書内容確認

$ openssl x509 -in cert_filename.pem -text -noout

これもCSRと同様、まずは下記の項目を確認します。

クライアントとなるWebブラウザにて、アクセスしたドメイン名と一致しているかどうかの確認に利用されます。


  • Subject: CN=example.com

  • X509v3 extensions: X509v3 Subject Alternative Name: DNS:example.com

また、Subjectは基本的にはWebサーバの運営者情報となります。

これはアクセスしたユーザ(=人間)が必要に応じて参照し、信頼できる組織がWebサーバを運営しているかどうかを判断するための情報となります。

EV SSL証明書の場合、アドレスバーの横に運営組織名が表示されますが、これは「O」の内容が利用されます。


  • Subject: C=JP, ST=Tokyo, L=Taito-ku, OU=Business Innovation Center, O=Tech Fun corp., CN=example.com