作成 2010.03.12
更新 2019.10.16
OpenSSL コマンドメモ
SHA-2 に対応
目次
共通
秘密鍵の作成
証明書署名要求 (CSR) の作成
俺様証明書を作成する場合
自己認証局の作成
自己証明書の作成
Windows の証明機関から貰ってくる場合
証明機関の構築
証明書の取得
取得した証明書を変換
その他
パスフレーズの解除
証明書の検証
証明書の内容の確認
PKCS12(pfx) ファイルの作成
PKCS12(pfx) ファイルの分離
キーと証明書の突合
実際にSSL接続して現在の証明書を確認する
共通
秘密鍵の作成
例の場合は鍵長を 4096bit に指定している。
$ openssl genrsa -out server_pem.key.org 4096
暗号化する場合は -des3 を追加する。
パスフレーズを求められる。
$ openssl genrsa -des3 -out server_pem.key.org 4096
証明書署名要求 (CSR) の作成
例の場合は、SHA256 (SHA-2) の証明書署名要求を作成する。
ここで作ったものを証明機関へ提出し、証明書と(もしあれば)証明書チェーンをもらう。
設定内容は日本語を指定しない方が無難。
$ openssl req -new -sha256 -key server_pem.key -out server_pem.csr
ccTLD を指定する。日本なので JP。
ちなみに GB は United Kingdom of Great Britain and Northern Ireland です。つまりイギリス。
Country Name (2 letter code) [GB]:JP
県名
State or Province Name (full name) [Berkshire]:Osaka
市区町村
Locality Name (eg, city) [Newbury]:Osaka
組織名
Organization Name (eg, company) [My Company Ltd]:Upken
部署名
Organizational Unit Name (eg, section) []:System
証明したいホストを FQDN で指定する。
*.upken.jp のようにワイルドカードで指定すると、www1.upken.jp, www2.upken.jp のように複数のサーバーで共用できる。
Common Name (eg, your name or your server's hostname) []:hostfqdn.upken.jp
それ以降は何も入れない
Email Address []:
A challenge password []:
An optional company name []:
</div>
俺様証明書を作成する場合
検証用やローカル ネットワークで使用します。
Webには公開しないでください。
自己認証局の作成
CentOS の場合は以下から実行する。
デフォルトでは各ディレクトリの指定が相対参照になっているため実行ファイルのディレクトリに移ってから実行する。
# cd /etc/pki/tls/misc
# ./CA -newca
証明書で使用されるのは以下の2つ。cacert.pem は公開してよい。
/etc/pki/CA/cacert.pem
/etc/pki/CA/private/cakey.pem
自己証明書の作成
CentOS の場合は以下の方法で実行する。
cacert.pem, server_pem.crt, server_pem.key を実際のサーバーで使用する。
# cd /etc/pki/tls/misc
# openssl ca -config ../openssl.cnf -in server_pem.csr -out server_pem.crt
もし、以下のようなエラーメッセージで失敗した場合は、
failed to update database
TXT_DB error number 2
いったん revoke し、再度実行するとうまくいく。
# openssl ca -revoke /etc/pki/CA/newcerts/xxxxxxxxxxxxxxx.pem
Windows の証明機関から貰ってくる場合
証明機関の構築
Windows Server 2008 以降は、証明機関を構築するのに Active Directory が必須になっている。
Active Directory ドメイン サービス
DNS サーバー
そのうえで、以下の役割を追加する。
Active Directory 証明書サービス
Web サーバー
構築しただけでは Windows 以外からの証明書要求を受け付けないので追加で以下の設定を施す。
  1. [管理ツール] - [インターネット インフォメーション サービス (IIS) マネージャー]
  2. (ホスト名) - [サーバー証明書] を開き、ホストの FQDN のある証明書があることを確認する
    もし無い場合は、右ペインの [ドメイン証明書の作成] から証明書を取得する
  3. (ホスト名)/サイト/Default Web Site - 右ペインの [バインド]
  4. https を追加する
    追加する際に、FQDN の証明書を指定する
証明書の取得
  1. https://hostname.domain.tld/certsrv/
    管理者権限でログインする
  2. [CA 証明書、証明書チェーン、または CRL のダウンロード]
  3. DER で [CA 証明書のダウンロード] cacert_der.cer が取得できる。
  4. ホームに戻り、[証明書を要求する] - [証明書の要求の詳細設定] - [Base 64 エンコード CMC または PKCS #10 ファイルを使用して証明書の要求を送信するか、または Base 64 エンコード PKCS #7 ファイルを使用して更新の要求を送信する。]
  5. server_pem.csr をテキストで開き、コピー & ペースト - 証明書テンプレートは [Web サーバー] - [送信]
  6. DER エンコードで証明書と証明書チェーンをダウンロードする
    file_der.cer と file_der.p7b が取得できる。
取得した証明書を変換
cacert_pem.crt, server_pem.crt, chain_pem.crl, server_pem.key を実際のサーバーで使用する。
コマンドはエラー以外表示されない。
$ openssl x509 -inform der -in cacert_der.cer -outform pem -out cacert_pem.crt
$ openssl x509 -inform der -in file_der.cer -outform pem -out server_pem.crt
$ openssl pkcs7 -inform der -in file_der.p7b -outform pem -out chain_pem.crl
その他
パスフレーズの解除
起動時にパスフレーズを求められないようにする。
証明書を取得後にこの操作を行っても問題ない。
サーバー運用上の問題が起こってから実施判断するのが良いと思われる。
Windows Server 2012 R2 の時点では、インポートする場合は必ずパスフレーズを解除する必要がある。
$ openssl rsa -in server_pem.key.org -out server_pem.key
証明書の検証
$ openssl verify -CAfile cacert_pem server_pem.crt
チェイン証明書が必要な場合はディレクトリで指定する。
$ openssl verify -CApath /etc/pki/certs/ server_pem.crt
チェイン証明書はCA証明書と結合して検証もできる
$ cat chain_pem.crl cacert_pem.crt > ca-bundle.pem
$ openssl verify -CAfile ca-bundle.pem server_pem.crt
証明書の内容の確認
$ openssl x509 -in server_pem.crt -text
PKCS12(pfx) ファイルの作成
キーファイルと証明書を結合して PKCS12 ファイルを作成する。
$ openssl pkcs12 -export -in server_pem.crt -inkey server_pem.key -out bundle.pfx
CA証明書も入れて作成できる。チェイン証明書は事前にCA証明書に cat で結合しておく。
$ openssl pkcs12 -export -in server_pem.crt -inkey server_pem.key -certfile ca-bundle.pem -out bundle.pfx
PKCS12(pfx) ファイルの分離
秘密鍵の取り出し
openssl pkcs12 -in bundle.pfx -nocerts -nodes -out server_pem.key
証明書の取り出し
openssl pkcs12 -in bundle.pfx -clcerts -nokeys -out server_pem.crt
中間証明書の取り出し
openssl pkcs12 -in bundle.pfx -cacerts -nokeys -out ca-bundle.pem
キーと証明書の突合
同じMD5ハッシュ値が得られたら正常。
$ openssl x509 -noout -modulus -in server_pem.crt | openssl md5 ;\
  openssl rsa -noout -modulus -in server_pem.key | openssl md5
実際にSSL接続して現在の証明書を確認する
$ openssl s_client -connect server_fqdn:port
タグ: Linux OpenSSL

©2004-2017 UPKEN IPv4