gRPC SSL/TLS
Babel Licensing Service の gRPC チャネルを SSL/TLS で保護することは、クライアントアプリケーションとサーバーの間の通信を暗号化して安全に保つために不可欠です。SSL/TLS(Secure Sockets Layer/Transport Layer Security)は、データの整合性、機密性、真正性を保護する安全な通信プロトコルです。
Babel Licensing Service で SSL/TLS を設定するには、いくつかの手順が必要です。まず、有効な SSL/TLS 証明書を生成するか、入手します。この証明書は、サーバーの身元を証明し、通信を暗号化するために使用されます。
SSL/TLS 証明書を用意したら、それを使用するように Babel Licensing Service を設定します。そのためには、Babel Licensing Service とクライアントアプリケーションの構成設定で、証明書のパスとパスワードを指定します。
自己署名証明書
自己署名証明書は、信頼された第三者の証明機関を介さずに、同じエンティティが生成して署名するデジタル証明書です。広く認められた CA が発行する証明書とは異なり、自己署名証明書は Web ブラウザーやオペレーティングシステムで既定では信頼されません。
自己署名証明書は、開発時に特に役立ちます。信頼された機関から証明書を取得するには時間も費用もかかることがありますが、自己署名証明書ならその必要なしに安全な通信を実現できます。暗号化された通信チャネルを確立することが主な目的である、テストや開発のシナリオに最適です。
自己署名証明書を作成するには、強力なスクリプト言語でありコマンドラインシェルでもある PowerShell を使用できます。次の PowerShell コードは、自己署名証明書を生成する方法を示しています。
# Create cert
$certname = "<cert name>"
$certpassword = "<cert password>"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
# Export PFX
Export-Certificate -Cert $cert -FilePath "$certname.cer"
$mypwd = ConvertTo-SecureString -String "$certpassword" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "$certname.pfx" -Password $mypwd
# Delete from local store
$thumbprint = Get-ChildItem -Path "Cert:\CurrentUser\My" | Where-Object {$_.Subject -Match "$certname"} | Select-Object -ExpandProperty Thumbprint
Remove-Item -Path "Cert:\CurrentUser\My\$thumbprint" -DeleteKeyこの PowerShell コードは、指定された certname と certpassword で自己署名証明書を生成します。New-SelfSignedCertificate コマンドレットを使用し、サブジェクト名、キーの長さ、ハッシュアルゴリズムなどのパラメーターを指定して証明書を作成します。
次に、Export-Certificate コマンドレットと Export-PfxCertificate コマンドレットを使用して、証明書を .cer 形式と .pfx 形式でそれぞれエクスポートします。.cer ファイルには公開キーが含まれ、.pfx ファイルには証明書とともに秘密キーが含まれます。
最後に、Remove-Item コマンドレットを使用して、ローカルの証明書ストアから証明書を削除します。この手順は省略可能で、エクスポートした後に自己署名証明書がローカルの証明書ストアに残らないようにするためのものです。
この PowerShell コードで自己署名証明書を作成すれば、開発中の Babel Licensing Service に SSL/TLS を簡単に設定でき、暗号化されたチャネルで安全に通信できます。
サーバー
Secure Socket Layer(SSL)プロトコルと Transport Layer Security(TLS)プロトコルは、クライアントとサーバーの間の安全な通信を確保するうえで重要な役割を果たします。Babel Licensing Service は gRPC SSL/TLS にそのまま対応しており、ネットワーク経由でデータを送信するための安全なチャネルを確立できます。
gRPC エンドポイントの構成にある「Certificate」サブセクションでは、SSL/TLS 証明書の詳細を指定できます。
"Endpoints": {
"gRPC": {
"Url": "https://localhost:5005",
"Protocols": "Http1AndHttp2",
"Certificate": {
"AllowInvalid": true,
"Path": "<cert file>.pfx",
"Password": "<cert password>"
}
}
}ここで、自己署名証明書を使用する場合は、AllowInvalid パラメーターを true に設定できます。この構成は、自己署名証明書がよく使われる開発やテストのシナリオに対応するためのものです。
プロトコル
gRPC SSL/TLS の構成で「HTTP1AndHttp2」プロトコルを有効にすると、Babel Licensing Service の柔軟性と互換性が高まります。この構成オプションは、TLS の拡張である ALPN(Application-Layer Protocol Negotiation)が提供するプロトコルネゴシエーション機能を利用するため、SSL/TLS が有効な場合にのみ使用できます。
SSL/TLS が有効な場合、TLS レイヤーがプロトコルの仲介役となり、HTTP/1 と HTTP/2 の両方のプロトコルが同じポートで共存できます。つまり、HTTP/1 と HTTP/2 のどちらを使用するクライアントも、ポートや構成を分けることなく Babel Licensing Service と通信できます。
HTTP/1 プロトコルは、Web 上の通信に広く採用されているプロトコルです。クライアントがサーバーに要求を送信し、対応する応答を受け取る、要求/応答モデルに従います。HTTP/1 プロトコルは、さまざまなクライアントアプリケーションやフレームワークとの互換性で知られています。
一方、HTTP/2 プロトコルは、前のバージョンに比べてパフォーマンスが大きく向上しています。多重化、ヘッダー圧縮、サーバープッシュなどの機能が導入され、クライアントとサーバーの間の通信がより高速かつ効率的になります。HTTP/2 を有効にすると、これらの高度な機能を活用して、パフォーマンスと応答性を高められます。
クライアント
クライアントアプリケーションで gRPC チャネルを SSL/TLS で保護するように設定するには、次のコードを使用できます。
BabelLicensing.Configure(config =>
{
config.ServiceUrl = "https://localhost:5005";
var certificate = new X509Certificate2("<cert file>.pfx", "<cert password>");
config.UseGrpc(options =>
{
options.HttpHandler = new HttpClientHandler()
{
ClientCertificates = { certificate },
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
});
});このコードでは、config オブジェクトが Babel Licensing Service の構成を表します。ServiceUrl プロパティには、サービスの URL を設定します。この URL には、SSL/TLS の使用を示す https スキームが含まれます。
certificate 変数は、証明書ファイル(.pfx 形式)を読み込み、対応するパスワードを指定して作成します。UseGrpc メソッドは、コールバックを通じて gRPC チャネルのオプションを設定します。このコールバックで、ClientCertificates プロパティを指定した HttpClientHandler を設定します。これにより、クライアントは SSL/TLS ハンドシェイク中に適切な証明書を提示します。
さらに、ServerCertificateCustomValidationCallback には HttpClientHandler.DangerousAcceptAnyServerCertificateValidator を設定します。このコールバックは既定のサーバー証明書の検証を省略し、Babel Licensing Service が提示するどのサーバー証明書も受け入れます。これは開発とテストの用途には適していますが、本番環境では慎重に扱う必要があります。
クライアントアプリケーションをこのように設定すると、SSL/TLS を使用した安全な gRPC チャネルが確立され、Babel Licensing Service と通信できます。