我需要使用 gRPC 進行雙向流傳輸,其中客戶端是一個 .Net Framework 專案,由于遺留問題,無法升級到 .NET5 。
在閱讀微軟檔案時,我可以看到應該使用 WinHttpHandler ( https://docs.microsoft.com/en-us/aspnet/core/grpc/netstandard?view=aspnetcore-5.0 )。
但是我似乎在此設定中使用 SSL 時遇到問題,是否有人建議如何解決此問題?
我收到以下錯誤:
“InvalidOperationException:GrpcChannel 不支持具有非空引數的 SslCredentials。GrpcChannel 使用 HttpClient 進行 gRPC 呼叫,HttpClient 自動從作業系統證書存盤加載根證書。客戶端證書應在 HttpClient 上配置。參見https://aka。 ms/aspnet/grpc/certauth了解詳細資訊。”
我的服務器使用以下設定進行設定:
let cacert = File.ReadAllText(@"ca.crt");
let servercert = File.ReadAllText(@"server.crt");
let serverkey = File.ReadAllText(@"server.key");
let certificatePair = new KeyCertificatePair(servercert, serverkey);
let certList = new System.Collections.Generic.List<KeyCertificatePair>()
certList.Add(certificatePair)
let server = new Server()
server.Services.Add(EventSubscriberService.EventSubscriberServiceMethodBinder.BindService(new EventSubscriber()))
server.Ports.Add(new ServerPort("localhost", 5001,SslServerCredentials(certList,cacert,false)))
|> ignore'''
客戶端使用此設定:
let cacert = File.ReadAllText(@"ca.crt");
let clientcert = File.ReadAllText(@"client.crt");
let clientkey = File.ReadAllText(@"client.key");
let ssl = new SslCredentials(cacert, new KeyCertificatePair(clientcert, clientkey))
let channelOptions = GrpcChannelOptions()
channelOptions.HttpHandler <- new WinHttpHandler()
channelOptions.Credentials <- ssl
let channel = GrpcChannel.ForAddress("http://127.0.0.1:5001",channelOptions)
它是用 F# 撰寫的,但類似于此 C# 代碼,如果參考有助于提高可讀性。如何為 gRPC 啟用服務器端 SSL?
uj5u.com熱心網友回復:
可能以下幾行(草稿)應該作業:
open System.Net.Http
open Grpc.Net.Client
open System.Security.Cryptography.X509Certificates
let clientCert = new X509Certificate() // create according to your needs
let handler = new HttpClientHandler()
handler.ClientCertificates.Add(clientCert) |> ignore
// insecure, check your custom server cert
handler.ServerCertificateCustomValidationCallback <- fun msg cert chain e -> true
let client = new HttpClient(handler)
let channelOptions = GrpcChannelOptions(HttpClient = client)
let channel = GrpcChannel.ForAddress("http://127.0.0.1:5001", channelOptions)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/348069.html
上一篇:本機Xamarin.Android應用程式在發布模式下不斷崩潰
下一篇:使用`sed`查找重復模式
