トランスポート層セキュリティ
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 プロトコルのツールキット。汎用の暗号ライブラリでもあります。
- 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 スタック。コードベースを近代的に改修してセキュリティを向上させることを目標としています。
認証局
With TLS one of a set of certificate authorities (CAs) checks and signs for the authenticity of a public key certificate from a server. A client connecting to the server via TLS may verify its certificate's authenticity by relying on a digital signature of CA. To check the digital signature a client must have a public key of CA, obtained via a separate path and stored as a self-signed certificate. On Arch Linux the default set of CA certificates is provided by the ca-certificates package.
Arch Linux provides a centralized system-wide interface for managing CA certificates. This interface is the library /usr/lib/pkcs11/p11-kit-trust.so
from the libp11-kit package, which provides PKCS #11 API for certificates, stored in /usr/share/ca-certificates/trust-source/
(the token "Default Trust") and /etc/ca-certificates/trust-source/
(the token "System Trust").
For using the interface from a command line, the p11-kit package provides the trust(1) utility.
For libraries, that have not been ported to PKCS #11 and use a custom logic for managing CA certificates, the package ca-certificates-utils provides the update-ca-trust(8) script, that copies CA certificates obtained through the centralized interface to /etc/ca-certificates/extracted/
and /etc/ssl/certs/
.
An overview of mechanisms for loading a default set of CA certificates
Implementation | Mechanism | Arch Linux configuration |
---|---|---|
OpenSSL | Provides API functions that load the certificates from a hardcoded directory or file. SSL_CTX_set_default_verify_paths(3). | A default file is /etc/ssl/cert.pem , a default directory is /etc/ssl/certs/ .
|
GnuTLS | Provides an API function that loads the certificates from a hardcoded directory, file, or configured PKCS #11 modules. In the last case, a hardcoded URL allows to load either an arbitrary trusted certificate, or trusted CA certificates on modules, marked with trust-policy: yes , optionally with additional filtration criteria. [1], [2].
|
Loads all trusted CA certificates from configured PKCS #11 modules, marked with trust-policy: yes .
|
Network Security Services | Automatically loads the certificates from a dynamically configured list of PKCS #11 modules, managed with a dedicated API. Configuration can be stored in any directory, pointed by a user. [3], modutil(1). | |
mbed TLS | A user should load the certificates. [4]. | |
LibreSSL | Provides an API function that loads the certificates from a hardcoded directory or file. libressl-SSL_CTX_load_verify_locations(3). | A default file is /etc/libressl/cert.pem , a default directory is /etc/libressl/certs/ .
|
信頼管理
認証局のブラックリストを管理する方法はセキュリティ#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 クライアント。
- https://kristaps.bsd.lv/acme-client/ || acme-clientAUR[リンク切れ: パッケージが存在しません]
- 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 で書かれています。
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.