node.js - 如何使用 SSL 证书对 API 进行身份验证?
问题描述
我需要访问服务提供商的 API(对于我的公司)所以,他们给了我一个“doc”和多种形式的 SSL 证书(.jks、.p12、.pem)我使用 NodeJS,所以我拿了.pem,里面有 2 个证书和 1 个加密的私钥。
我将 .pem 拆分为 3 个文件,mycert.crt.pem、mycert.key.pem、mycert2.crt.pem(我查看了https://www.sslshopper.com/certificate-key-matcher.html以了解哪个证书与密钥一起使用)
所以我的 NodeJS,我使用了尽可能少的模块来避免模块问题:
const cert = fs.readFileSync(path.resolve('cert', 'mycert.crt.pem'))
const key = fs.readFileSync(path.resolve('cert', 'mycert.key.pem'))
let options = {
hostname: 'https://serviceproviderurl.com',
path: 'v1/api/example',
method: 'POST',
key: key,
cert: cert
}
let req = https.request(options, function (res) {
console.log(res.statusCode)
res.on('data', function (d) {
process.stdout.write(d)
})
})
req.end()
和错误信息:
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
at Object.createSecureContext (_tls_common.js:151:17)
at Object.connect (_tls_wrap.js:1407:48)
at Agent.createConnection (https.js:125:22)
at Agent.createSocket (_http_agent.js:234:26)
at Agent.addRequest (_http_agent.js:193:10)
at new ClientRequest (_http_client.js:276:16)
at Object.request (https.js:309:10)
at Object.<anonymous> (/mnt/c/Project/test.js:74:17)
at Module._compile (internal/modules/cjs/loader.js:959:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:995:10) {
opensslErrorStack: [
'error:0907B00D:PEM routines:PEM_read_bio_PrivateKey:ASN1 lib',
'error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error',
'error:23077074:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 cipherfinal error'
],
library: 'digital envelope routines',
function: 'EVP_DecryptFinal_ex',
reason: 'bad decrypt',
code: 'ERR_OSSL_EVP_BAD_DECRYPT'
我想我错过了 3 个证书。他们也没有给我密码,这正常吗?我对 SSL 证书的使用不太了解,希望您能帮助我。
谢谢
解决方案
推荐阅读
- c - C - 将二维数组传递给函数仅打印第一行
- node.js - 使用 Express 的 Node.js 3rd 方 API 调用
- css - 如何使 flexbox 列忽略子 div 的子项的高度
- mysql - Laravel - 通过 json_extract 和 eloquent select 获取一个简单数组的值
- c - 将字符串放入结构中会引发在 C 中转储的分段错误核心
- javascript - 频道名称中的 Discord.js memberCount 按角色(node.js)
- c - 如何以返回字符串的方式更改此代码
- flutter - 谁能说出为什么会说“未定义命名参数'children'
- ios - 如何从 xamarin 表单应用程序打开默认电子邮件应用程序 - iOS 中的收件箱
- delphi-10.2-tokyo - 为什么 Delphi 64 位中的 SimpleRoundTo 无法正确舍入货币数字?