トランスポート層セキュリティ

提供: ArchWiki
ナビゲーションに移動 検索に移動

Wikipedia より:

Transport Layer Security (TLS) およびその前身の Secure Sockets Layer (SSL) はコンピュータネットワークにおいてセキュリティを要求される通信を行うためのプロトコルである。ウェブブラウザやメール、インスタントメッセージ、voice over IP (VoIP) などのアプリケーションで幅広く使われているプロトコルとなっている。ウェブサイトは TLS によってサーバーとウェブブラウザ間の通信を暗号化している。

実装

TLS の実装は 5 種類あり、公式リポジトリで公開されています。OpenSSL は base メタパッケージの間接的な依存関係であるため、すでにシステムにインストールされているはずです(base > coreutils > openssl)。GnuTLS は多くのパッケージで必要とされているため、すでにシステムにインストールされている可能性があります。

  • OpenSSL — 堅牢・商業品質・フル機能の TLS と SSL プロトコルのツールキット。汎用の暗号ライブラリでもあります。
https://www.openssl.org/ || openssl
  • GnuTLS — TLS, SSL, DTLS プロトコルのフリーソフトウェア実装。X.509, PKCS #12, OpenPGP などの API を提供します。
https://www.gnutls.org/ || gnutls
  • Network Security Services (NSS) — TLS/SSL と S/MIME をサポートする暗号ライブラリの実装。TLS アクセラレーションとスマートカードもサポート。
https://developer.mozilla.org/NSS || nss
  • mbed TLS — ポータブルな SSL/TLS 実装。別名 PolarSSL。
https://tls.mbed.org/ || mbedtls
  • LibreSSL — OpenBSD プロジェクトによって2014年に OpenSSL からフォークされた TLS/crypto スタック。コードベースを近代的に改修してセキュリティを向上させることを目標としています。
https://www.libressl.org/ || libressl

認証局

TLS では、一連の認証局(CA)の 1 つが、サーバーからの公開鍵証明書の信頼性をチェックし、署名します。TLS でサーバーに接続するクライアントは、CA の電子署名に依存して、その証明書の信頼性を確認することができます。電子署名を確認するために、クライアントは別の経路で取得し、自己署名証明書として保存された CA の公開鍵を持っている必要があります。Arch Linux では CA 証明書のデフォルトセットは ca-certificates パッケージで提供されています。

ノート: 現在、Arch Linux は Mozilla CA Certificate Store からの CA 証明書をデフォルトセットとして使用しています。

Arch Linux は CA 証明書を管理するために、システム全体の集中化されたインターフェースを提供します。このインターフェースは libp11-kit パッケージの /usr/lib/pkcs11/p11-kit-trust.so というライブラリで、証明書のための PKCS #11 API を提供し、/usr/share/ca-certificates/trust-source/ ("Default Trust" トークン) と /etc/ca-certificates/trust-source/ ("System Trust" トークン) に格納されています。

コマンドラインからインターフェースを使用するために、p11-kit パッケージは trust(1) ユーティリティを提供します。

PKCS #11 に移植されておらず,CA 証明書の管理に独自の論理を使用している ライブラリのために、ca-certificates-utils パッケージは update-ca-trust(8) スクリプトを提供し, 集中管理インタフェースを通して得られた CA 証明書を /etc/ca-certificates/extracted//etc/ssl/certs/ にコピーします。

CA 証明書のデフォルトセットをロードするためのメカニズムの概要

実装 メカニズム Arch Linux 設定
OpenSSL ハードコードされたディレクトリまたはファイルから証明書をロードする API 関数を提供するSSL_CTX_set_default_verify_paths(3) デフォルトファイルは /etc/ssl/cert.pem です。デフォルトディレクトリは /etc/ssl/certs/ です。
GnuTLS ハードコードされたディレクトリ、ファイル、または設定された PKCS #11 モジュールから証明書をロードする API 関数を提供する。最後のケースでは、ハードコードされた URL によって、任意の信頼できる証明書、または trust-policy: yes とマークされたモジュール上の信頼できる CA 証明書、オプションで追加のフィルタリング基準を持つ証明書をロードすることができます[1], [2] 設定された PKCS #11 モジュールから、trust-policy: yes でマークされた、信頼できるすべての CA 証明書をロードします。
Network Security Services 専用の API で管理されている PKCS#11 モジュールの動的に構成されたリストから証明書を自動的にロードします。構成は、ユーザーが指定した任意のディレクトリに保存できます。 [3], modutil(1).
mbed TLS ユーザーは証明書をロードする必要があります。 [4].
LibreSSL ハードコードされたディレクトリまたはファイルから証明書をロードする API 関数を提供します。 libressl-SSL_CTX_load_verify_locations(3) デフォルトのファイルは /etc/libressl/cert.pem で、デフォルトのディレクトリは /etc/libressl/certs/ です。

