⛳
【Docker】出来るだけ簡単に自己証明書を作ってChromeでの検証を通す(警告ページを回避する)
準備
今回使うイメージ
ざっくり検索した感じ「Dockerで自己証明書を作る」という目的では一番有名に見えた。
証明機関といってもサーバーを常時稼働させる必要もないので、どのマシンでも良い。
良いが、CAルート証明書が毎回変わるとめんどくさいので、1つのマシンと決めたほうが楽ではある。
手順
コマンドベースだとめんどくさいので、docker-compose.yaml と .env にまとめた。
openwrt.local(192.168.0.220) の証明書を作るという例。
▼ docker-compose.yaml
version: '3'
services:
mkdir:
image: alpine
volumes:
- ./certs:/certs
command: sh -c "mkdir -p /certs/${ROOT_DIR}; mkdir -p /certs/${DOMAIN}"
ca:
image: paulczar/omgwtfssl
container_name: ${CA_NAME}
depends_on:
- mkdir
volumes:
- ./certs:/certs
environment:
- CA_SUBJECT=${CA_NAME}
- SSL_SUBJECT=${DOMAIN}
- SSL_DNS=${ALT_DOMAINS}
- SSL_IP=${IPS}
- CA_KEY=${ROOT_DIR}/ca-key.pem
- CA_CERT=${ROOT_DIR}/ca.pem
- SSL_KEY=${DOMAIN}/key.pem
- SSL_CERT=${DOMAIN}/cert.pem
- SSL_CSR=${DOMAIN}/key.csr
- CA_EXPIRE=${CA_EXPIRE}
- SSL_EXPIRE=${SSL_EXPIRE}
- SSL_SIZE=${SSL_SIZE}
▼ .env
CA_NAME=takashiaihara-ca
DOMAIN=openwrt.local
ALT_DOMAINS=openwrt # comma separeted
IPS=192.168.0.220 # comma separeted
ROOT_DIR=root
CA_EXPIRE=3650
SSL_EXPIRE=3650
SSL_SIZE=4096
▼ コマンド
docker compose up
実行後
ミソは、
- alpineでディレクトリをあらかじめ作らせる。(ディレクトリが無いとエラーになる)
- CA鍵/証明書などはROOT_DIRに入れる。
- ドメインごとに鍵/証明書/リクエストのディレクトリを分ける。
という部分。
これによって、ルートCAの証明書などを再利用させつつ、複数ドメインの証明書を追加発行しやすくなる。
参考
paulczar/omgwtfssl って Chrome用の証明書作れるの?
現在は作れます。
まず前提情報として、Chromiumベースブラウザは SAN(Subject Alternative Name) という項目がサーバー証明書に含まれてないとERR_CERT_COMMON_NAME_INVALID という警告ページが表示されます。
いくつかの記事や、paulczar/omgwtfssl のIssueでERR_CERT_COMMON_NAME_INVALID が出るという報告がありますが、現在は解消されています。
Discussion