OpenSSLを使って自己署名証明書を作成する

OpenSSLを使って自己署名証明書を作成する手順です。サーバ証明書やルート証明書、Chromeで信頼させる場合などで少しづつ手順が異なるので覚え書き。
本記事の環境は次のとおりです。

  • Ubuntu 20.04.2 LTS
  • OpenSSL 1.1.1f

自己署名証明書を作成する

以下のようなコマンドを実行することで、SSL通信用の自己署名証明書を作成できます。

openssl genrsa -out server-key.pem 2048
openssl req -batch -new -key server-key.pem -out server-csr.pem -subj "/C=JP/ST=OSAKA/L=OSAKA/O=SAMPLE CORP/OU=DEV1/CN=192.168.0.8"
openssl x509 -req -in server-csr.pem -out server-crt.pem -signkey server-key.pem -days 366 -sha256

パスフレーズ付き

パスフレーズを設定したい場合はopenssl genrsaの指定を次のようにします。実行するとパスワードの入力を求められます。

openssl genrsa -aes256 -out ca-key.pem 2048

CSRの確認コマンド

openssl req -text -noout -in <CSR>

CRTの確認コマンド

openssl x509 -text -noout -in <CRT>

Chromeで信頼されたサイトにする (CAなし)

SAN(Subject Alternative Name)を設定した自己署名証明書を作成します。

  1. ホスト名を記述したテキストファイル(san.txt)を作成し、内容を次のように記述する。
    san.txt
    subjectAltName = DNS:sample.local
    
  2. OpenSSLのコマンドを使って自己署名証明書を作成する
    openssl genrsa -out server-key.pem 2048
    openssl req -batch -new -key server-key.pem -out server-csr.pem -subj "/C=JP/ST=OSAKA/L=OSAKA/O=SAMPLE CORP/OU=ALL/CN=sample.local"
    openssl x509 -req -in server-csr.pem -out server-crt.pem -signkey server-key.pem -days 366 -sha256 -extfile san.txt
    
  3. Chromeインポート用に証明書を変換する(拡張子指定でインポートできるようになるだけで、中身は同じもの)
    openssl x509 -in server-crt.pem -out server-crt.cer
    
  4. server-crt.cerをChromeで信頼されたルート証明機関にインポートする(詳細な手順は記事下の「ChromeにCA証明書を信頼させる手順」を参照)
  5. Chromeを再起動する

参考

CA証明書とサーバ証明書を作成する

CA証明書を作成し、そこからサーバ証明書を発行する方法です。この方法で作成した自己署名証明書は、Chromeで次のようなプライバシーエラーを表示しないようにしたり、iOS(記載の手順はiPad)でも信頼済みにすることができます。

プライバシーエラー

準備

  1. /etc/ssl/openssl.cnfを作業フォルダに任意の名称(今回はmyopenssl.cnf)でコピーする
    cp /etc/ssl/openssl.cnf ./myopenssl.cnf
    
  2. 内容を環境に合わせて書き換える(今回は次のように書き換え)
    • certificate
      • 修正前
        certificate    = $dir/cacert.pem     # The CA certificate
        
      • 修正後
        certificate    = $dir/certs/ca-crt.pem     # The CA certificate
        
    • private_key
      • 修正前
        private_key    = $dir/private/cakey.pem# The private key
        
      • 修正後
        private_key    = $dir/private/ca-key.pem# The private key
        
  3. 次のフォルダを作成する
    • demoCA
    • demoCA/certs
    • demoCA/crl
    • demoCA/newcerts
    • demoCA/private
    • server
    mkdir demoCA
    mkdir demoCA/certs
    mkdir demoCA/crl
    mkdir demoCA/newcerts
    mkdir demoCA/private
    mkdir server
    
  4. demoCA/serialファイルを作成し、内容をテキストで01と記述する
  5. demoCA/index.txtファイルを作成する。内容は空
  6. demoCA/index.txr.attrファイルを作成する。内容は空
フォルダをdemoCA以外にした場合はmyopenssl.cnfdirの値も書き換えてください。

CA証明書の作成

作業フォルダ(demoCAのひとつ上)で以下のコマンドを実行することで、CA証明書を作成できます。-subjの部分は自身の環境に置き換えてください。

export OPENSSL_CONF=myopenssl.cnf
openssl genrsa -out ./demoCA/private/ca-key.pem 2048
openssl req -new -key ./demoCA/private/ca-key.pem -out ./demoCA/certs/ca-csr.pem -subj "/C=JP/ST=OSAKA/L=OSAKA/O=SAMPLE CORP/OU=ALL/CN=sample.local"
openssl ca -in ./demoCA/certs/ca-csr.pem -out ./demoCA/certs/ca-crt.pem -selfsign -extensions v3_ca

iPadにCA証明書を信頼させる手順

次のコマンドを実行して、デバイスへインポートするCA証明書を作成します。

openssl x509 -outform deer -in ./demoCA/certs/ca-crt.pem -out ./demoCA/certs/ca-crt-ios.cer

作成した証明書を何らかの方法でデバイスに取り込みます。

メールで証明書を送った場合

  1. 受信メールから添付ファイルを選択 iPad CA証明書インポート手順
  2. 閉じる iPad CA証明書インポート手順

CA証明書を信頼設定する

  1. 設定>プロファイルがダウンロード…
  2. インストール
  3. 端末のパスコードを入力
  4. インストール
  5. 完了
  6. 設定>一般>情報
  7. 証明書信頼設定
  8. 対象のドメインを有効にする
  9. 続ける

ChromeにCA証明書を信頼させる手順

次のコマンドを実行して、ChromeへインポートするCA証明書を作成します。

openssl x509 -in ./demoCA/certs/ca-crt.pem -out ./demoCA/certs/ca-crt.cer
  1. Chromeの設定を開く Chromeに自己証明書を信頼させる
  2. プライバシーとセキュリティ>セキュリティ Chromeに自己証明書を信頼させる
  3. 証明書の管理 Chromeに自己証明書を信頼させる
  4. インポートボタン Chromeに自己証明書を信頼させる
  5. 次へボタン Chromeに自己証明書を信頼させる
  6. 作成したca-crt.cerを選択し、次へボタン Chromeに自己証明書を信頼させる
  7. 証明書をすべて次のストアに配置する>参照ボタン>信頼されたルート証明機関を選択>次へボタン Chromeに自己証明書を信頼させる
  8. 完了ボタン Chromeに自己証明書を信頼させる
  9. はい Chromeに自己証明書を信頼させる
    証明書ダイアログ>信頼されたルート証明機関に追加した発行先があることを確認
  10. Chromeを再起動する

CA証明書からサーバ証明書を作成

事前に作成していたserverフォルダにサーバ証明書を作成します。

mkdir server
openssl genrsa -out ./server/server-key.pem
openssl req -new -key ./server/server-key.pem -out ./server/server-csr.pem -subj "/C=JP/ST=OSAKA/L=OSAKA/O=SAMPLE CORP/CN=sample.local"
openssl ca -in ./server/server-csr.pem -out ./server/server-crt.pem -days 366 -extfile san.txt

ハマったポイントです。

  • openssl caにするのが大事
  • export OPENSSL_CONF=myopenssl.cnfを実行した状態で作成する
  • -subjCA証明書と一致の場合、エラーになる
    (ここでは、OU=ALLを指定していない)
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

関連コンテンツ

スポンサードリンク

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です