web100tips’s blog

webエンジニアが知っておくべきこと100を1日1投稿します

HTTPSとSSL証明書を完全理解!Webエンジニアが知るべき暗号化通信の仕組みと設定方法

 

HTTPSSSL証明書の仕組み完全ガイド

HTTPSは、現代のWebにおいて標準となった暗号化通信のプロトコルです。SSL/TLS証明書とともに、安全な通信を実現します。この記事では、HTTPSの基礎からSSL証明書の種類、仕組み、設定方法、証明書の取得や更新に至るまで、1時間で理解できるよう網羅的に解説します。

1. HTTPとHTTPSの違い

  • HTTP(Hypertext Transfer Protocol):暗号化されていない通信
  • HTTPS(HTTP Secure)TLSによって暗号化された通信

HTTPSでは、通信内容が暗号化されることで盗聴・改ざん・なりすましを防止できます。

2. TLS/SSLとは?

TLSは、サーバーとクライアント間の通信内容を安全に保つために使われます。

3. SSL証明書の役割

SSL証明書は、Webサイトの身元を確認し、公開鍵を配布する役割を持ちます。

  • ドメインの所有者であることを証明
  • 公開鍵を含み、暗号化通信の起点になる
  • 証明書には有効期限がある(通常90日〜1年)

4. TLS通信の流れ(ハンドシェイク)

  1. クライアントがサーバーに接続要求(Hello)
  2. サーバーが証明書(公開鍵)を送る
  3. クライアントがサーバーの証明書を検証
  4. セッション鍵をクライアントが生成し、サーバーに送る(公開鍵で暗号化)
  5. 以降の通信はこのセッション鍵で暗号化される

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 ContentHTTPSページ内にHTTPコンテンツがある) → すべてHTTPSで統一

11. HTTPSのメリットまとめ

  • 通信の盗聴・改ざんを防ぐ
  • GoogleSEO評価が上がる
  • ブラウザでの信頼性向上(鍵マーク)
  • モダンWeb開発(PWA・Service Workerなど)には必須

12. 参考リンク