【2020年1月】ラズパイ4のSSLがChromeで"ERR_CERT_REVOKED"につきアクセスできなくなりまして

# Chrome でオレオレ証明書の localhost にアクセスできない。

去年のアドベントカレンダーで作った Node-RED&音声認識APIでDJに声でリクエストできるサイトですが、年末にいじってみようとChromeからアクセスしたところ、"ERR_CERT_REVOKED"で完全にアクセスできなくなっておりました。。。

![localhostプライバシー エラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/721eabeb-e067-dd1a-2ac2-161c7f06b0ec.png)

**`localhost`なのに"プライバーが保護されません"ってなんだよ！**
普通の警告(?)であれば"詳細情報を表示"から"localhostにアクセスする"のリンクが出て警告を突破できるのですが、このエラーはどうもダメです。

いろいろ試してみたんですがどうにもこうにも、このエラーが止まりません。

- [How To Fix NET::ERR_CERT_REVOKED Error in Google Chrome](https://comodosslstore.com/resources/how-to-fix-neterr_cert_revoked-error-in-google-chrome/)
- [Chrome58で、HTTPSの自己証明書が NET::ERR_CERT_COMMON_NAME_INVALID になる場合の対応](https://tech.torico-corp.com/blog/chrome58-https-ssl-cert-san-error/)
- [オレだよオレオレ認証局で証明書つくる](https://qiita.com/ll_kuma_ll/items/13c962a6a74874af39c6)
- [subjectAltNameに対応した自己署名証明書の作り方](https://qiita.com/sadapon2008/items/7f74cb33a616e8354471)
- [Chromeに怒られないオレオレ証明書の作り方](https://qiita.com/masahiro-aoike/items/dbf17fa03c5973ce9068)

そもそも Let's Encrypt使う手順が本流なので(そりゃそうだろう)、なかなか**ちゃんとしたオレオレ証明書の作り方**には出会いにくいのです。(そりゃそうだろう)

そして出会った以下の記事、これが最後の望み、一縷の光明。。。

- [ローカル環境でSSLをオレオレ証明書で行っていて警告が出てる人に朗報](https://qiita.com/walkers/items/b90a97a99bbb27f6550f)

結果、この手順で動いたのです。本当に簡単だったので、ラズパイ4のNode-REDで mkcert使って HTTPS 対応する手順をメモしておきます。

## 対象環境

OS: Raspbian Buster 4.19
mkcert: v1.4.1

私は Raspbian Buster Lite を VSCode のリモートSSHでやってますがデスクトップ版でも問題ないかと思います。

## 1. mkcert のインストール

基本は本家サイト Readme.md の手順でOKです。

- [mkcert | README.md](https://github.com/FiloSottile/mkcert)

またこちらの手順も参考にしました。

- [How to create locally trusted SSL Certificates on Linux and macOS with mkcert](https://computingforgeeks.com/how-to-create-locally-trusted-ssl-certificates-on-linux-and-macos-with-mkcert/)

まず `libnss3-tools` のインストールから

```shell
$ sudo apt update
...
$ sudo apt install -y libnss3-tools
...
```

続いて`ARM`版のバイナリをダウンロードをします。~~(ここがラズパイ！)~~

```shell
$ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.1/mkcert-v1.4.1-linux-arm
...
```

パーミッションを追加してパスの通っているディレクトリに放り込めばインストール完了です。

```shell
$ sudo chmod +x mkcert 
$ sudo mv mkcert /usr/bin/
```

## 2. `mkcert`の実行

それでは早速、mkcertで証明書の発行を行います。

```shell
$ mkcert 
Created a new local CA at "/home/pi/.local/share/mkcert" 💥
Warning: the local CA is not installed in the system trust store! ⚠️
Run "mkcert -install" to avoid verification errors ‼️

Created a new certificate valid for the following names 📜
 - "version"

The certificate is at "./version.pem" and the key at "./version-key.pem" ✅
```
多分、これだけでも大丈夫なのかも知れませんが、`to avoid verification errors`ってことで念ため`mkcert -install`やっておきます。

```
$ mkcert -install
Using the local CA at "/home/pi/.local/share/mkcert" ✨
The local CA is now installed in the system trust store! ⚡️
```
はい、OKです！

## 3. Node-RED の設定変更

`mkcert`で吐き出した `version.pem` と `version-key.pem` を Node-RED から参照します。

```json:.node-red/settings.json
...
    https: {
       key: fs.readFileSync('version-key.pem'),
       cert: fs.readFileSync('version.pem')
    },
...
```

Node-RED の設定は以上です。

## 4. 起動＆アクセス

それでは Node-RED 起動してみましょう。

```
$ node-red-start
...
```

で、Chromeから`https://localhost:1880`(VSCodeでポートフォワードしてます)、もしくは `https://raspberrypi.local:1880` にアクセスしてみましょう。

![プライバシー エラー回避.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/b18dcb31-c7bf-57c6-0047-25f81dfa586a.png)

これを待ってましたーー！！

で・・・

![Node-RED   raspberrypi local.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335150/3503cecf-abf4-4135-58f5-8944d75efdf7.png)

無事にSSL対応した Node-RED サイトにアクセスできました。