信頼管理

認証局のブラックリストを管理する方法はセキュリティ#SSL 証明書の管理を見てください。

システム全体で認証局を信頼

警告: 以下のコマンドを実行すると誰でも秘密鍵にアクセスして TLS 通信を傍受できるようになります。
# trust anchor certificate.crt

上記は HTTPS MITM プロキシで通信を傍受するのに必要です。

証明書を取得

最初に RSA 秘密鍵を生成してください。鍵を生成する前に、umask でファイルモード作成マスクを制限的に (例えば 077) 設定してください。

ノート: openssl パッケージは他のディストリビューションと違って /etc/ssl/private ディレクトリを保護しません。FS#43059 を参照。

証明書は 証明書署名要求 (CSR) を使って認証局から取得するか、あるいは 自己署名 することができます。自己署名証明書は簡単に生成できますが、クライアントはデフォルトでは拒否するため、自己署名証明書を信頼するようにクライアントを設定する必要があります。

実際の生成コマンドは以下の実装の記事を見てください:

ヒント: ACME を使うことで Let's Encrypt 認証局からフリーの証明書を取得できます。

サーバーサイドの推奨事項

TLS に対する攻撃 は多数存在するため、ベストプラクティスに注意してください:

TLS のチェック

TLS をチェックするプログラム:

TLS をチェックするウェブサイト:

その他

ACME クライアント

Automated Certificate Management Environment (ACME) プロトコルは Let's Encrypt などの 認証局 から X.509 証明書をリクエストできるプロトコルです。

ACME クライアントの一覧 も参照してください。

  • acme-client — C で書かれたセキュアな Let's Encrypt クライアント。
https://kristaps.bsd.lv/acme-client/ || acme-clientAUR[リンク切れ: パッケージが存在しません]
  • acme-tiny — Let's Encrypt から TLS 証明書を作成・更新するための200行の Python スクリプト。
https://github.com/diafygi/acme-tiny || acme-tiny
  • acme.sh — Unix シェルスクリプトだけで作られた ACME クライアント。
https://github.com/Neilpang/acme.sh || acme.sh-gitAUR
  • acmetool — Go で書かれた使いやすい ACME CLI。
https://github.com/hlandau/acme || acmetoolAUR, acmetool-gitAUR
  • Certbot — Python で書かれた、Let's Encrypt によって推奨されている ACME クライアント。
https://github.com/certbot/certbot || certbot
  • dehydrated — Bash で書かれた ACME クライアント。
https://github.com/lukas2511/dehydrated || dehydrated, dehydrated-gitAUR
  • getssl — Bash で書かれた ACME クライアント。
https://github.com/srvrco/getssl || getsslAUR, getssl-gitAUR
  • lego — Go で書かれた Lets Encrypt クライアントと ACME ライブラリ。
https://github.com/xenolf/lego || lego-gitAUR
  • letsencrypt-cli — もうひとつの Letsencrypt (ACME) クライアント。Ruby を使用。
https://github.com/zealot128/ruby-acme-cli || letsencrypt-cliAUR
  • manuale — 完全手動の Let's Encrypt クライアント。Python で書かれています。
https://github.com/veeti/manuale || manualeAUR
  • ruby-acme-client — letsencrypt の ACME プロトコルの Ruby クライアント。
https://github.com/unixcharles/acme-client || ruby-acme-clientAUR
  • simp_le — シンプルな Let's Encrypt クライアント。Python で書かれています。
https://github.com/zenhack/simp_le || simp_le-gitAUR

With the online, interactive, https://gethttpsforfree.com client you will need about 10 copy paste from the web page to a shell command line, and back. Running the suggested command in between. You will also have to do manual renewals, possibly at that page. Or other wise take care of renewals. On the other hand, you will see at every step whether it succeeded, or not. Will not have to install software just to request for a certificate. And will be able to keep the private keys, or the server software, touched only fully consciously.

OCSP

Online Certificate Status Protocol (OCSP) は Firefox によってサポートされています。Chromium は独自のメカニズムを備えています [5]

GnuTLS の ocsptool(1) や OpenSSL の ocsp(1ssl) も参照。

HSTS

HTTP Strict Transport Security (HSTS) メカニズムは Firefox, Chromium, wget (~/.wget-hsts) によってサポートされています。

DNS CAA

See Wikipedia:DNS Certification Authority Authorization.

参照