HTTPSとSSL証明書を完全理解!Webエンジニアが知るべき暗号化通信の仕組みと設定方法
HTTPSとSSL証明書の仕組み完全ガイド
HTTPSは、現代のWebにおいて標準となった暗号化通信のプロトコルです。SSL/TLS証明書とともに、安全な通信を実現します。この記事では、HTTPSの基礎からSSL証明書の種類、仕組み、設定方法、証明書の取得や更新に至るまで、1時間で理解できるよう網羅的に解説します。
1. HTTPとHTTPSの違い
HTTPSでは、通信内容が暗号化されることで盗聴・改ざん・なりすましを防止できます。
2. TLS/SSLとは?
TLSは、サーバーとクライアント間の通信内容を安全に保つために使われます。
3. SSL証明書の役割
SSL証明書は、Webサイトの身元を確認し、公開鍵を配布する役割を持ちます。
- ドメインの所有者であることを証明
- 公開鍵を含み、暗号化通信の起点になる
- 証明書には有効期限がある(通常90日〜1年)
4. TLS通信の流れ(ハンドシェイク)
- クライアントがサーバーに接続要求(Hello)
- サーバーが証明書(公開鍵)を送る
- クライアントがサーバーの証明書を検証
- セッション鍵をクライアントが生成し、サーバーに送る(公開鍵で暗号化)
- 以降の通信はこのセッション鍵で暗号化される
5. 証明書の種類
| 種類 | 認証レベル | 主な用途 |
|---|---|---|
| DV(Domain Validation) | ドメイン所有確認 | 個人ブログ・一般サイト |
| OV(Organization Validation) | 企業実在確認 | 企業・団体サイト |
| EV(Extended Validation) | 厳格な企業審査 | 金融・ECサイトなど |
6. 証明書の発行方法
1. Let’s Encrypt(無料)
sudo certbot --nginx -d example.com -d www.example.com
- 自動更新が可能(cronやsystemd timer)
- 有効期限:90日
2. 有料証明書(商用CA)
- GeoTrust, GlobalSign, DigiCertなど
- より信頼性の高いOV・EV証明書が発行可能
7. HTTPS化の設定手順(Nginxの例)
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
}
}
8. HTTP → HTTPSリダイレクト
Nginxの設定例:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
9. セキュリティ強化オプション
- HSTS(HTTP Strict Transport Security):HTTPSのみ許可するブラウザ設定
- OCSP Stapling:証明書失効情報を高速に確認
- Secure Headers:X-Content-Type-OptionsやX-Frame-Optionsの追加
10. よくあるトラブルと対応
- 証明書の有効期限切れ → 自動更新設定を確認
- ブラウザ警告("安全な接続ではありません") → 証明書チェーンやCAの確認
- Mixed Content(HTTPSページ内にHTTPコンテンツがある) → すべてHTTPSで統一