自己署名証明書(4)
~webブラウザに自己署名証明書をインストールする (Debian Stretch)~

2020/1/16


Debian Stretch + Chromium

Chromiumにルート証明書のインストールを試みるが、「信用されていない」サイトであることがバレています。
以下、その詳細
  1. Chromiumを開き、証明書の管理を開きます。
  2. [サーバ]を選び、インポートをクリックします。
    Chromium設定

  3. すでに入手してあるルート証明書(Microsoft Windows10で使用したもの)を選びます。
    Chromium設定

  4. インストールはすぐに終わります。なにもメッセージは出ません。画面にも変化はありません。
    Chromium設定

  5. Chromiumにルート証明書(オレオレ証明書)を「信用できるサーバー」としてインストールしようとすると、厳しい検査の末、ユーザーの証明書は「org-NITH」として「その他」の扱いとなります。「信用されていないwebserver.takahashi.lab」と表示されます。オレオレ証明書であることがバレバレです。
    Chromium設定

  6. 証明書を表示することができます。
    Chromium設定Chromium設定
  7. 詳細を見ても解決しません。
    Chromium設定

  8. このような証明書をインストールしても「保護されていない通信」となります。


  9. 後々の作業に支障があると嫌なので証明書(信頼されていないwebserver.takahashi.lab)は削除します。
    Chromium設定

認証局としてインストールしてみる

サーバーではないというので、認証局としてインポートを試みる。 以下、その詳細
  1. Chromiumを開き、証明書の管理を開きます。
  2. [認証局]を選び、インポートをクリックします。
    Chromium設定

  3. すでに入手してあるルート証明書(Microsoft Windows10で使用したもの)を選びます。
    Chromium設定

  4. 「ウェブサイトの識別で」にチェックマークを入れる。他はどうでもいいけど、全部にチェックマークを入れた。
    Chromium設定

  5. webserver.takahashi.labは認証局でないそうです。
    Chromium設定

調査

/etc/ca-certificates.confを見ると、ACCVRAIZ1やらAddTrustのアレコレやらAtosの何か等々大事なものが記述されている。
もしかして、ここに「オレオレ証明書」記述してすると信用してもらえるのではないだろうか?
よく見ると冒頭に色々とありがたいことが書かれている。
Chromium [設定]-[詳細設定]-[証明書の管理]-[認証局] /etc/ca-certificates.conf

# This file lists certificates that you wish to use or to ignore to be
# installed in /etc/ssl/certs.
# update-ca-certificates(8) will update /etc/ssl/certs by reading this file.
#
# This is autogenerated by dpkg-reconfigure ca-certificates.
# Certificates should be installed under /usr/share/ca-certificates
# and files with extension '.crt' is recognized as available certs.
#
# line begins with # is comment.
# line begins with ! is certificate filename to be deselected.
#
mozilla/ACCVRAIZ1.crt                   ←org-ACCV/ACCVRAIZ1
!mozilla/ACEDICOM_Root.crt
mozilla/AC_Raíz_Certicámara_S.A..crt
mozilla/Actalis_Authentication_Root_CA.crt
mozilla/AddTrust_External_Root.crt           ←org-AddTrustAB/AddTrust Extarnal CA Root
mozilla/AddTrust_Low-Value_Services_Root.crt     ←org-AddTrustAB/AddTrust Class 1 CA Root
!mozilla/AddTrust_Public_Services_Root.crt      ←org-AddTrustAB/AddTrust Public CA Root
!mozilla/AddTrust_Qualified_Certificates_Root.crt  ←org-AddTrustAB/AddTrust Qualified CA Root
mozilla/AffirmTrust_Commercial.crt
mozilla/AffirmTrust_Networking.crt
mozilla/AffirmTrust_Premium.crt
mozilla/AffirmTrust_Premium_ECC.crt
!mozilla/ApplicationCA_-_Japanese_Government.crt
mozilla/Atos_TrustedRoot_2011.crt            ←org-Atos/Atos TrustedRoot 2011
mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
mozilla/Baltimore_CyberTrust_Root.crt
!mozilla/Buypass_Class_2_CA_1.crt
mozilla/Buypass_Class_2_Root_CA.crt
mozilla/Buypass_Class_3_Root_CA.crt
!mozilla/CA_Disig_Root_R1.crt
mozilla/CA_Disig_Root_R2.crt
mozilla/CFCA_EV_ROOT.crt
!mozilla/CNNIC_ROOT.crt
mozilla/COMODO_Certification_Authority.crt
mozilla/COMODO_ECC_Certification_Authority.crt
mozilla/COMODO_RSA_Certification_Authority.crt
mozilla/Camerfirma_Chambers_of_Commerce_Root.crt
mozilla/Camerfirma_Global_Chambersign_Root.crt
mozilla/Certigna.crt
!mozilla/Certinomis_-_Autorité_Racine.crt
mozilla/Certinomis_-_Root_CA.crt
mozilla/Certplus_Class_2_Primary_CA.crt
mozilla/Certplus_Root_CA_G1.crt
mozilla/Certplus_Root_CA_G2.crt
mozilla/Certum_Root_CA.crt
mozilla/Certum_Trusted_Network_CA.crt
mozilla/Certum_Trusted_Network_CA_2.crt
mozilla/Chambers_of_Commerce_Root_-_2008.crt
!mozilla/China_Internet_Network_Information_Center_EV_Certificates_Root.crt
mozilla/ComSign_CA.crt
・・・以下省略

