C#通过gRPC连接Concordium区块链API出现SSL连接异常问题
gRPC SSL连接错误排查方向
- 自签证书校验问题
Concordium本地节点默认使用自签SSL证书,.NET HttpClient默认开启严格的SSL证书校验,会拦截自签、域名不匹配、过期的证书,而BloomRPC默认跳过无效证书校验,这是两类客户端表现不一致的最常见原因。
可以临时添加如下配置测试,确认是否为证书校验导致的问题:
// 创建channel时添加配置 using var channel = GrpcChannel.ForAddress("https://192.168.1.18:10001", new GrpcChannelOptions { HttpHandler = new HttpClientHandler { // 仅测试使用,生产环境需替换为明确的证书校验逻辑,避免安全风险 ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true, // 明确指定TLS版本,适配gRPC要求的TLS 1.2及以上版本 SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13 } });
如果测试后可以正常调用,后续可以将节点的SSL证书导出后配置到客户端信任列表,或者在校验逻辑中明确匹配证书指纹即可。
- 检查HTTP/2支持
gRPC依赖HTTP/2协议,需要确认运行客户端的操作系统支持HTTP/2:Windows环境需要Windows 10 1607版本及以上,Linux环境需要libcurl 7.38.0及以上版本。同时请确保使用的Grpc.Net.Client Nuget包版本适配.NET Core 3.1环境,建议使用2.x系列的稳定版本。 - 调整调用方式
你当前使用的是同步调用方式,可尝试切换为异步调用PeerVersionAsync,避免同步调用在部分.NET Core 3.1场景下出现的上下文阻塞问题:
var reply = await client.PeerVersionAsync(request, metadata);
内容的提问来源于stack exchange,提问作者Aidal
相关产品推荐
相关产品推荐

