如何使用openssl *以最小的功率创建CA *

时间:2015-02-21 15:45:34

标签: security ssl openssl certificate pki

已经有关于使用openssl生成自签名证书的答案,例如this。但是,我想要的是一个证书,它只能对预定义网站的流量进行身份验证和加密。

由以下命令生成的证书

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

将基本约束/证书颁发机构设置为YES,这意味着它可用于签署其他证书。假设我的域名为mystackoverflow.com,窃取我的私钥的攻击者不仅可以与mystackoverflow.com进行MITM连接,还可以facebook.comgoogle.com,因为他可以使用所述私钥签署伪造证书并获得我的系统信任。

所以问题是,如何最大限度地降低此证书的功能,使其无法签署其他密钥,签名代码,加密电子邮件或执行除保护https连接到特定网站以外的任何其他内容?

2 个答案:

答案 0 :(得分:1)

  

..窃取私钥的攻击者..

     

所以问题是,如何最大限度地降低此证书的功能,使其无法签署其他密钥,签名代码,加密电子邮件或执行除保护https连接到特定网站以外的任何其他内容?

如果您担心攻击者可能窃取证书的密钥然后使用它签署其他内容,那么您就不应该创建自签名证书。而是先创建自己的CA.然后创建一个叶证书,该证书不能用于签署证书并由您自己的CA签名。完成此操作后,将CA的私钥放在远处(离线甚至销毁它,如果您不需要它来签署更多证书)。

通过此设置,如果获取其私钥,攻击者仍然可以窃取证书的身份。但由于此证书不是CA本身(与普通的自签名证书不同),因此不能用于签署新证书。

答案 1 :(得分:1)

  

我想要的是一个证书,除了对预定义网站的流量进行身份验证和加密外,什么都不做......   所以问题是,如何最大限度地降低此证书的功能,使其无法签署其他密钥,签名代码,加密电子邮件或执行除保护https连接到特定网站以外的任何其他内容?

这个问题有三个部分。

首先是如何“验证和加密[stuff]”。这是由密钥用法和扩展密钥用法处理的。特别是,digitalSignature(签名密钥交换,如Diffie-Hellman),keyEncipherment(密钥传输,如RSA),serverAuth等等。

其次是如何来制作证书。对于最终实体证书(即服务器证书),删除CA=true基本约束并删除keyCertSign位。您仍然需要一个能够签署最终实体证书的中间CA,因为这是应用“此CA只能为这些名称颁发”的策略。

第三是如何应用类似“此CA只能为这些名称发布”的策略。根据IETF的PKIX in RFC 5280规则,您可以在具有名称约束扩展的CA证书中执行此操作。有关详细信息,请参阅第4.2.1.10节。

CA/Browser Forum rules下,您可以执行此操作,因为它们具有策略对象。但我不知道如何在CA / B下进行(可能与IETF相同)。

你必须小心IETF装备。他们有扩展,但他们没有政策。因此,您需要确保您在内部和现有扩展中工作,而不是伪造新策略。有关详细信息,请参阅PKIX邮件列表中的OID for certificates issued under IETF policy?

CA / B论坛很重要,因为浏览器遵循CA / B论坛规则,而不是IETF。 CA / B论坛和IETF在几个关键领域有不同的要求。这就是为什么使用OpenSSL创建的证书(遵循IETF指南)无法在浏览器中验证(遵循CA / B论坛指南)。


  

由以下命令生成的证书:openssl req ...

使用 是如何做到的,但它的不是今天如何做到这一点。今天它产生格式错误的证书(可能会也可能不会导致问题,具体取决于您的用户代理)。对于你引用的问题,一个答案特别告诉你为什么它不正确以及如何做。