计算机名和ip不匹配,主机名/ IP与证书的altname不匹配

我正在尝试使用带有自签名证书的Node.js 0.8.8创建TLS服务器/客户端设置。

基本的服务器代码如下所示

var tlsServer = tls.createServer({

key: fs.readFileSync('server-key.pem'),

cert: fs.readFileSync('server-cert.pem')

}, function (connection) {

// [...]

});

tlsServer.listen(3000);

现在,当我尝试连接到该服务器时,我使用以下代码:

var connection = tls.connect({

host: '192.168.178.31',

port: 3000,

rejectUnauthorized: true,

ca: [ fs.readFileSync('server-cert.pem') ]

}, function () {

console.log(connection.authorized);

console.log(connection.authorizationError);

console.log(connection.getPeerCertificate());

});

如果我删除线

ca: [ fs.readFileSync('server-cert.pem') ]

从客户端代码,Node.js抛出一个错误告诉我DEPTH_ZERO_SELF_SIGNED_CERT。据我了解,这是由于它是一个自签名证书,并且没有其他方信任此证书。

如果我删除

rejectUnauthorized: true,

同样,错误也消失了-但connection.authorized等于错误false,实际上意味着我的连接未加密。无论如何,使用getPeerCertificate()我可以访问服务器发送的证书。由于我想强制执行加密连接,因此我了解我可能不会删除此行。

现在,我了解到可以使用该ca属性指定我希望Node.js信任的任何CA。TLS模块的文档表明,将服务器证书添加到ca阵列就足够了,然后一切都应该很好。

如果这样做,该错误消失了,但是我得到了一个新错误:

Hostname/IP doesn't match certificate's altnames

对我来说,这意味着CA现在基本上是受信任的了,因此现在还可以,但是证书是为我使用的另一台主机制作的。

我使用创建证书

$ openssl genrsa -out server-key.pem 2048

$ openssl req -new -key server-key.pem -out server-csr.pem

$ openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem

如文档所示。创建CSR时,系统会询问我一些常见的问题,例如国家,州,…和通用名(CN)。正如“在网络上”告诉您SSL证书时,您 没有

提供您的名称作为CN,而是您要使用的主机名。

这可能是我失败的地方。

我试过了

localhost

192.168.178.31

eisbaer

eisbaer.fritz.box

最后两个是我的计算机的本地名称和标准本地名称。

知道我在做什么错吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值