SSL接続

1.SSLとは

 Secure Sockets Layerの略である。
 httpsプロトコルによりWEBブラウザからサーバにアクセスする。
 デフォルト・ポート番号はhttpが80であるのに対し443

2.仕組み

 クライアントがサーバのコンテンツを要求する際に、以下の工程を踏むことにより、第三者にパケットの中身を盗聴されない暗号化通信である。
 ① クライアントからSSL通信のリクエストを行う。
 ② サーバからサーバ証明書と公開鍵を返送する。
 ③ クライアントは共通鍵を生成し、公開鍵で暗号化してサーバに送付する。
 (公開鍵で暗号化したデータは秘密鍵でなければ復号できない)。
 ④ サーバは秘密鍵を用いて共通鍵を復号する。
 ⑤ クライアントは共通鍵を用いてリクエスト(上り通信)を行う。
 ⑥ サーバは共通鍵を用いて返信(下り通信)を行う。

3.普及状況

  一頃は、個人情報のフォームへの記入など限られた局面で用いられていた。
 現在は、Chromeでhttpサイトにアクセスすると警告されるようになった。
 Google検索の上位にランクされるためにはトップページなど通常のコンテンツもhttpsプロトコルであることが有利となる。

4.証明書と発行機関

 httpsプロトコルを導入するためには認証機関に登録する必要がある。現在ではhttpsプロトコルの普及を図るために無償で登録できる認証機関も存在する。
 証明機関から発行される証明書には3種類ある。証明書の内容は、ブラウザから確認することができる。
(1) ドメイン認証型SSLサーバ証明書
 登録するドメインが存在することを証明するのみでありオンラインで可能
(2) 企業認証型SSLサーバ証明書
企業が存在することを書面で確認した上で認証する
(3) EV-SSLサーバ証明書(Extended Validation)
フィッシング詐欺防止を謳い、「証明書を所有している企業の名前と証明書発行元である認証局の名前を緑色のアドレスバーとして表示します。監査を通過した厳格な認証方法を認証局が実行し、ブラウザで表示を制御することで、フィッシングを行う攻撃者や偽サイトの運営者が企業のブランド棄損やその顧客を簡単に奪うことが無いようにします。」

5.Let’s Encryptへの登録

 Let’s Encrypt は、登録手続き等を全て自動化することによりコスト減を図っている。
(1) Certbot-auto
 Githubからクローンを取得し、これを用いてセットアップする方法が案内されている
 しかし、PythonのIDコードが一致しないというエラーが生じ進まない。なお、セットアップされる場所は、/usr/share/certbot。この直下にcertbot-auto スクリプトがある。
失敗する過程
Creating virtual environment
Installing Python Package(長い)
→Certbot has problem setting up the virtual environment.
We were not be able to guess the right solution from your pip output.
(コマンド入力からエラー終了までを、/home/pi/パイソンエラー2.txtとして保存)
(2) Raspbian における失敗要因
Certbot-autoというコマンドは、/usr/shr/certbot配下にあるシェルスクリプトである。この長いマクロは、バージョンの検査からダウンロード、インストールを行う。
ラズパイの場合、非力であることからソースコード取得からのコンパイルを行なわずラズパイ財団が提供するバイナリを取りに行くようになっている。これが合わない。
そこで、インストーラである「pip」の設定ファイルを弄り、
/etc/pip.conf を修正し
extra-index-url=https:///pinwheel.org
の行をコメントアウトする
またはこのファイルを削除する
 →結果、変わらず。
なお、Raspbian のOSのバージョンを調べる方法とその結果は以下のとおり:
$uname -a
Linux raspberrypi 4.19.42+ #1219 Tue May 14 21:16:38 BST 2019 armv6l GNU/Linux
$cat /etc/issue
Raspbian GNU/Linux 9 \n \l
$cat /etc/debian_version
9.9
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.9 (stretch)
Release: 9.9
Codename: stretch
即ち、Debian 9.9
(3) 対策(成功手順):Certbot-autoを使用せず、Certbotを使用する。
$sudo apt install certbot
約4.157KBのディスクが必要
raspberrypi.orgに接続、764KBを25秒でダウンロード
→パッケージを展開、Python3-request-toolbeltを設定
ここで(2)のCertbot-autを実行しても依然として以前のまま。一方、
$certbot –apache
を実行すると、以下のエラーメッセージが出る。
certbot main certbot version 0.28.0
Arguments –apache discovered plugins logging level set at 20
certbot plugins selections:
- Requested authenticator apache and installer apache
- No candidate plugin selected uthenticator none and installer none 云々
--apache という引数は、certbot –help の解説には無いが、 パイソンの実行形式をセットアップすると使えるようになる。 このセットアップのためには、
ストレッチによりバックポートを加える。バックポートとはお試し段階のパッケージでありいろいろと混ぜて使わない方が安全。ソースリストにバックポートを加えるためには、
deb http://deb.debian.org/debian stretch-backports main
をsource.listに加えるか、この行を.listというファイルに書出して/etc/apt/sources list.dディレクトリに加える。
次に、パイソンのプログラムをインストールする。
$sudo apt-get install certbot python-certbot-apache
→73個の保留(certbot-autoの失敗と同)
以前に未選択のパッケージ python3-augeasを選択します。云々と成功。その上で、
これにより、--apacheが使えるようになる。
$sudo certbot --apache
数秒の後に、以下の応答がある
- Saving debug log to /var/log/letsencrypt/letencrypt.log -Plugins selected: Authenticator apache, Installer apache -Enter email address(used for urgent renewal and security notices)→nifty -https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdfを読め  ACME Server: https://acme-v02.api.letsencrypt.org/directory
 同意書の中身は、
