首页 > 解决方案 > 如何让我的 C# 客户端应用程序接受我的 NodeJS 服务器证书

问题描述

我正在按照本教程制作 PEM 证书在 NodeJS 服务器和 NodeJS 客户端之间工作。

我的情况类似,在服务器上我有一个 NodeJS 服务器,但是在客户端,我有一个 C# 客户端应用程序(.NET Framework 4.7.2)。

只是为了测试,在 C# 客户端应用程序中,我们有:

bool pingSuccess = false;
using (var wb = new WebClient())
{
         string response = wb.UploadString(nodeJSURL, "POST", "{\"message\":\"ping\"}");
         if (response == "success") pingSuccess = true;
}
if (!pingSuccess) throw new HttpListenerException(503, "Il server NodeJS risulta non raggiungibile dall'indirizzo " + nodeJSURL);

但是(显然)我得到了这个预期的错误:

Web 客户端异常:底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系

在此处输入图像描述

我试图做的是尝试应用 Anders Brownworth 在的 NodeJS客户端教程中使用的过程,将这段代码适应 C#:

var fs = require('fs'); 
var https = require('https'); 
var options = { 
    hostname: 'localhost', 
    port: 4433, 
    path: '/', 
    method: 'GET', 
    ca: fs.readFileSync('ca-crt.pem') 
}; 
var req = https.request(options, function(res) { 
    res.on('data', function(data) { 
        process.stdout.write(data); 
    }); 
}); 
req.end();

但是我在 C# 中很新,如何将这段代码重写为等效并在 C# 中使用它?

换句话说,我需要的是让我的 C# 客户端代码接受我的 NodeJS 服务器提供的证书。我寻找了其他解决方案,但我发现它们太复杂了,有没有一种简洁干净的方法呢?

我尝试了一种解决方法,在 HTTP 请求之前添加以下行:

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; });

有效,但这不是我需要的,因为我只想信任我的 NodeJS 服务器提供的证书。但是,由于这种解决方法,我能够验证应用程序的其余部分是否正常工作。


旁注:我按照上面已经提到的教程创建了我的 PEM 证书,但使用的是 Wind64 OPENSSL,它在 Windows 10 上完美运行。

标签: c#node.jscertificatetls1.2

解决方案


推荐阅读