已经有关于使用openssl (如这 )生成自签名证书的答案。但是,我想要的是一个证书,它只能对预定义网站的流量进行身份验证和加密。
由以下命令生成的证书
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365将基本约束/证书授权设置为YES,这意味着可以使用它对其他证书进行签名。假设我的域名是mystackoverflow.com,盗取我的私钥的攻击者不仅可以将我的私钥连接到mystackoverflow.com,而且还可以窃取facebook.com或google.com,因为他可以用该私钥签署伪造证书,并得到我的系统的信任。
因此,问题是,我如何最小化这个证书的威力,使它不能签署额外的密钥,签名代码,加密电子邮件或做任何事情,除了保护https连接到一个特定的网站?
发布于 2015-02-21 21:23:58
我想要的是一个证书,除了认证和加密预定义网站的流量.因此,问题是,我如何最小化这个证书的威力,使它不能签署额外的密钥,签名代码,加密电子邮件或做任何事情,除了保护https连接到一个特定的网站?
这个问题有三个部分。
首先是如何“认证和加密东西”。这是由密钥使用和扩展密钥使用处理的。特别是digitalSignature (签名密钥交换,如Diffie-Hellman)、keyEncipherment (密钥传输,如RSA)、serverAuth等比特。
第二,如何不铸币证书。对于end实体证书(即服务器证书),您可以删除CA=true basic约束,并删除keyCertSign位。您仍然需要一个具有签署end实体证书的能力的中间CA,因为这是应用“此CA只能为这些名称发出”策略的地方。
第三,如何应用诸如“此CA只能为这些名称颁发”这样的策略。根据IETF的RFC 5280中的PKIX规则,您可以在带有名称约束扩展的CA证书中这样做。详情见4.2.1.10节。
在CA/浏览器论坛规则下,您可以这样做,因为它们有策略对象。但我不知道如何在CA/B (可能与IETF相同)下进行操作。
你必须小心IETF设备。他们有扩展,但他们没有政策。因此,您需要确保您正在内部和现有的扩展中工作,而不是伪造新的策略。有关更多细节,请参见PKIX邮件列表上的根据IETF策略签发的证书的OID?。
CA/B论坛很重要,因为浏览器遵循CA/B论坛规则,而不是IETF。CA/B论坛和IETF在几个关键领域有不同的要求。这就是为什么使用OpenSSL创建的证书(遵循IETF准则)在浏览器(遵循CA/B论坛指南)中无法验证的原因。
由以下命令生成的证书:
openssl req ...
用来做它,但今天它不是怎么做的。今天,它会生成格式错误的证书(根据用户代理的不同,该证书可能会引起问题,也可能不会造成问题)。对于你引用的问题,有一个特别的答案告诉你为什么不正确,以及如何去做。
发布于 2015-02-21 16:35:21
。。一个盗取我私钥的袭击者。 因此,问题是,我如何最小化这个证书的威力,使它不能签署额外的密钥,签名代码,加密电子邮件或做任何事情,除了保护https连接到一个特定的网站?
如果您担心攻击者可能窃取证书的密钥,然后使用该密钥对其他内容进行签名,则不应创建自签名证书。相反,首先创建您自己的CA。然后创建一个不能用于签署证书并由您自己的CA对其进行签名的叶证书。一旦完成,将CA的私钥放在很远的地方(离线,如果您不需要它来签署更多的证书,甚至销毁它)。
使用此设置,攻击者仍然可以窃取证书的身份,如果它获得其私钥。但是,由于此证书本身不是CA (与正常的自签名证书不同),因此不能用于对新证书进行签名。
https://stackoverflow.com/questions/28647657
复制相似问题