証明書は/usr/share/ca-certificates/以下にあるということなので確認する。mozilla/以下にいろいろあるらしい。
$ ls -l  /usr/share/ca-certificates/
合計 36
drwxr-xr-x 2 root root 36864  7月 17  2018 mozilla

$ ls -l  /usr/share/ca-certificates/mozilla/*
-rw-r--r-- 1 root root 2772  7月  7  2018 /usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt                   ←org-ACCV/ACCVRAIZ1
-rw-r--r-- 1 root root 1972  7月  7  2018 /usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt
-rw-r--r-- 1 root root 2281  7月  7  2018 /usr/share/ca-certificates/mozilla/AC_Raíz_Certicámara_S.A..crt
-rw-r--r-- 1 root root 2049  7月  7  2018 /usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt
-rw-r--r-- 1 root root 1521  7月  7  2018 /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt           ←org-AddTrustAB/AddTrust Extarnal CA Root
-rw-r--r-- 1 root root 1480  7月  7  2018 /usr/share/ca-certificates/mozilla/AddTrust_Low-Value_Services_Root.crt     ←org-AddTrustAB/AddTrust Class 1 CA Root
-rw-r--r-- 1 root root 1204  7月  7  2018 /usr/share/ca-certificates/mozilla/AffirmTrust_Commercial.crt           ←org-AddTrustAB/AddTrust Public CA Root
-rw-r--r-- 1 root root 1204  7月  7  2018 /usr/share/ca-certificates/mozilla/AffirmTrust_Networking.cr            ←org-AddTrustAB/AddTrust Qualified CA Root
-rw-r--r-- 1 root root 1891  7月  7  2018 /usr/share/ca-certificates/mozilla/AffirmTrust_Premium.crt
-rw-r--r-- 1 root root  753  7月  7  2018 /usr/share/ca-certificates/mozilla/AffirmTrust_Premium_ECC.crt
-rw-r--r-- 1 root root 1188  7月  7  2018 /usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt
-rw-r--r-- 1 root root 1883  7月  7  2018 /usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt
-rw-r--r-- 1 root root  656  7月  7  2018 /usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt
-rw-r--r-- 1 root root  737  7月  7  2018 /usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt
-rw-r--r-- 1 root root 1261  7月  7  2018 /usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt            ←org-Atos/Atos TrustedRoot 2011
-rw-r--r-- 1 root root 2167  7月  7  2018 /usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
-rw-r--r-- 1 root root 1261  7月  7  2018 /usr/share/ca-certificates/mozilla/Baltimore_CyberTrust_Root.crt
-rw-r--r-- 1 root root 1915  7月  7  2018 /usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt
-rw-r--r-- 1 root root 1915  7月  7  2018 /usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt
-rw-r--r-- 1 root root 1935  7月  7  2018 /usr/share/ca-certificates/mozilla/CA_Disig_Root_R2.crt
-rw-r--r-- 1 root root 1984  7月  7  2018 /usr/share/ca-certificates/mozilla/CFCA_EV_ROOT.crt
・・・以下省略
念の為、ファイルの種類を見ると全部「証明書」だ。
$ file  /usr/share/ca-certificates/mozilla/*
/usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt:                                                    PEM certificate
/usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt:                                             PEM certificate
/usr/share/ca-certificates/mozilla/AC_Raíz_Certicámara_S.A..crt:                                     PEM certificate
/usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt:                               PEM certificate
/usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt:                                       PEM certificate
/usr/share/ca-certificates/mozilla/AddTrust_Low-Value_Services_Root.crt:                             PEM certificate
/usr/share/ca-certificates/mozilla/AffirmTrust_Commercial.crt:                                       PEM certificate
/usr/share/ca-certificates/mozilla/AffirmTrust_Networking.crt:                                       PEM certificate
/usr/share/ca-certificates/mozilla/AffirmTrust_Premium.crt:                                          PEM certificate
/usr/share/ca-certificates/mozilla/AffirmTrust_Premium_ECC.crt:                                      PEM certificate
/usr/share/ca-certificates/mozilla/Amazon_Root_CA_1.crt:                                             PEM certificate
/usr/share/ca-certificates/mozilla/Amazon_Root_CA_2.crt:                                             PEM certificate
/usr/share/ca-certificates/mozilla/Amazon_Root_CA_3.crt:                                             PEM certificate
/usr/share/ca-certificates/mozilla/Amazon_Root_CA_4.crt:                                             PEM certificate
/usr/share/ca-certificates/mozilla/Atos_TrustedRoot_2011.crt:                                        PEM certificate
/usr/share/ca-certificates/mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt:    PEM certificate
/usr/share/ca-certificates/mozilla/Baltimore_CyberTrust_Root.crt:                                    PEM certificate
/usr/share/ca-certificates/mozilla/Buypass_Class_2_Root_CA.crt:                                      PEM certificate
/usr/share/ca-certificates/mozilla/Buypass_Class_3_Root_CA.crt:                                      PEM certificate
・・・以下省略

解決編

ここまで来ると、「オレオレ証明書」がインストールできそうな気がする。 ということなので、つぎの手順を試みる。
  1. 「オレオレ証明書」本体(webserver.takahashi.lab.crt)をそれらしいディレクトリ(/usr/share/ca-certificates/my-certificates/webserver.takahashi.lab.crt)にコピー
  2. /etc/ca-certificates.confにmy-certificates/webserver.takahashi.lab.crtを追記
  3. update-ca-certificatesを実行
apt install -y libnss3-tools
mkdir /usr/share/ca-certificates/my-certificates/
cp webserver.takahashi.lab.crt /usr/share/ca-certificates/my-certificates/webserver.takahashi.lab.crt
echo my-certificates/webserver.takahashi.lab.crt >> /etc/ca-certificates.conf
rm /etc/ssl/certs/webserver.takahashi.lab
update-ca-certificates
#失敗する場合は update-ca-certificates -f を試す

実行すると、認証局の中にorg-NITH,webmaster.takahashi.labが追加された。
度々でていた「信頼されていない」という表示消えた。認証局として認識されたらしい。
Chromium設定

「削除」を選ぶと認証局が削除される。一度インストールした認証局を削除すると再びインストールしてもorg-NIHTは表示されない。 再インストールするには、~/.pki/nssdb/cert9.dbにwebserver.takahashi.lab.crtをユーザー権限で追加する。
certutil -d sql:/home/webmaster/.pki/nssdb/ -A -t "C,," -n "webserver.takahashi.lab" -i /usr/share/ca-certificates/webserver.takahashi.lab.crt 

chromiumでhttps://webserver.takahashi.lab/にアクセスしてみる。
アドレスバーの表示は「保護されていない通信」が鍵マーク鍵マークになる。
Chromium設定

鍵マーク鍵マークをクリックすると、「この接続は保護されています」と緑文字で表示され、証明書には(有効)の2文字がみえる。
Chromium設定

「証明書」をクリックすると証明書の内容わかる。発行先と発行元が同じであることから、オレオレ証明書であることがわかる。
Chromium設定

ディベロッパーツールを見ると「安心安全を保証」していることがわかる。 であることがわかる。
Chromium設定


感想?

オレオレ証明書であることを見破り、簡単に信用しない点は高く評価できる。
しかし・・・それではこちらの目的が達成できない。
いろいろ調べると、Linuxでは証明書の管理が厳格化されているらしい。保存先はディストリピューションに依存するが、ユーザー権限でインストールはできない。
Microsoft Windows10 + Google ChromeDebian Stretch + Chromium
証明書はwebブラウザが管理する。
ブラウザの「設定」としてルート証明書(オレオレ証明書を含む)をインストールする。
証明書はwebブラウザが管理するものとOSが管理するものがある。
ブラウザの設定で登録したものはブラウザが管理している。
重要な証明書(ルート証明書)はOSが管理する。ユーザーが勝手にインストールできない。
オレオレ証明書はユーザの権限としてインストールできるが、信用されていない証明書になる。
Google Chromeで証明書を登録してもMicrosoft Egdeはそのような証明書を知らない。 OSが管理している証明書はブラウザ以外のアプリ(wget,curl等)も参照できるらしい。
なぜこのような違いになるか、いろいろ邪推してしまうが・・・
ひとこと言いたい----「セキュリティ大事だよね!」


[参考]
CentOS7,Ubuntu 独自のルートCA証明書を追加する方法 (https://cloudpack.media/14148)

F-Secure ルート CA 証明書を Debian と Ubuntu にインポートする (https://help.f-secure.com/product.html#business/threatshield/latest/ja/task_9B68ADC2A12A4CC591A7B0271B57A499-threatshield-latest-ja)

ALTOVA ルート証明書のインポート (https://www.altova.com/manual/ja/FlowForceServer/flowforceserver/fs_ssl_root_ca.html)

ssl - “信頼済みリスト”への自己署名証明書の追加 (https://tutorialmore.com/questions-106681.htm)