最近のWebアプリケーションの開発で、SSL通信でなければエラーが発生することが増えています。
DebianでSSL通信のテストプログラムを作成中に、Chromeで「保護されていない通信」のエラーが発生しました。本エラーは過去Chrome58での変更で「Common Name」から「Subject Alt Name」を参照するように変更されたため発生します。
2022年1月現時点でのDebianでの自己証明書の作成方法、パソコン、スマートフォンの証明書の登録方法を、整理していきます。
自己証明書の作成
自己証明書の作成
DebianでOpenSSLコマンドを使って自己証明書を作成するには以下のコマンドを実行します
本コマンドで作成された証明書は、自己署名した自己証明書となります
(別ファイルを使わず、1コマンドで作れるように工夫しました(意地))
sudo openssl req -new \
-x509 -out server.crt \
-newkey rsa:2048 -keyout server.key \
-days 3650 -sha256 \
-subj "/C=JP/CN=webserver" \
-addext "subjectAltName = DNS:webserver, IP:192.168.1.100" \
-nodes
コマンド名 オプション名 | 設定値 | 解説 |
---|---|---|
openssl req | – | 証明書要求(csr)や証明書(crt)を作成するコマンド |
-new | – | 証明書要求の新規作成 |
-x509 | – | 証明書作成モード これを指定しないと証明書要求の作成モードになる |
-out | ファイル名 | 出力する証明書ファイル名を指定 |
-newkey | rsa:2048 | 鍵の新規作成 RSA(暗号アルゴリズム)のビットサイズを指定 |
-keyout | ファイル名 | 出力する鍵ファイル名を指定 |
-days | 3650 | 証明書の有効日数を指定(例では約10年) |
-sha256 | ハッシュ関数 | 暗号化に使うハッシュ関数を指定 SHA3-256等も使える ちなみにオプション名は-digest |
-subj | “/C=JP/CN=…” | C:国名を2文字で記述 CN(Common Name):サーバ名やドメイン名を指定 上記の2つは必須。他に指定できる項目は下記の通り ST:州や県名 L:町名など O:組織や会社名 OU:部署名など emailAddress:メールアドレス |
-addext | “subjectAltName=…” | X.509拡張パラメータの設定 DNS:サーバ名(例:webserver)やドメイン名を指定 IP:サーバのIPアドレスを指定 |
-nodes | – | 鍵ファイルを暗号化しない(パスフレーズの設定・削除が不要) OpenSSL3.0以降では -noenc に変更されているので注意 |
自己証明書の確認
以下のコマンドで作成した証明書の内容が確認できます
openssl x509 -text -noout -in server.crt
以下は証明書の内容の一例です
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
Signature Algorithm: sha256WithRSAEncryption
Issuer: C = JP, CN = webserver
Validity
Not Before: Jan 24 08:33:58 2022 GMT
Not After : Jan 22 08:33:58 2032 GMT
Subject: C = JP, CN = webserver
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:a0:b0:00:00:00:00:00:00:00:00:00:00:00:00:
(長いので中略)
00:00
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
AA:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
X509v3 Authority Key Identifier:
keyid:AA:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Subject Alternative Name:
DNS:webserver, IP Address:192.168.1.100
Signature Algorithm: sha256WithRSAEncryption
e0:f0:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:
(長いので中略)
00:00:00:00
項目名 | 解説 |
---|---|
Version | バージョン3でないとX.509v3拡張機能が使えない |
Serial Number | 認証局が割り当てたシリアル番号 |
Signature Algorithm | 署名に使われた暗号アルゴリズム |
Issuer | 発行者(認証局) |
Validity | 有効期限 |
Subject | 主体者(証明の対象となるサーバ) |
Subject Public Key Info | 公開鍵の情報 |
X509v3 extensions | X.509v3拡張機能 ここで重要なのは X509v3 Subject Alternative Name に主体者のサーバ名やIPアドレスが入っている事 |
Signature Algorithm | 署名の暗号アルゴリズムと発行者の署名 |
自己証明書の登録
作成した証明書は認証局が自分自身のため、どこからも認証されておらずブラウザ上でエラーが発生します
以下の手順にてルート証明機関の証明書として登録し、SSL通信を有効にします
パソコン(Chrome)への登録
パソコンでChromeブラウザを開き、画面右上の3点ボタンをクリック
「設定」→画面左「セキュリティとプライバシー」→「セキュリティ」をクリック
下の方にスクロールすると「証明書の管理」があるのでクリック
証明書の管理画面が表示されたら「信頼されたルート証明機関」をクリックしてから「インポート」をクリック
インポートウィザード画面が開いたら「次へ」をクリック
「参照」をクリックし、作成した証明書ファイル(crt)を選択して「次へ」をクリック
証明書ストアは「信頼されたルート証明機関」のままで「次へ」をクリック
「完了」をクリックしてインポートを実行
自己署名証明書なのでセキュリティ警告が表示されますが、「はい」をクリック
「正しくインポートされました」と表示されたら「OK」をクリック
設定画面を閉じ、ブラウザのアドレスバーに「https://証明書を登録したサーバ名かIPアドレス」を入力して、ページが表示されれば作業完了です
パソコン(Edge)への登録
パソコンでEdgeブラウザを開き、画面右上の3点ボタンをクリック
「設定」→画面左「プライバシー、検索、サービス」をクリック
下の方にスクロールすると、セキュリティ設定内に「証明書の管理」があるのでクリック
証明書の管理画面が表示されます
以降の操作はChromeと全く同じ手順ですので、上記を参照ください
スマートフォン(Android)への登録
スマートフォンに登録する場合、予めSDカードまたはGoogleドライブに証明書(server.crt)を保存しておきます
スマートフォンの「設定」→「セキュリティ」→詳細設定の中「暗号化と認証情報」より、
「ストレージからインストール」または「SDカードからインストール」(Androidのバージョンによって異なります)を選びます
「SDカードからインストール」しか表示されていない場合でも、参照先として「Googleドライブ」が選択可能です
証明書ファイル(crt)を選択すると、本人確認(指紋認証等)後、「証明書の名前を指定する」画面が表示されます
「証明書名」にサーバ名(上記例では「webserver」)を入力して「OK」をタップ
登録した証明書は「信頼できる認証情報」→「ユーザー」タブ内で確認できます
なお、iOSへの証明書設定方法は下記の参考ページ等をご覧ください
(iOSの機器は未所持なので確認できませんでした)
下記のページが参考になります。