.NET 4.7.2で実行されているレガシーWPFアプリケーションから使用する必要がある、.NETCoreでgRPCサービスを作成しました。既存のWPFアプリケーションは巨大であり、すぐに.NET Coreに変換することはできず、gRPCを使用するだけの価値はありません。私の質問は、.NET 4.7.2 WPFからgRPCサービスを使用する方法はありますか?
私はついにこの問題の実用的な解決策を手に入れました:
主な問題は、リモートクライアントから自己署名SSLサーバー証明書を受け入れるソリューションを見つけることでした。これは、このシナリオでは必須です。
サーバーは、ここで提供されるようなソリューションを使用して生成された証明書を取得します(ソリューションは有効な証明書でも機能します):https://gist.github.com/mivano/356d4f0354d997370e3c2e62809cdeef
ここで言及する重要なこと:サーバーのDNSまたはIPはクライアントによって検証されるため、証明書の一部である必要があります。
gRPCサーバーはこのように構成されました(.appsettings.jsonを介して実現することもできます)。
webBuilder.ConfigureKestrel(
options =>
{
options.Listen(
IPAddress.Any,
<your port>,
listenOptions =>
{
listenOptions.UseHttps("<your.pfx path>", "<your passphrase>");
listenOptions.Protocols = HttpProtocols.Http2;
});
});
gRPCクライアント:
openssl pkcs12 -in "<pfx path>.pfx" -out "<pem path>.pem" -clcerts
.NET FrameworkでgRPCクライアントをどのように作成しますか?
チャネル:
var channelCredentials = new SslCredentials(
File.ReadAllText("<path to pem>.pem"), null, verifyPeerCallback => true);
var serviceChannel = new Channel("<DnsName from cert", <port>, channelCredentials);
var serviceProxy = new GrpcService.GrpcServiceClient(serviceChannel );
クライアントは、適切なHttpClientHandlerとアタッチされたServerCertifacteCustomValidationCallbackを使用して正規のHttpClient.Getを使用して、サーバーから証明書を動的にダウンロードするように実装することもできます。PEMは、サービスチャネルを作成する前にメモリに作成する必要があります:https://github.com/grpc/grpc/issues/8978#issuecomment-283469676
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加