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 -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
  1. 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
  1. Chromeインポート用に証明書を変換する(拡張子指定でインポートできるようになるだけで、中身は同じもの)
openssl x509 -in server-crt.pem -out server-crt.cer
  1. server-crt.cerをChromeで信頼されたルート証明機関にインポートする(詳細な手順は記事下の「ChromeにCA証明書を信頼させる手順」を参照)
  2. Chromeを再起動する

参考

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

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

プライバシーエラー

準備

  1. /etc/ssl/openssl.cnfを作業フォルダに任意の名称(今回はmyopenssl.cnf)でコピーする

cp /etc/ssl/openssl.cnf ./myopenssl.cnf
  1. 内容を環境に合わせて書き換える(今回は次のように書き換え)

修正前
certificate    = $dir/cacert.pem     # The CA certificate
修正後
certificate    = $dir/certs/ca-crt.pem     # The CA certificate
修正前
private_key    = $dir/private/cakey.pem# The private key
修正後
private_key    = $dir/private/ca-key.pem# The private key
  1. 次のフォルダを作成する
    • 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
  1. demoCA/serialファイルを作成し、内容をテキストで01と記述する
  2. demoCA/index.txtファイルを作成する。内容は空
  3. demoCA/index.txr.attrファイルを作成する。内容は空

CA証明書の作成

以下のコマンドを実行することで、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. プライバシーとセキュリティ>セキュリティ
  3. 証明書の管理
  4. インポート
  5. 次へボタン
  6. 作成したca-crt.cerを選択し、次へボタン
  7. 証明書をすべて次のストアに配置する>参照ボタン>信頼されたルート証明機関を選択>次へボタン
  8. 完了ボタン
  9. はい
    証明書ダイアログ>信頼されたルート証明機関に追加した発行先があることを確認
  10. Chromeを再起動する

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

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にするのが大事
  • -subjCA証明書と一致の場合、エラーになる
    (ここでは、OU=ALLを指定していない)
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

関連コンテンツ

スポンサードリンク

Comment

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