証明書の設定
Aspire は、2 つの補完的な証明書 API セットを提供します:
- HTTPS エンドポイント API: リソースが自身の HTTPS エンドポイントで使用する証明書を設定します(サーバー認証)
- 証明書信頼 API: リソースが送信 HTTPS 接続を行う際に信頼する証明書を設定します(クライアント認証)
これらの API セットはともに動作し、ローカル開発中に安全な HTTPS 通信を実現します。たとえば、Vite フロントエンドは WithHttpsDeveloperCertificate を使用して HTTPS トラフィックを提供しながら、WithDeveloperCertificateTrust を使用してダッシュボードの OTLP エンドポイント証明書を信頼することもできます。
HTTPS が重要な理由
Section titled “HTTPS が重要な理由”HTTPS はサービス間で送信されるデータのセキュリティとプライバシーを保護するために不可欠です。トラフィックを暗号化して盗聴、改ざん、中間者攻撃を防ぎます。本番環境では、HTTPS は基本的なセキュリティ要件です。
ただし、本番環境の構成に合わせてローカル開発中に HTTPS を有効にするには、固有の課題があります。開発環境では通常、ブラウザやアプリケーションがデフォルトで信頼しない自己署名証明書が使用されます。複数のサービス、コンテナ、異なる言語ランタイムにわたってこれらの証明書を管理するのは複雑で時間がかかり、開発ワークフローに摩擦を生じさせることがよくあります。
Aspire は、次の API を提供することでローカル開発の HTTPS 設定を簡素化します:
- サーバー認証に適した証明書で HTTPS エンドポイントを設定する
- リソースが自己署名証明書を使用するサービスと通信できるよう証明書の信頼を管理する
- 開発証明書(ローカルドメインにのみ有効なユーザーごとの自己署名証明書)をさまざまなリソースタイプにわたって自動的に処理する
開発証明書の信頼
Section titled “開発証明書の信頼”Aspire の多くの証明書機能は開発証明書に依存しています。これらの機能を使用する前に、信頼された開発証明書がマシンにインストールされていることを確認する必要があります。
Aspire CLI を使用する(推奨)
Section titled “Aspire CLI を使用する(推奨)”開発証明書を管理するための推奨方法は、Aspire CLI を使用することです。aspire run を実行すると、CLI は開発証明書が作成・信頼されていることを自動的に確認します。追加の手動手順は必要ありません。
Aspire CLI を使用して証明書を明示的に管理することもできます:
aspire certs trustaspire certs cleanaspire certs trustDCP 通信用の開発者証明書(Windows)
Section titled “DCP 通信用の開発者証明書(Windows)”デフォルトでは、Aspire の内部 Developer Control Plane (DCP) サーバーは TLS 用に自身で生成する一時的なローカルホスト証明書を使用します。Windows では、代わりに信頼された Aspire 開発者証明書を DCP 通信に使用することを選択できます。これにより、一時的な証明書がシステム信頼ストアにないことで発生する信頼の問題を回避できます。
AppHost の launchSettings.json またはシステム/ユーザー環境変数として ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE 環境変数を true に設定します:
{ "profiles": { "https": { "commandName": "Project", "environmentVariables": { "ASPIRE_DCP_USE_DEVELOPER_CERTIFICATE": "true" } } }}この設定が有効な場合:
- Aspire は信頼された開発者証明書を確認します。
- 信頼された証明書が見つかった場合、それを使用して DCP サーバーをセキュリティで保護します。
- 信頼された証明書が見つからない場合、Aspire は DCP が生成する一時的な証明書にフォールバックします。
- この設定は Windows でのみサポートされています。他のプラットフォームでは、警告がログに記録され、DCP はデフォルトの一時的な証明書にフォールバックします。
HTTPS エンドポイントの設定
Section titled “HTTPS エンドポイントの設定”HTTPS エンドポイントの設定は、リソースが HTTPS トラフィックを提供する際に提示する証明書を決定します。これは HTTPS/TLS エンドポイントをホストするリソースのサーバー側証明書設定です。
デフォルトの動作
Section titled “デフォルトの動作”WithHttpsCertificateConfiguration で証明書設定が定義されているリソースの場合、Aspire は利用可能であれば開発証明書を使用するように設定しようとします。この自動設定は、YARP、Redis、Keycloak コンテナ、Vite ベースの JavaScript アプリ、Uvicorn を使用する Python アプリなど、多くの一般的なリソースタイプで機能します。
この動作は、以下で説明する HTTPS エンドポイント API を使用して制御できます。
開発証明書を使用する
Section titled “開発証明書を使用する”リソースの HTTPS エンドポイントに開発証明書を使用するよう明示的に設定するには:
var builder = DistributedApplication.CreateBuilder(args);
// 開発者証明書を明示的に使用するvar nodeApp = builder.AddViteApp("frontend", "../frontend") .WithHttpsDeveloperCertificate();
// 暗号化された秘密キーを持つ開発者証明書を使用するvar certPassword = builder.AddParameter("cert-password", secret: true);var pythonApp = builder.AddUvicornApp("api", "../api", "app:main") .WithHttpsDeveloperCertificate(certPassword);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
// 開発者証明書を明示的に使用するconst const nodeApp: ViteAppResource
nodeApp = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addViteApp(name: string, appDirectory: string, options?: { runScriptName?: string;}): ViteAppResource (+1 overload)
Adds a Vite app to the distributed application builder.
addViteApp("frontend", "../frontend") .ExecutableResource.withHttpsDeveloperCertificate(options?: { password?: string | ParameterResource;} | undefined): ViteAppResource (+1 overload)
Indicates that a resource should use the developer certificate key pair for HTTPS endpoints at run time. Currently this indicates use of the ASP.NET Core developer certificate. The developer certificate will only be used when running in local development scenarios; in publish mode resources will use their default certificate configuration.
withHttpsDeveloperCertificate();
// 暗号化された秘密キーを持つ開発者証明書を使用するconst const certPassword: ParameterResource
certPassword = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addParameter(name: string, options?: { value?: string; publishValueAsDefault?: boolean; secret?: boolean;}): ParameterResource (+1 overload)
Adds a parameter resource
addParameter("cert-password", { secret?: boolean | undefined
secret: true });const const pythonApp: UvicornAppResource
pythonApp = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addUvicornApp(name: string, appDirectory: string, app: string): UvicornAppResource
Adds a Uvicorn-based Python application to the distributed application builder with HTTP endpoint configuration.
addUvicornApp("api", "../api", "app:main") .ExecutableResource.withHttpsDeveloperCertificate(options?: { password?: string | ParameterResource;} | undefined): UvicornAppResource (+1 overload)
Indicates that a resource should use the developer certificate key pair for HTTPS endpoints at run time. Currently this indicates use of the ASP.NET Core developer certificate. The developer certificate will only be used when running in local development scenarios; in publish mode resources will use their default certificate configuration.
withHttpsDeveloperCertificate({ password?: string | ParameterResource | undefined
password: const certPassword: ParameterResource
certPassword });
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();WithHttpsDeveloperCertificate メソッドは:
- リソースを開発証明書を使用するよう設定する
- 実行モード(ローカル開発)にのみ適用される
- 必要に応じて、暗号化された証明書の秘密キー用のパスワードパラメーターを受け取る
- コンテナ、Node.js、Python、その他のリソースタイプで動作する
カスタム証明書を使用する
Section titled “カスタム証明書を使用する”HTTPS エンドポイントに特定の X.509 証明書を使用するようにリソースを設定するには:
using System.Security.Cryptography.X509Certificates;
var builder = DistributedApplication.CreateBuilder(args);
// 証明書を読み込むvar certificate = new X509Certificate2("path/to/certificate.pfx", "password");
// HTTPS エンドポイントに証明書を使用するbuilder.AddContainer("api", "my-api:latest") .WithHttpsCertificate(certificate);
// パスワードパラメーターを使用して証明書を使用するvar certPassword = builder.AddParameter("cert-password", secret: true);builder.AddNpmApp("frontend", "../frontend") .WithHttpsCertificate(certificate, certPassword);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder, function refExpr(strings: TemplateStringsArray, ...values: unknown[]): ReferenceExpression
Creates a reference expression from a tagged template literal
refExpr } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
const const api: ContainerResource
api = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addContainer(name: string, image: AddContainerOptions): ContainerResource
Adds a container resource to the application.
addContainer("api", { AddContainerOptions.image: string
image: "my-api", AddContainerOptions.tag: string
tag: "latest",});
const api: ContainerResource
api.ContainerResource.createExecutionConfiguration(): IExecutionConfigurationBuilder
Creates an execution configuration builder for the specified resource.
createExecutionConfiguration() .IExecutionConfigurationBuilder.withArgumentsConfig(): IExecutionConfigurationBuilder
Adds a command line arguments configuration gatherer to the builder.
withArgumentsConfig() .IExecutionConfigurationBuilder.withEnvironmentVariablesConfig(): IExecutionConfigurationBuilder
Adds an environment variables configuration gatherer to the builder.
withEnvironmentVariablesConfig() .IExecutionConfigurationBuilder.withHttpsCertificateConfig(configContextFactory: (arg: HttpsCertificateInfo) => Promise<HttpsCertificateExecutionConfigurationContext>): IExecutionConfigurationBuilder
Adds an HTTPS certificate configuration gatherer using certificate metadata instead of a raw X509 certificate.
withHttpsCertificateConfig(async () => ({ HttpsCertificateExecutionConfigurationContext.certificatePath: ReferenceExpression
certificatePath: function refExpr(strings: TemplateStringsArray, ...values: unknown[]): ReferenceExpression
Creates a reference expression from a tagged template literal
refExpr`/certs/tls.crt`, HttpsCertificateExecutionConfigurationContext.keyPath: ReferenceExpression
keyPath: function refExpr(strings: TemplateStringsArray, ...values: unknown[]): ReferenceExpression
Creates a reference expression from a tagged template literal
refExpr`/certs/tls.key`, HttpsCertificateExecutionConfigurationContext.pfxPath: ReferenceExpression
pfxPath: function refExpr(strings: TemplateStringsArray, ...values: unknown[]): ReferenceExpression
Creates a reference expression from a tagged template literal
refExpr`/certs/tls.pfx`, }));
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();証明書の要件:
- 秘密キーが含まれていること
- 有効な X.509 証明書であること
- サーバー認証に適していること
HTTPS 証明書設定を無効にする
Section titled “HTTPS 証明書設定を無効にする”リソースに対して Aspire が HTTPS 証明書を設定しないようにするには:
var builder = DistributedApplication.CreateBuilder(args);
// HTTPS 証明書の自動設定を無効にするvar redis = builder.AddRedis("cache") .WithoutHttpsCertificate();
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
// HTTPS 証明書の自動設定を無効にするconst const redis: IResourceWithEnvironment
redis = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addRedis(name: string, options?: { port?: number; password?: string | ParameterResource;}): RedisResource (+1 overload)
Adds a Redis container to the application model.
addRedis("cache") .ContainerResource.withoutHttpsCertificate(): IResourceWithEnvironment
Disable HTTPS/TLS server certificate configuration for the resource. No HTTPS/TLS termination configuration will be applied.
withoutHttpsCertificate();
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();WithoutHttpsCertificate を使用するケース:
- リソースが HTTPS をサポートしていない場合
- 手動で証明書を設定したい場合
- リソースが独自の証明書管理を持っている場合
証明書設定をカスタマイズする
Section titled “証明書設定をカスタマイズする”カスタム証明書設定ロジックが必要なリソースの場合、WithHttpsCertificateConfiguration を使用して証明書ファイルをリソースに渡す方法を指定します:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("api", "my-api:latest") .WithHttpsCertificateConfiguration(ctx => { // 証明書パスをコマンドライン引数として渡す ctx.Arguments.Add("--tls-cert"); ctx.Arguments.Add(ctx.CertificatePath); ctx.Arguments.Add("--tls-key"); ctx.Arguments.Add(ctx.KeyPath);
// または環境変数を設定する ctx.EnvironmentVariables["TLS_CERT_FILE"] = ctx.CertificatePath; ctx.EnvironmentVariables["TLS_KEY_FILE"] = ctx.KeyPath;
// リソースが必要とする場合は PFX 形式を使用する ctx.EnvironmentVariables["TLS_PFX_FILE"] = ctx.PfxPath;
// 必要な場合はパスワードを含める if (ctx.Password is not null) { ctx.EnvironmentVariables["TLS_KEY_PASSWORD"] = ctx.Password; }
return Task.CompletedTask; });
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder, function refExpr(strings: TemplateStringsArray, ...values: unknown[]): ReferenceExpression
Creates a reference expression from a tagged template literal
refExpr } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
const const api: ContainerResource
api = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addContainer(name: string, image: AddContainerOptions): ContainerResource
Adds a container resource to the application.
addContainer("api", { AddContainerOptions.image: string
image: "myimage", AddContainerOptions.tag: string
tag: "latest",});
const api: ContainerResource
api.ContainerResource.createExecutionConfiguration(): IExecutionConfigurationBuilder
Creates an execution configuration builder for the specified resource.
createExecutionConfiguration() .IExecutionConfigurationBuilder.withArgumentsConfig(): IExecutionConfigurationBuilder
Adds a command line arguments configuration gatherer to the builder.
withArgumentsConfig() .IExecutionConfigurationBuilder.withEnvironmentVariablesConfig(): IExecutionConfigurationBuilder
Adds an environment variables configuration gatherer to the builder.
withEnvironmentVariablesConfig() .IExecutionConfigurationBuilder.withCertificateTrustConfig(configContextFactory: (arg: CertificateTrustScope) => Promise<CertificateTrustExecutionConfigurationContext>): IExecutionConfigurationBuilder
Adds a certificate trust configuration gatherer to the builder.
withCertificateTrustConfig(async () => ({ CertificateTrustExecutionConfigurationContext.certificateBundlePath: ReferenceExpression
certificateBundlePath: function refExpr(strings: TemplateStringsArray, ...values: unknown[]): ReferenceExpression
Creates a reference expression from a tagged template literal
refExpr`/certs/ca-bundle.crt`, CertificateTrustExecutionConfigurationContext.certificateDirectoriesPath: ReferenceExpression
certificateDirectoriesPath: function refExpr(strings: TemplateStringsArray, ...values: unknown[]): ReferenceExpression
Creates a reference expression from a tagged template literal
refExpr`/certs`, CertificateTrustExecutionConfigurationContext.rootCertificatesPath: string
rootCertificatesPath: "/etc/ssl/certs", CertificateTrustExecutionConfigurationContext.isContainer: boolean
isContainer: true, }));
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();コールバックは HttpsCertificateConfigurationCallbackAnnotationContext を受け取り、以下を提供します:
CertificatePath: PEM 形式の証明書ファイルへのパスKeyPath: PEM 形式の秘密キーファイルへのパスPfxPath: PFX/PKCS#12 形式の証明書へのパスPassword: 設定されている場合、秘密キーのパスワードArguments: 変更するコマンドライン引数のリストEnvironmentVariables: 変更する環境変数のディクショナリExecutionContext: 現在の実行コンテキストResource: 設定対象のリソース
証明書信頼の設定
Section titled “証明書信頼の設定”証明書信頼の設定は、リソースが送信 HTTPS 接続を行う際に信頼する証明書を決定します。これはクライアント側の証明書設定です。
証明書信頼を使用するケース
Section titled “証明書信頼を使用するケース”証明書信頼のカスタマイズが有効なケース:
- リソースがローカル HTTPS 通信のために開発証明書を信頼する必要がある場合
- コンテナ化されたサービスが HTTPS 経由でダッシュボードと通信する必要がある場合
- Python または Node.js アプリケーションがカスタム証明機関を信頼する必要がある場合
- 特定の証明書信頼要件を持つサービスを扱っている場合
- リソースが Aspire ダッシュボードへの安全なテレメトリ接続を確立する必要がある場合
開発証明書の信頼
Section titled “開発証明書の信頼”デフォルトでは、Aspire は開発証明書を信頼しないリソースに対して、開発証明書の信頼を追加しようとします。これにより、リソースは HTTPS 経由でダッシュボード OTLP コレクターエンドポイントや、開発証明書で保護されたその他の HTTPS エンドポイントと通信できます。
この動作は、WithDeveloperCertificateTrust API または AppHost 設定を通じてリソースごとに制御できます。
リソースごとに開発証明書の信頼を設定する
Section titled “リソースごとに開発証明書の信頼を設定する”特定のリソースの開発証明書の信頼を明示的に有効または無効にするには:
var builder = DistributedApplication.CreateBuilder(args);
// 開発証明書の信頼を明示的に有効にするvar nodeApp = builder.AddNpmApp("frontend", "../frontend") .WithDeveloperCertificateTrust(trust: true);
// 開発証明書の信頼を無効にするvar pythonApp = builder.AddPythonApp("api", "../api", "main.py") .WithDeveloperCertificateTrust(trust: false);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
// 開発証明書の信頼を明示的に有効にするconst const nodeApp: NodeAppResource
nodeApp = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addNodeApp(name: string, appDirectory: string, scriptPath: string): NodeAppResource
Adds a node application to the application model. Node should be available on the PATH.
addNodeApp("frontend", "../frontend", "index.js") .ExecutableResource.withDeveloperCertificateTrust(trust: boolean): NodeAppResource
Indicates whether developer certificates should be treated as trusted certificate authorities for the resource at run time. Currently this indicates trust for the ASP.NET Core developer certificate. The developer certificate will only be trusted when running in local development scenarios; in publish mode resources will use their default certificate trust.
withDeveloperCertificateTrust(true);
// 開発証明書の信頼を無効にするconst const pythonApp: PythonAppResource
pythonApp = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addPythonApp(name: string, appDirectory: string, scriptPath: string): PythonAppResource
Adds a Python application to the application model.
addPythonApp("api", "../api", "main.py") .ExecutableResource.withDeveloperCertificateTrust(trust: boolean): PythonAppResource
Indicates whether developer certificates should be treated as trusted certificate authorities for the resource at run time. Currently this indicates trust for the ASP.NET Core developer certificate. The developer certificate will only be trusted when running in local development scenarios; in publish mode resources will use their default certificate trust.
withDeveloperCertificateTrust(false);
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();証明機関コレクション
Section titled “証明機関コレクション”証明機関コレクションを使用すると、カスタム証明書をバンドルしてリソースで利用できるようになります。AddCertificateAuthorityCollection メソッドを使用してコレクションを作成し、それらの証明書を信頼する必要があるリソースから参照します。
証明機関コレクションを作成して使用する
Section titled “証明機関コレクションを作成して使用する”using System.Security.Cryptography.X509Certificates;
var builder = DistributedApplication.CreateBuilder(args);
// カスタム証明書を読み込むvar certificates = new X509Certificate2Collection();certificates.ImportFromPemFile("path/to/certificate.pem");
// 証明機関コレクションを作成するvar certBundle = builder.AddCertificateAuthorityCollection("my-bundle") .WithCertificates(certificates);
// 証明書バンドルをリソースに適用するbuilder.AddNpmApp("my-project", "../myapp") .WithCertificateAuthorityCollection(certBundle);
builder.Build().Run();上記の例では、カスタム証明書で証明書バンドルを作成し、Node.js アプリケーションに適用してそれらの証明書を信頼できるようにしています。
証明書信頼スコープ
Section titled “証明書信頼スコープ”証明書信頼スコープは、カスタム証明書がリソースのデフォルト信頼証明書とどのように連携するかを制御します。スコープごとに異なる設定により、アプリケーションの要件に応じた証明書信頼の管理が柔軟に行えます。
WithCertificateTrustScope API は、信頼動作を指定する CertificateTrustScope 値を受け取ります。
利用可能な信頼スコープ
Section titled “利用可能な信頼スコープ”Aspire がサポートする証明書信頼スコープは以下のとおりです:
- Append: カスタム証明書をデフォルトの信頼済み証明書に追加する
- Override: デフォルトの信頼済み証明書を設定された証明書のみに置き換える
- System: カスタム証明書とシステムルート証明書を組み合わせてデフォルトを上書きする
- None: すべてのカスタム証明書信頼設定を無効にする
Append モード
Section titled “Append モード”指定されたリソースのデフォルト信頼済み証明書にカスタム証明書を追加しようとします。このモードは、システムのデフォルト証明書の信頼を維持しながら、追加の証明書の信頼を加えたい場合に便利です。
ほとんどのリソースのデフォルトスコープです。Python リソースでは、このモードでは OTEL 信頼設定のみが適用されます。
var builder = DistributedApplication.CreateBuilder(args);
builder.AddNodeApp("api", "../api") .WithCertificateTrustScope(CertificateTrustScope.Append);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder, type CertificateTrustScope = "None" | "Append" | "Override" | "System"const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addNodeApp(name: string, appDirectory: string, scriptPath: string): NodeAppResource
Adds a node application to the application model. Node should be available on the PATH.
addNodeApp("api", "../api", "index.js") .ExecutableResource.withCertificateTrustScope(scope: CertificateTrustScope): NodeAppResource
Sets the certificate trust scope
withCertificateTrustScope(const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope.type Append: "Append"
Append);
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();Override モード
Section titled “Override モード”リソースを設定された証明書のみを信頼するよう上書きしようとし、デフォルトの信頼済み証明書を完全に置き換えます。このモードは、信頼する証明書を厳密に制御する必要がある場合に便利です。
var builder = DistributedApplication.CreateBuilder(args);
var certBundle = builder.AddCertificateAuthorityCollection("custom-certs") .WithCertificates(myCertificates);
builder.AddPythonModule("api", "./api", "uvicorn") .WithCertificateAuthorityCollection(certBundle) .WithCertificateTrustScope(CertificateTrustScope.Override);
builder.Build().Run();System モード
Section titled “System モード”設定された証明書とデフォルトのシステムルート証明書を組み合わせて、リソースのデフォルト信頼済み証明書を上書きしようとします。このモードは、Append モードとうまく動作しない Python や類似のランタイムをサポートするために設計されています。
Python は証明書信頼を完全に上書きするメカニズムしか持っていないため、Python プロジェクトのデフォルトスコープです。
var builder = DistributedApplication.CreateBuilder(args);
builder.AddPythonApp("worker", "../worker", "main.py") .WithCertificateTrustScope(CertificateTrustScope.System);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder, type CertificateTrustScope = "None" | "Append" | "Override" | "System"const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addPythonApp(name: string, appDirectory: string, scriptPath: string): PythonAppResource
Adds a Python application to the application model.
addPythonApp("worker", "../worker", "main.py") .ExecutableResource.withCertificateTrustScope(scope: CertificateTrustScope): PythonAppResource
Sets the certificate trust scope
withCertificateTrustScope(const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope.type System: "System"
System);
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();None モード
Section titled “None モード”リソースのすべてのカスタム証明書信頼を無効にし、デフォルトの証明書信頼動作のみに依存させます。
デフォルトのシステムストアのソースを自動的に変更する方法がないため、Windows 上の .NET プロジェクトのデフォルトスコープです。
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("service", "myimage") .WithCertificateTrustScope(CertificateTrustScope.None);
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder, type CertificateTrustScope = "None" | "Append" | "Override" | "System"const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addContainer(name: string, image: AddContainerOptions): ContainerResource
Adds a container resource to the application.
addContainer("service", { AddContainerOptions.image: string
image: "myimage", AddContainerOptions.tag: string
tag: "latest" }) .ContainerResource.withCertificateTrustScope(scope: CertificateTrustScope): ContainerResource
Sets the certificate trust scope
withCertificateTrustScope(const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope.type None: "None"
None);
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();カスタム証明書信頼の設定
Section titled “カスタム証明書信頼の設定”高度なシナリオでは、コールバック API を使用してカスタム証明書信頼動作を指定できます。このコールバックにより、さまざまなリソースタイプの証明書信頼設定に必要なコマンドライン引数と環境変数をカスタマイズできます。
コールバックを使用して証明書信頼を設定する
Section titled “コールバックを使用して証明書信頼を設定する”WithCertificateTrustConfiguration を使用して、リソースの証明書信頼の設定方法をカスタマイズします:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("api", "myimage") .WithCertificateTrustConfiguration(ctx => { // コマンドライン引数を追加する ctx.Arguments.Add("--use-system-ca");
// 証明書パスを含む環境変数を設定する // CertificateBundlePath はカスタム証明書バンドルファイルのパスに解決される ctx.EnvironmentVariables["MY_CUSTOM_CERT_VAR"] = ctx.CertificateBundlePath;
// CertificateDirectoriesPath は個別の証明書を含むパスに解決される ctx.EnvironmentVariables["CERTS_DIR"] = ctx.CertificateDirectoriesPath;
return Task.CompletedTask; });
builder.Build().Run();コールバックは CertificateTrustConfigurationCallbackAnnotationContext を受け取り、以下を提供します:
Scope: リソースのCertificateTrustScope。Arguments: リソースのコマンドライン引数。値は文字列またはCertificateBundlePath、CertificateDirectoriesPathなどのパスプロバイダーを指定できます。EnvironmentVariables: 証明書信頼を設定するための環境変数。ディクショナリキーは環境変数名で、値は文字列またはパスプロバイダーを指定できます。デフォルトではSSL_CERT_DIRが含まれ、Override または System スコープが設定されている場合はSSL_CERT_FILEも含まれることがあります。CertificateBundlePath: カスタム証明書バンドルファイルのパスに解決される値プロバイダー。CertificateDirectoriesPath: 個別の証明書を含むパスに解決される値プロバイダー。
Node.js、Python、コンテナリソース用のデフォルト実装が提供されています。コンテナリソースは標準の OpenSSL 設定オプションに依存しており、デフォルト値は大多数の一般的な Linux ディストリビューションをサポートしています。
コンテナ証明書パスを設定する
Section titled “コンテナ証明書パスを設定する”コンテナリソースでは、WithContainerCertificatePaths を使用して証明書の保存場所とアクセス場所をカスタマイズできます:
var builder = DistributedApplication.CreateBuilder(args);
builder.AddContainer("api", "myimage") .WithContainerCertificatePaths( customCertificatesDestination: "/custom/certs/path", defaultCertificateBundlePaths: ["/etc/ssl/certs/ca-certificates.crt"], defaultCertificateDirectoryPaths: ["/etc/ssl/certs"]);
builder.Build().Run();WithContainerCertificatePaths API は 3 つのオプションパラメーターを受け取ります:
customCertificatesDestination: カスタム証明書ファイルが配置されるコンテナ内のベースパスを上書きします。設定しないかnullに設定した場合、デフォルトパス/usr/lib/ssl/aspireが使用されます。defaultCertificateBundlePaths: デフォルトの証明機関バンドルファイルが格納されているコンテナ内のパスを上書きします。CertificateTrustScopeが Override または System の場合、カスタム証明書バンドルはこれらのパスにも追加書き込みされます。設定しないかnullに設定した場合、一般的な Linux ディストリビューション用のデフォルト証明書パスが使用されます。defaultCertificateDirectoryPaths: 個別の信頼済み証明書ファイルが格納されているコンテナ内のパスを上書きします。CertificateTrustScopeが Append の場合、これらのパスはアップロードされた証明書アーティファクトのパスと連結されます。設定しないかnullに設定した場合、一般的な Linux ディストリビューション用のデフォルト証明書パスが使用されます。
一般的なシナリオ
Section titled “一般的なシナリオ”このセクションでは、HTTPS エンドポイントと証明書信頼を一緒に設定するための一般的なパターンを示します。
HTTPS を持つサービスの設定とダッシュボードテレメトリの有効化
Section titled “HTTPS を持つサービスの設定とダッシュボードテレメトリの有効化”典型的なシナリオは、Node.js サービスが HTTPS トラフィックを提供しながら、ダッシュボードにテレメトリを送信できるように設定することです:
var builder = DistributedApplication.CreateBuilder(args);
// HTTPS エンドポイントに開発者証明書を使用するようにサービスを設定する// また、送信接続(ダッシュボードテレメトリなど)のために開発者証明書を信頼するvar frontend = builder.AddNpmApp("frontend", "../frontend") .WithHttpsDeveloperCertificate() // HTTPS エンドポイント用サーバー証明書 .WithDeveloperCertificateTrust(true); // ダッシュボード用クライアント信頼
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
// HTTPS エンドポイントに開発者証明書を使用するようにサービスを設定する// また、送信接続(ダッシュボードテレメトリなど)のために開発者証明書を信頼するconst const frontend: NodeAppResource
frontend = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addNodeApp(name: string, appDirectory: string, scriptPath: string): NodeAppResource
Adds a node application to the application model. Node should be available on the PATH.
addNodeApp("frontend", "../frontend", "index.js") .ExecutableResource.withHttpsDeveloperCertificate(options?: { password?: string | ParameterResource;} | undefined): NodeAppResource (+1 overload)
Indicates that a resource should use the developer certificate key pair for HTTPS endpoints at run time. Currently this indicates use of the ASP.NET Core developer certificate. The developer certificate will only be used when running in local development scenarios; in publish mode resources will use their default certificate configuration.
withHttpsDeveloperCertificate() // HTTPS エンドポイント用サーバー証明書 .ExecutableResource.withDeveloperCertificateTrust(trust: boolean): NodeAppResource
Indicates whether developer certificates should be treated as trusted certificate authorities for the resource at run time. Currently this indicates trust for the ASP.NET Core developer certificate. The developer certificate will only be trusted when running in local development scenarios; in publish mode resources will use their default certificate trust.
withDeveloperCertificateTrust(true); // ダッシュボード用クライアント信頼
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();カスタム証明書を使用した HTTPS の有効化
Section titled “カスタム証明書を使用した HTTPS の有効化”企業またはカスタム CA 証明書を使用する場合、サーバーとクライアントの両方の証明書を設定できます:
using System.Security.Cryptography.X509Certificates;
var builder = DistributedApplication.CreateBuilder(args);
// カスタム証明書を読み込むvar serverCert = new X509Certificate2("server-cert.pfx", "password");var customCA = new X509Certificate2Collection();customCA.Import("corporate-ca.pem");
var caBundle = builder.AddCertificateAuthorityCollection("corporate-certs") .WithCertificates(customCA);
// カスタムサーバー証明書と CA 信頼でサービスを設定するbuilder.AddContainer("api", "my-api:latest") .WithHttpsCertificate(serverCert) // HTTPS 用サーバー証明書 .WithCertificateAuthorityCollection(caBundle); // 企業 CA を信頼する
builder.Build().Run();Redis を TLS で設定する
Section titled “Redis を TLS で設定する”Redis リソースは、安全な接続のために HTTPS (TLS) を使用するよう設定できます:
var builder = DistributedApplication.CreateBuilder(args);
// TLS に開発者証明書を使用するよう Redis を設定するvar redis = builder.AddRedis("cache") .WithHttpsDeveloperCertificate();
// または TLS を完全に無効にするvar redisNoTls = builder.AddRedis("cache-notls") .WithoutHttpsCertificate();
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
// TLS に開発者証明書を使用するよう Redis を設定するconst const redis: RedisResource
redis = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addRedis(name: string, options?: { port?: number; password?: string | ParameterResource;}): RedisResource (+1 overload)
Adds a Redis container to the application model.
addRedis("cache") .ContainerResource.withHttpsDeveloperCertificate(options?: { password?: string | ParameterResource;} | undefined): RedisResource (+1 overload)
Indicates that a resource should use the developer certificate key pair for HTTPS endpoints at run time. Currently this indicates use of the ASP.NET Core developer certificate. The developer certificate will only be used when running in local development scenarios; in publish mode resources will use their default certificate configuration.
withHttpsDeveloperCertificate();
// または TLS を完全に無効にするconst const redisNoTls: IResourceWithEnvironment
redisNoTls = await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addRedis(name: string, options?: { port?: number; password?: string | ParameterResource;}): RedisResource (+1 overload)
Adds a Redis container to the application model.
addRedis("cache-notls") .ContainerResource.withoutHttpsCertificate(): IResourceWithEnvironment
Disable HTTPS/TLS server certificate configuration for the resource. No HTTPS/TLS termination configuration will be applied.
withoutHttpsCertificate();
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();特定のリソースの証明書設定を無効にする
Section titled “特定のリソースの証明書設定を無効にする”独自の証明書を管理するリソースに対して、HTTPS エンドポイント設定と証明書信頼の両方を無効にするには:
var builder = DistributedApplication.CreateBuilder(args);
// すべての自動証明書設定を無効にするbuilder.AddPythonModule("api", "./api", "uvicorn") .WithoutHttpsCertificate() // サーバー証明書設定なし .WithCertificateTrustScope(CertificateTrustScope.None); // クライアント信頼設定なし
builder.Build().Run();import { function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder, type CertificateTrustScope = "None" | "Append" | "Override" | "System"const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope } from './.aspire/modules/aspire.mjs';
const const builder: IDistributedApplicationBuilder
builder = await function createBuilder(): IDistributedApplicationBuilder
Creates a new distributed application builder
createBuilder();
// すべての自動証明書設定を無効にするawait const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.addPythonModule(name: string, appDirectory: string, moduleName: string): PythonAppResource
Adds a Python module to the application model.
addPythonModule("api", "./api", "uvicorn") .ExecutableResource.withoutHttpsCertificate(): IResourceWithEnvironment
Disable HTTPS/TLS server certificate configuration for the resource. No HTTPS/TLS termination configuration will be applied.
withoutHttpsCertificate() // サーバー証明書設定なし .IResourceWithEnvironment.withCertificateTrustScope(scope: CertificateTrustScope): IResourceWithEnvironment
Sets the certificate trust scope
withCertificateTrustScope(const CertificateTrustScope: { readonly None: "None"; readonly Append: "Append"; readonly Override: "Override"; readonly System: "System";}
Enum Aspire.Hosting.ApplicationModel.CertificateTrustScope
CertificateTrustScope.type None: "None"
None); // クライアント信頼設定なし
await const builder: IDistributedApplicationBuilder
builder.IDistributedApplicationBuilder.build(): DistributedApplication
Builds the distributed application
build().DistributedApplication.run(cancellationToken?: cancellationToken): void
Runs the distributed application
run();証明書設定には次の制限事項があります:
- 現在、実行モードのみサポートされており、発行モードではサポートされていない
- すべての言語とランタイムがすべての信頼スコープモードをサポートしているわけではない
- Python アプリケーションは証明書信頼の Append モードをネイティブにサポートしていない
- カスタム証明書設定にはリソース内での適切なランタイムサポートが必要
- HTTPS エンドポイント API は試験的(
ASPIRECERTIFICATES001)としてマークされている