このプロジェクトについて

Boulderは、ACMEベースの認証局(CA)の実装であり、Let's Encryptを運営するソフトウェアです。ACMEプロトコルにより、CAは証明書申請者が実際に識別子を管理していることを自動的に検証し、加入者は管理する識別子の証明書を発行・失効させることができます。 アーキテクチャ Boulderは、セキュリティコンテキストによって分離されたコンポーネントに分割されています: - Webフロントエンド(APIバージョンごとに1つ) - 登録局 - 検証局 - 認証局 - ストレージ局 - パブリッシャー - CRLアップデーター Webフロントエンド、検証局、CRLストア、パブリッシャーはインターネットアクセスを必要とするため、侵害のリスクが高くなります。登録局はインターネット接続なしで動作できますが、Webフロントエンドおよび検証局と通信します。認証局は登録局からの指示のみを受け取ります。すべてのコンポーネントは、MariaDBによってバックアップされるストレージ局を永続化に使用します。コンポーネントはgRPCを介して通信し、リモートコンポーネントはクライアント/サーバーペアとしてインスタンス化され、クライアントはコンポーネントのGoインターフェースを実装し、サーバーは実際のロジックを保持します。 内部的には、システムはACMEリソースに直接対応する5つのオブジェクトタイプ(アカウント、認可、チャレンジ、注文、証明書)を中心に構成されています。ACMEクライアントからのリクエストは新しいオブジェクトを作成し、既存のオブジェクトを変更し、ストレージ局は現在のオブジェクトセットの永続的なコピーを保持します。 開発環境のセットアップ BoulderにはDockerfileが同梱されており、Docker Composeを使用してすべての依存関係をインストールおよび設定します。これはメンテナーが開発および実験用に推奨する実行方法であり、本番環境には明示的に適していません。プロジェクトでは、継続的インテグレーションやACMEクライアント開発者による迅速な実験のために、Boulderのミニチュア版であるPebbleを提案しています。 典型的なワークフロー: - リポジトリをクローンし、Docker Engine 1.13.0+とDocker Compose 1.10.0+がインストールされていることを確認します。Dockerホストには少なくとも2GBのRAMを推奨します。 - ./t.shを実行して、標準のlint、ユニットテスト、統合テストの一式を実行します。./t.sh -uでユニットテスト、./t.sh -iで統合テスト、./tn.shで将来の状態を表す「config-next」設定を実行します。 - docker compose run bsetupを一度実行してtest/certsに証明書を書き込み、その後docker compose upでBoulderを起動します。 - docker-compose.ymlはチェックアウトを/boulderにマウントするため、ホストの編集はコンテナに即座に反映されます。 デフォルトでは、Boulderはすべてのホスト名を127.0.0.1に解決する偽のDNSリゾルバーを使用します。これはコンテナ内の統合テストに適しています。ホストベースのクライアントがBoulderと通信できるようにするには、ホストのDocker IPを見つけてFAKE_DNS環境変数をそれに設定します。スタブ化されたリゾルバー(sd-test-srv)は、すべてのAクエリに対してそのアドレスで応答します。ホストベースのファイアウォールは、必要な検証ポートでDockerインスタンスからホストへの接続を許可する必要があります。 ACMEクライアントの操作 開発環境が実行されている場合、ACMEエンドポイントはホストにhttp://localhost:4001/directory(ACME v2、HTTP)およびhttps://localhost:4431/directory(ACME v2、HTTPS)で公開されます。HTTPSエンドポイントを使用するには、test/certs/ipki/minica.pem CA証明書を含むトラストストアでクライアントを設定する必要があります。偽のリゾルバーは任意のクエリに対して127.0.0.1を返すため、あたかもlocalhostに解決されるかのように任意のドメインの証明書を発行できます。FAKE_DNSを変更すると返されるアドレスが変わり、ACMEクライアントを実行しているホストマシンに設定されることがよくあります。READMEには、カスタムのSERVER環境変数と--standaloneオプションを使用して、ローカルのBoulderに対してCertbotを実行する方法が示されています。 本番環境に関する注意 プロジェクトでは、BoulderはLet's Encrypt専用にカスタム構築されており、Web PKIとCA/Browser Forumのベースライン要件のみをサポートすることを目的としていると述べています。また、Boulderは本番環境を評価している組織には適さないことが多く、ACMEドメイン認証なしの集中管理型PKIの方が通常は適切な選択であると指摘しています。必要な作業とセキュリティ上の考慮事項を説明する導入および実装ガイドが提供されています。Dockerベースの開発環境は本番環境には明示的に適していません。公開されている秘密鍵素材を使用し、デバッグポートを公開し、コンポーネントの障害に対して脆弱です。サポートと開発はLet's Encryptのミッションを優先するため、タイムリーなサポートや第一線の目標から大きく逸脱するプルリクエストは受け入れられない場合があります。 貢献とライセンス 貢献ガイドライン、コードレビュープロセス、行動規範、その他のヒントはCONTRIBUTING.mdにあります。コミュニティの行動規範はLet's Encryptコミュニティフォーラムで参照されています。プロジェクトはMozilla Public License 2.0の下でライセンスされています。