我正在为嵌入式Linux设备添加HTTPS支持。我已尝试使用以下步骤生成自签名证书:

openssl req -new > cert.csr
openssl rsa -in privkey.pem -out key.pem
openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1001
cat key.pem>>cert.pem

这是可行的,但我在Google Chrome上遇到了一些错误:

这可能不是你要找的网站!站点的安全证书不受信任!

我错过了什么吗?这是构建自签名证书的正确方法吗?


当前回答

这对我有用

openssl req -x509 -nodes -subj '/CN=localhost'  -newkey rsa:4096 -keyout ./sslcert/key.pem -out ./sslcert/cert.pem -days 365

服务器.js

var fs = require('fs');
var path = require('path');
var http = require('http');
var https = require('https');
var compression = require('compression');
var express = require('express');
var app = express();

app.use(compression());
app.use(express.static(__dirname + '/www'));    

app.get('/*', function(req,res) {
  res.sendFile(path.join(__dirname+'/www/index.html'));
});

// your express configuration here

var httpServer = http.createServer(app);
var credentials = {
    key: fs.readFileSync('./sslcert/key.pem', 'utf8'),
    cert: fs.readFileSync('./sslcert/cert.pem', 'utf8')
};
var httpsServer = https.createServer(credentials, app);

httpServer.listen(8080);
httpsServer.listen(8443);

console.log(`RUNNING ON  http://127.0.0.1:8080`);
console.log(`RUNNING ON  http://127.0.0.1:8443`);

其他回答

一般程序正确。命令的语法如下。

openssl req -new -key {private key file} -out {output file}

但是,会显示警告,因为浏览器无法通过使用已知的证书颁发机构(CA)验证证书来验证标识。

由于这是一个自签名证书,因此没有CA,您可以安全地忽略警告并继续。如果你想获得一个真正的证书,在公共互联网上任何人都可以识别,那么程序如下。

生成私钥使用该私钥创建CSR文件向CA提交CSR(威瑞信或其他公司等)在web服务器上安装从CA接收的证书根据cert类型将其他证书添加到身份验证链

我在《安全连接:使用OpenSSL创建安全证书》的一篇文章中了解了更多关于这一点的详细信息

以下是@diegows的答案中描述的选项,在文档中有更详细的描述:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days XXX

请求PKCS#10证书请求和证书生成实用程序。-2009年5月此选项输出自签名证书,而不是证书请求。这通常用于生成测试证书或自签名根CA。-新密钥参数此选项创建新的证书请求和新的私钥。争论采取多种形式之一。rsa:nbits,其中nbits是位数,生成大小为n位的RSA密钥。-键入文件名这提供了用于写入新创建的私钥的文件名。-输出文件名默认情况下,指定要写入的输出文件名或标准输出。-第n天当使用-x509选项时,指定要验证的天数的证书。默认值为30天。-节点如果指定了此选项,则如果创建了私钥,则不会对其进行加密。

文件实际上比上述更详细;我只是在这里总结了一下。

快速命令行:最低版本

“我想要一个pfx格式的自签名证书,用于www.example.com,且不会引起太大的麻烦”:

openssl req -x509 -sha256 -days 365 -nodes -out cert.crt -keyout cert.key -subj "/CN=www.example.com"
openssl pkcs12 -export -out cert.pfx -inkey cert.key -in cert.crt

我不能评论,所以我将把这作为一个单独的答案。我发现了一些公认的单线回答的问题:

一行代码在密钥中包含一个口令。一行程序使用SHA-1,在许多浏览器中,SHA-1会在控制台中抛出警告。

下面是一个简化版本,它删除了密码短语,提高了安全性以抑制警告,并在注释中包含了一个建议,即传递-subj以删除完整的问题列表:

openssl genrsa -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -sha256 -new -key server.key -out server.csr -subj '/CN=localhost'
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt

将“localhost”替换为所需的任何域。您需要逐个运行前两个命令,因为OpenSSL将提示输入密码短语。

要将两者合并为.pem文件,请执行以下操作:

cat server.crt server.key > cert.pem

现代浏览器现在如果缺少SAN(Subject Alternate Name),则会为格式良好的自签名证书抛出安全错误。OpenSSL没有提供命令行方式来指定这一点,因此许多开发人员的教程和书签突然过时了。

重新运行的最快方法是一个简短的独立conf文件:

创建OpenSSL配置文件(示例:req.cnf)[要求]distinguished_name=请求分类名称x509_extensions=v3_reqprompt=否[请求分配名称]C=我们ST=VAL=SomeCityO=我的公司OU=我的部门CN=www.company.com[v3_req]keyUsage=关键,数字签名,密钥协议extendedKeyUsage=服务器身份验证subjectAltName=@alt_names[备选名称]DNS.1=www.company.comDNS.2=公司网站DNS.3=公司网创建引用此配置文件的证书openssl req-x509-节点-天730-新密钥rsa:2048\-keyout cert.key-out cert.pem-config req.cnf-sha256

来自的配置示例https://support.citrix.com/article/CTX135602