c# - 如何让我的 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 上完美运行。
解决方案
推荐阅读
- java - Spinner 使用依赖于另一个 Spinner 的 SQLite 填充
- php - 根据数据库记录或先前的编辑状态将复选框的状态设置为“检查”?
- db2 - 列出节点目录抛出 SQL1027N
- java - 我可以创建开放 API 2 文档(通过 swagger),但我无法创建开放 API 3 文档
- ibm-mq - 如何解决 - MQJE001:发生 MQException:完成代码 2,原因 2009
- sql - 比较连续行中的两个值
- powershell - Azure DevOps API:无法反序列化正文值
- r - 基于变量 R 的具有不同形状的散点图
- python - tensorflow.python.framework.errors_impl.NotFoundError:培训/ssd_mobilenet_v2_coco.config;没有这样的文件或目录
- node.js - MongoDB:查询以匹配数组中的每个元素与条件