トランスポート層セキュリティ
Wikipedia より:
- Transport Layer Security (TLS) はとその前身[1] の Secure Sockets Layer (SSL) はコンピュータネットワークにおいてセキュリティを要求される通信を行うためのプロトコルである。ウェブブラウザやメール、インスタントメッセージ、ボイスオーバー IP (VoIP) などのアプリケーションで幅広く使われているプロトコルとなっている。ウェブサイトは TLS によってサーバーとウェブブラウザ間の通信を暗号化している。
目次
実装
公式リポジトリには5つの TLS 実装が存在します。OpenSSL と GnuTLS は base パッケージによって必要とされるため、大抵の場合、既にインストールされているはずです。
- OpenSSL — 堅牢・商業品質・フル機能の TLS と SSL プロトコルのツールキット。汎用の暗号ライブラリでもあります。
- GnuTLS — TLS, SSL, DTLS プロトコルのフリーソフトウェア実装。X.509, PKCS #12, OpenPGP などの API を提供します。
- Network Security Services (NSS) — TLS/SSL と S/MIME をサポートする暗号ライブラリの実装。TLS アクセラレーションとスマートカードもサポート。
- mbed TLS — ポータブルな SSL/TLS 実装。別名 PolarSSL。
- LibreSSL — OpenBSD プロジェクトによって2014年に OpenSSL からフォークされた TLS/crypto スタック。コードベースを近代的に改修してセキュリティを向上させることを目標としています。
認証局
TLS を使って 認証局 (CAs) は署名を行ってサーバーの 公開鍵証明書 の信頼性を担保します。TLS でクライアントからサーバーに接続したときは別のパスによって取得した CA 証明書でサーバーの証明書の信頼性を確認します。Arch Linux では認証局の証明書は ca-certificates パッケージに含まれており、base パッケージからインストールされます (pacman > curl > ca-certificates)。依存ツリーは以下のようになっています:
- ca-certificates
他のパッケージが依存しているアンカーポイント。- ca-certificates-mozilla
Mozilla CA Certificate Store から生成した/usr/share/ca-certificates/trust-source/mozilla.trust.p11-kit
ファイルのみ含んでいます。NSS の一部でもあります (/usr/lib/libnssckbi.so
)。- ca-certificates-utils
update-ca-trust(8) スクリプトと同名の pacman フックを提供します。
- ca-certificates-utils
- ca-certificates-mozilla
信頼管理
認証局のブラックリストを管理する方法はセキュリティ#SSL 証明書の管理を見てください。
システム全体で認証局を信頼
# trust anchor certificate.crt
上記は HTTPS MITM プロキシで通信を傍受するのに必要です。
証明書を取得
最初に RSA 秘密鍵を生成してください。鍵を生成する前に、umask でファイルモード作成マスクを制限的に (例えば 077
) 設定してください。
証明書は 証明書署名要求 (CSR) を使って認証局から取得するか、あるいは 自己署名 することができます。自己署名証明書は簡単に生成できますが、クライアントはデフォルトでは拒否するため、自己署名証明書を信頼するようにクライアントを設定する必要があります。
実際の生成コマンドは以下の実装の記事を見てください:
サーバーサイドの推奨事項
TLS に対する攻撃 は多数存在するため、ベストプラクティスに注意してください:
- SSLv3 を無効化 することで POODLE 攻撃を防ぐ。
- weakdh.org の TLS の Diffie-Hellman デプロイガイド
- Mozilla による Server Side TLS の記事
- SSL Labs の SSL と TLS デプロイベストプラクティス
- Cipherli.st
TLS のチェック
TLS をチェックするプログラム:
TLS をチェックするウェブサイト:
- https://dev.ssllabs.com/ssltest/ (HTTPS のみ)
- https://www.checktls.com/ (メールのみ)
- https://www.htbridge.com/ssl/ (任意ポート)
- https://tls.imirhil.fr/tls (任意ポート)
その他
ACME クライアント
Automated Certificate Management Environment (ACME) プロトコルは Let's Encrypt などの 認証局 から X.509 証明書をリクエストできるプロトコルです。
ACME クライアントの一覧 も参照してください。
- acme-client — C で書かれたセキュアな Let's Encrypt クライアント。
- acme-tiny — Let's Encrypt から TLS 証明書を作成・更新するための200行の Python スクリプト。
- acme.sh — Unix シェルスクリプトだけで作られた ACME クライアント。
- acmetool — Go で書かれた使いやすい ACME CLI。
- Certbot — Python で書かれた、Let's Encrypt によって推奨されている ACME クライアント。
- dehydrated — Bash で書かれた ACME クライアント。
- getssl — Bash で書かれた ACME クライアント。
- https://github.com/srvrco/getssl || getsslAUR, getssl-gitAUR
- lego — Go で書かれた Lets Encrypt クライアントと ACME ライブラリ。
- letsencrypt-cli — もうひとつの Letsencrypt (ACME) クライアント。Ruby を使用。
- manuale — 完全手動の Let's Encrypt クライアント。Python で書かれています。
- ruby-acme-client — letsencrypt の ACME プロトコルの Ruby クライアント。
- simp_le — シンプルな Let's Encrypt クライアント。Python で書かれています。
OCSP
Online Certificate Status Protocol (OCSP) は Firefox によってサポートされています。Chromium は独自のメカニズムを備えています [2]。
GnuTLS の ocsptool(1) や OpenSSL の ocsp(1ssl) も参照。
HSTS
HTTP Strict Transport Security (HSTS) メカニズムは Firefox, Chromium, wget (~/.wget-hsts
) によってサポートされています。