オレオレ証明書は使っていいのか?
- 暗号化されてるの?
- 暗号化はされている。しかし、通信相手が、秘密を守ってくれる相手(攻撃者ではない)であることが前提。
- 使っていいの?
- 相手の断定は難しい(実在証明が難しい)が使いますか?の答えが答え。
Docker操作とnginx設定
事前確認
docker container run -d -p 8080:80 --name nginx nginx docker exec -it xxxxxxxxxxxxxx /bin/bash exit docker stop xxxxxxxxxxxxxx docker exec -it nginx /bin/bash -c 'ls -1 /etc/nginx/conf.d/*' docker exec -it nginx /bin/bash -c 'nginx -v'
docker-compose.yml
cat <<'EOF' > docker-compose.yml version: "3" services: nginx: image: nginx:latest container_name: nginx ports: - "8080:80" - "8081:443" volumes: - ./:/etc/nginx/conf.d EOF
default.conf
cat <<'EOF' > default.conf server { listen 443 ssl; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } #ssl on; ssl_certificate_key /etc/nginx/conf.d/server.key; # private key ssl_certificate /etc/nginx/conf.d/server.crt; # ore-ore crt } server { listen 80; listen [::]:80; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF
docker up
docker compose up -d
curl http://localhost:8080
curl https://localhost:8081
docker restart
docker compose restart
docker down
docker compose down
オレオレ証明書(CRT(SSLサーバー証明書))を作成する。
秘密鍵、CSR(証明書署名要求)、CRT(SSLサーバー証明書)作成
秘密鍵を作成した上で、
# @ サーバー # 秘密鍵:pem鍵の保存形式 openssl genrsa -out server.key 2048 # CSR(証明書署名要求):証明書署名リクエスト 証明書持ち主の情報が含まれています。例えば、ドメイン名、国、メールアドレスなど # 秘密鍵から作成するため本人しか作れない openssl req -new -key server.key -out server.csr
次に、第三者にお墨付きをもらう。ここでは自分でお墨付きをつけるため、オレオレ証明書となる。
サーバの管理者が発行した証明書署名要求(CSR)に対して、認証局(CA)がCAの秘密鍵で署名を行ったものが証明書(CRT)です。
# @ 認証局 # CRT(SSLサーバー証明書):証明書 # →自分で作ったので、自己署名証明書(オレオレ証明書) openssl x509 -days 3650 -req -signkey server.key -in server.csr -out server.crt
ブラウザ(curl)でアクセスすると、Webサーバー側が、自己署名証明書(オレオレ証明書)を使用しているため以下出力される。危険性を理解して、閲覧することも可能。
curl: (60) SSL certificate problem: self signed certificate More details here: https://curl.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
警告無視も可能
curl -k https://localhost:8081
本格的にオレオレ認証局を作成し、オレオレ認証局がサーバの証明書に署名する手順を紹介します。オレオレ認証局のルート証明書をクライアントにインストールすることでブラウザが警告なしでアクセスすることができるようになります。
一旦ここまで。
オレオレ認証局作成と、オレオレ認証局のルート証明書をクライアントにインストールするのは、参考にしたサイトで、実施しているので、とほほのOpenSSL入門 - とほほのWWW入門を参照する。
ちなみに続きは
@認証局
@Webサーバー
@認証局
@Webサーバ
@ブラウザ
- オレオレ認証局の証明書.pem の拡張子を.cerに変更し、ブラウザに取り込む:これで警告なしでアクセス可能となる。
- 持っている証明書と、Webサーバーからダウンロードしてきた証明書が同じか?→同じであれば、本人と判断。お墨付きをもらっているか確認。秘密鍵から作成しているので、本人以外あり得ない。
警告が出るのはどういうことか?
ブラウザ視点
ブラウザが持っている認証局の公開鍵を使って電子署名を復号し、デジタル証明書のハッシュ値を計算したものと比較する。別の人の秘密鍵を使って作成したので、合致しない。お墨付きが無い、知らない人のものであるとわかり、安全性を担保できないため、警告画面が出る。通信は暗号化されている。通信する相手が、攻撃者かもしれない。
オレオレ証明書について
相手の断定は難しい(実在証明が難しい)、受け入れてしまうことで、教育面でも、いろいろ問題が起こる。
結論として、第三者のお墨付きが必要。ブラウザと別経路で、証明書を取り入れ、検証することが必要。
ref.
- https://cn.teldevice.co.jp/blog/p39750/
- https://qiita.com/ling350181/items/2ac60698779088b14dea
- https://www.tohoho-web.com/ex/openssl.html#make-certificate
- https://tech.kurojica.com/archives/25380/
Env.
~/ docker exec -it nginx /bin/bash -c 'nginx -v' nginx version: nginx/1.25.5 ~/