如何使用OpenSSL创建自签名证书

我正在向嵌入式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:

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

我想念什么吗? 这是构建自签名证书的正确方法吗?


#1楼

您可以通过以下命令执行此操作:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

如果您不想使用密码来保护私钥,也可以添加-nodesno DES缩写)。 否则,它将提示您输入“至少4个字符”的密码。

您可以用任何数字替换days参数(365)以影响到期日期。 然后,它将提示您输入“国家名称”之类的内容,但是您只需按Enter并接受默认值即可。

添加-subj '/CN=localhost'以取消有关证书内容的问题(将localhost替换为所需的域)。

除非您以前将自签名证书导入浏览器,否则它们不会与任何第三方进行验证。 如果需要更高的安全性,则应使用由证书颁发机构 (CA)签名的证书


#2楼

这是@diegows的答案中描述的选项,从文档中进行了更详细的描述

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

PKCS#10证书申请和证书生成实用程序。

 -x509 

此选项输出自签名证书而不是证书请求。 通常用于生成测试证书或自签名的根CA。

 -newkey arg 

此选项创建一个新的证书请求和一个新的私钥。 该参数采用以下几种形式之一。 rsa:nbits (其中nbits是位数)会生成nbits大小的RSA密钥。

 -keyout filename 

这给出了将新创建的私钥写入的文件名。

 -out filename 

默认指定要写入的输出文件名或标准输出。

 -days n 

当使用-x509选项时,它指定认证证书的天数。 默认值为30天。

 -nodes 

如果指定了此选项,则如果创建了私钥,则不会对其进行加密。

该文档实际上比上述文档更详细; 我在这里总结一下。


#3楼

我建议添加-sha256参数,以使用SHA-2哈希算法,因为主要的浏览器都在考虑将“ SHA-1证书”显示为不安全。

来自接受的答案的相同命令行-@diegows添加了-sha256

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

有关更多信息,请访问Google安全性博客

更新于2018年5月。正如评论中许多指出的那样,使用SHA-2不会为自签名证书添加任何安全性。 但是我仍然建议使用它作为不使用过时/不安全的加密哈希函数的好习惯。 有关为什么完整证书的解释完全可以理解为基于SHA-1的最终实体证书之上的证书?


#4楼

我想念什么吗? 这是构建自签名证书的正确方法吗?

创建自签名证书很容易。 您只需要使用openssl req命令。 创建一个可供最多客户选择的客户端(例如浏览器和命令行工具)使用的客户端可能很棘手。

这很困难,因为浏览器有自己的一套要求,并且比IETF更具限制性。 浏览器使用的要求记录在CA /浏览器论坛中 (请参阅下面的参考资料)。 限制出现在两个关键领域:(1)信任锚,和(2)DNS名称。

现代浏览器(例如我们在2014/2015年使用的warez)需要一个链接回信任锚的证书,并且他们希望DNS名称以特定方式显示在证书中。 浏览器正在积极反对自签名服务器证书。

某些浏览器不能完全轻松地导入自签名服务器证书。 实际上,您无法使用某些浏览器,例如Android的浏览器。 因此,完整的解决方案是成为您自己的权威。

如果没有自己的权限,则必须正确设置DNS名称,以使证书获得最大的成功机会。 但是我鼓励你成为自己的权威。 成为您自己的权威很容易,它将回避所有信任问题(谁比自己更信任?)。


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

这是因为浏览器使用预定义的信任锚列表来验证服务器证书。 自签名证书不会链接回受信任的锚。

避免这种情况的最佳方法是:

  1. 创建您自己的权限(即成为CA
  2. 为服务器创建证书签名请求(CSR)
  3. 使用您的CA密钥签署服务器的CSR
  4. 在服务器上安装服务器证书
  5. 在客户端上安装CA证书

第1步- 创建您自己的权限仅意味着创建带有CA: true的自签名证书CA: true且正确的密钥用法。 这意味着主题颁发者是同一实体,在“ 基本约束”中将CA设置为true(也应将其标记为关键),密钥用法为keyCertSigncrlSign (如果使用的是CRL),以及主题密钥标识符 (SKI) )与授权机构密钥标识符 (AKI)相同。

要成为自己的证书颁发机构,请参阅* 如何与证书颁发机构签署证书签名请求? 在堆栈溢出。 然后,将您的CA导入浏览器使用的信任库中。

当您征求诸如StartcomCAcert之类的CA服务时,步骤2-4大致就是您现在要对面向公众的服务器执行的操作。 步骤1和5使您可以避开第三方权限,而充当自己的权限(谁比自己更信任?)。

避免浏览器警告的下一个最佳方法是信任服务器的证书。 但是某些浏览器(例如Android的默认浏览器)不允许您这样做。 因此它将永远无法在平台上运行。

浏览器(和其他类似的用户代理) 信任自签名证书的问题将在物联网(IoT)中成为一个大问题。 例如,当您连接恒温器或冰箱进行编程时会发生什么? 答案是,就用户体验而言,没有任何好处。

W3C的WebAppSec工作组

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值