1.用語の定義
2.有効期限
3.ユーザの義務
4.ISRGの権利と義務
云々(長い)
同意した後は、
No names were found in your configuration files.
Please enter in your domain name→brl.dix.asia (後でwww.dix.asiaに修正)。
ここでアクセスしてみると、
セキュリティ証明書と、サイト名の証明書上の名前が一致しません。
SSLサーバ証明書にはお申し込み時にお客様からいただいたCSRに含まれるコモンネームの情報が入ります。
CSR作成時 xxx.ssl-store.jp
URL : www.sslstore.jpに変更して再登録
$sudo certbot –apache –expand –d www.brl.dix.asia

1. 000-default.conf
2. 001-default-ssl.conf
3. default-ssl.conf
どうする?
→2を選択
→Enhancement redirect was already set.
鍵は/etc/letsencrypt/keysに保存されている
0000_key-certbot.pem 1708 (190720 15:18) 0001_key-certbot.pem 1704 (190720 16:09) 0002_key-certbot.pem 1704 (190720 16:17) =>これらは、エラーを修正しながら3回試行錯誤した結果である。 /etc/letsencrypt/csrにCSRが保存されている。 0000_csr-certbot.pem 920 (190720 15:18) 0001_csr-certbot.pem 920 (190720 16:09) 0002_csr-certbot.pem 928 (190720 16:17) /etc/letsencrypt/live/README (15:19) /etc/letsencrypt/live/brl.dix.asia (16:19) README (15:19) cert.pem -> ../../archive/brl.dix.asia/cert2.pem (16:09) chain.pem->../../archive/brl.dix.asia/chain2.pem (16:09) fullchain.pem->../../archive/brl.dix.asia/fullchain2.pem (16:09) privkey.pem->../../archive/brl.dix.asia/privkey2.pem (16:09) /etc/letsencrypt/live/www.brl.dix.asia (16:17) README (16:17) cert.pem->../../archive/www.bri.dix.asia/cert1.pem (16:17) chain.pem->../../archive/www.bri.dix.asia/chain1.pem (16:17) fullchain.pem->../../archive/www.bri.dix.asia/fullchain1.pem (16:17) privkey.pem->../../archive/www.bri.dix.asia/privkey1.pem (16:17) /var/www/ssd にBUする。 /etc# cp letsencrypt /var/www/ssd
なお、CSR(Corporate Social Responsibility)とは、企業の社会的責任という意味もあるが、 ここではCertificate Signing Request(証明書への署名依頼)。 CSRを作成する際には、
コモンネーム:www.brl.dix.asia
組織名:Building Record Laboratory
部門名:Customer Service Department
都道府県名:Ibaraki
国別番号:jp
生成したCSRの内容は、https://ssltools.digicert.com/checker/views/csrCheck.jsp で確認することができる。
(4)自動更新更新頻度など
 Letsencrypt のサーバーは、更新を5回までと制限している。
 一方、有効期限を90日とし、それ以内に更新しないとサーバーがアクセスできなくなる。
 このため、更新のみを行うスクリプトを、cronにより定期的に(例えば60日に一度)実行することが可能。
 但し、OSのバージョンアップなどによりエラー停止しているような報告例もある。
(5)サーバ自身からの検証アクセス
 サーバから「https://ローカルIP」でアクセスすると、正しく証明されない。
 そこで、/etc/hosts の末尾に ローカルIP www.brl.dix.asia を追加すると正しく表示される。
(6)LAN内の他のマシンからのアクセス
 マシン毎にhosts を設定すると、外出先から正しくアクセスできない。
 ルート認証局と中間認証局をLAN内に構築するする試みは中途で挫折中
(7)ログの確認
/var/log/letsencrypt 配下に更新の記録がある
[例] 2022年6月頃、http://アクセスをW-III サーバに割り当てていた間、更新に失敗していた
(8)プライベートキー
/etc/letsencrypt/archive 配下に、記録がある。

6.その他(archiスーパードメインなど)

 UIA(国際建築家連合)が、アーキテクトのための新しいドメイン.archiの使用を呼びかけている(1406)。日本建築家協会も賛同勧奨中。
 UIAは、UIAに加盟する(あるいは加盟協会の会員)建築家が、簡単に.archi というドメインを利用できるように、UIAのWEBサイトに特別ページを開設しました。
 UIA加盟建築家ないし加盟団体の会員建築家が簡単に取得できるサービス:
 http://www.uia.archi/en/exercer/dotarchi#.VGQ8zzSsXe4
(190722)