我是谁让https.request()信任我的内部签名服务器证书。以下是我在v0.10.25中运行的代码的快速示例:
var options = {
hostname: 'encrypted.mydomain.local',
port: 443,
path: '/',
method: 'GET'
};
var https = require('https')
https.request(options)
我在Windows系统上运行它,我的内部根CA在系统级别受到信任,但每当我发出这样的请求时,我都会得到异常
events.js:72
throw er; // Unhandled 'error' event
^
Error: CERT_UNTRUSTED
at SecurePair.<anonymous> (tls.js:1370:32)
at SecurePair.EventEmitter.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:982:10)
at CleartextStream.read [as _read] (tls.js:469:13)
at CleartextStream.Readable.read (_stream_readable.js:320:10)
at EncryptedStream.write [as _write] (tls.js:366:25)
at doWrite (_stream_writable.js:223:10)
at writeOrBuffer (_stream_writable.js:213:5)
at EncryptedStream.Writable.write (_stream_writable.js:180:11)
at write (_stream_readable.js:583:24)
稍微详细一点,这一切都发生在我试图用于身份验证的node-atlassian-crowd模块内部
答案 0 :(得分:7)
您需要在选项中添加ca: cafile.pem
行。有关详细信息,请参阅http://nodejs.org/api/https.html#https_https_request_options_callback。
相关部分:
还可以指定tls.connect()中的以下选项。但是,globalAgent会默默地忽略这些。
pfx:用于SSL的证书,私钥和CA证书。默认为null。
key:用于SSL的私钥。默认为null。
passphrase:私钥或pfx的密码短语。默认为null。
cert:要使用的公共x509证书。默认为null。
ca:用于检查远程主机的授权证书或授权证书数组。
在应用程序启动期间,使用类似var casigningcert = fs.readFileSync('keys/ca-certsigning-cert.pem')
的内容读入CA的证书文件,然后在您的选项中使用它,这应该类似于:
var options = {
hostname: 'encrypted.mydomain.local',
port: 443,
path: '/',
method: 'GET',
ca: casigningcert
};