gpt4 book ai didi

Node.js https pem 错误 : error:0906D06C:PEM routines:PEM_read_bio:no start line

转载 作者:搜寻专家 更新时间:2023-10-31 23:34:49 26 4
gpt4 key购买 nike

我从证书颁发机构获得了这些文件:

  • domain.com.p7b
  • domain.com.crt
  • domain.com.ca-bundle

我尝试了这个小代码:

var express = require('express');
var app = express();
var fs = require("fs");
var https = require('https');

var privateKey = fs.readFileSync('domain.com.p7b').toString();
var certificate = fs.readFileSync('domain.com.crt').toString();
var ca_bundle = fs.readFileSync('domain.com.ca-bundle').toString();

var credentials = { key: privateKey,
ca : ca_bundle,
cert: certificate};


https.createServer(credentials,app).listen(8080, function () {
console.log('Example app listening on port 8080!');
});

启动脚本后,出现以下错误:

(err):     at Object.createSecureContext (_tls_common.js:87:19)
(err): at Server (_tls_wrap.js:721:25)
(err): at new Server (https.js:17:14)
(err): at Object.exports.createServer (https.js:37:10)
(err): at Object.<anonymous> (/utec_temp/https/web.js:27:7)
(err): at Module._compile (module.js:435:26)
(err): at Object.Module._extensions..js (module.js:442:10)
(err): at Module.load (module.js:356:32)
(err): at Function.Module._load (module.js:311:12)
(err): Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
(err): at Error (native)
(err): at Object.createSecureContext (_tls_common.js:87:19)
(err): at Server (_tls_wrap.js:721:25)
(err): at new Server (https.js:17:14)
(err): at Object.exports.createServer (https.js:37:10)
(err): at Object.<anonymous> (/utec_temp/https/web.js:27:7)
(err): at Module._compile (module.js:435:26)
(err): at Object.Module._extensions..js (module.js:442:10)
(err): at Module.load (module.js:356:32)
(err): at Function.Module._load (module.js:311:12)

google 上的所有示例都使用自签名证书,但是当我需要在真实环境中工作时会发生什么?

我的小代码在开发中使用自签名 key ,按照这个例子:

我研究了一下,发现了这个:

但我无法更正错误。

我也减少到一个文件:

var credentials = {cert: certificate};      

错误是一样的。所以我认为当我将这些证书从 Windows 移动到 Unix 时可能是格式错误。我用了dos2unix工具,报错也是一样。

我的 Node 版本是4.4.7

感谢任何帮助。

提前致谢!

最佳答案

解释

我来晚了,但我希望这对您有所帮助。

如果有人使用这些文件:pb7、crt、ca-bundle 并遇到此错误:

error:0906D06C:PEM routines:PEM_read_bio:no start line

这意味着这些文件是错误的、损坏的或者是为其他环境(例如 Windows)请求的,正如这篇文章所说:https://serverfault.com/a/317038

因此,在我的案例中,解决方案是申请新证书,在规范中,我添加了以下内容:

  • Linux 兼容性

同样重要的是保存用于创建 csr 的私钥并将其发送给证书提供商(我调用了 initial.key)。

示例 http://www.backwardcompatible.net/155-Setting-up-real-SSL-Nodejs-Express

最后,您的提供商将向您发送一个包含多个文件的压缩包。您的 Node 应用程序只需要一个 .crt 文件:

var privateKey = fs.readFileSync('/some/folder/initial.key').toString();
var certificate = fs.readFileSync('/some/folder/certificate.crt').toString();
var credentials = {key: privateKey, cert: certificate};

注意:certificate.ca-bundle 和 certificate.crt 文件必须由证书提供商发送。

建议

当您使用 https 证书、域或子域时,您不应直接使用证书或配置应用程序。

Node.js、java、python 和其他语言都有使用https 发布安全端点的库。这是通过手动加载您购买的或自签名的证书来实现的。 这可行,但这应该是最后的选择

例如:开发团队在启动应用程序时会遇到问题,因为源代码直接需要证书和其他配置。测试部署需要特定的证书等

对于干净、可维护和可扩展的架构,并遵循模式 separation of concerns (SoC) 不要修改您的源代码并将这项工作或复杂性留给 apache、nginx、haproxy、aws elb 或某些负载均衡器。

enter image description here

这里有一些关于如何在另一层而不是在应用程序中启用 https 的示例:

apache 2.2 示例

SSLCertificateFile /some/folder/certificate.crt
SSLCertificateKeyFile /some/folder/initial.key
SSLCertificateChainFile /some/folder/certificate.ca-bundle

nginx 示例

server {

listen 443;

ssl on;
ssl_certificate /etc/ssl/your_domain_name.pem; (or bundle.crt)
ssl_certificate_key /etc/ssl/your_domain_name.key;

server_name your.domain.com;
...

}

这种复杂性必须对开发团队透明,并且应该由系统管理员、基础架构或与贵公司网络相关的其他团队管理。

关于Node.js https pem 错误 : error:0906D06C:PEM routines:PEM_read_bio:no start line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com