我想在 Ubuntu 12.04 上创建一个自签名 DSA 证书,用于 Web 服务器和 TLS 1.2(HTTPS)连接。
我发现您可以运行以下命令来创建 RSA:
openssl genrsa -out server.key 3072
但是我需要以下属性:
- 使用常规 DSA 算法(不是 ECDSA)的 3072 位密钥长度
- 使用 384 位的 SHA2 加密哈希函数
- 使用“完美前向保密”选项
- 将 AES 256 指定为对称密码的第一优先顺序
- 不需要对私钥进行加密(以允许无人值守重启)。
有人能帮助我提供上述选项所需的参数吗?
当 TLS 会话启动时,如何确保它生成新的随机签名值钾每次?这显然对安全至关重要算法。或者这是使用 OpenSSL 自动完成的吗?
我找到了这个 TLS 1.2 密码套件TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
这里我该如何告诉它使用它?
提前致谢。
答案1
无论你在做什么,根据你提出这个问题的方式,你很有可能做错了。如果你在某处发现一篇博客文章告诉你需要做这做那,不要只是听从它,而没有真正了解它说了什么。我之所以这么说,是因为你要求的大多数功能与创建自签名 DSA 证书无关。
相反,发布一个问题,询问你实际上想要实现什么。解决方案可能并不是你想象的那样。
但既然您问了,下面就是生成 3072 位自签名 DSA 证书的方法:
openssl dsaparam -out params.pem 3072
openssl gendsa -out key.pem params.pem
openssl req -new -key key.pem -out req.pem
openssl x509 -req -in req.pem -signkey key.pem -out certificate.cer
答案2
虽然 SHA-384 可以与 DSA 一起使用,但这种组合没有标准 OID,因此 OpenSSL 无法编码自签名证书的“签名算法”部分。标准 OID 已针对仅使用 SHA-1、SHA-224 和 SHA-256 的 DSA 进行了定义。对于自签名,您必须放宽“仅使用 SHA-384”的要求。由于自签名的加密值无论如何都是零(它在那里仅有的因为证书具有“签名”的非可选字段,并且可以用大约正确大小的一些随机字节替换,所以这应该不是什么困难。
类似地,DSA 最初被定义为使用 512 到 1024 位范围内的模数,然后是正好 1024 位的模数,不小于,也不更多的. 最新版本的标准(FIPS 186-4)允许更长的模数,但选择受限:仅 1024、2048 和 3072 位,子组大小为 160、224 或 256 位(有关允许的组合,请参阅第 15 页)。基本上,使用 1024 位以外的模数将意味着互操作性问题(使用 DSA 已经意味着互操作性问题,因为实际上没有人这样做,因此这种支持在部署的实现中充其量只是经过了不良测试)。
(顺便说一句,这意味着在 DSA 中使用输出大于 256 位的哈希函数是完全无用的,因为安全性将被限制在 256 位组的安全性,即非常合理的“128 位”安全级别。)
随机数的生成钾OpenSSL 自动为每个签名设置值,因此您不必担心(这已经很难正确完成;如果库用户必须自己做,那就很简单了绝不正确完成)。
OpenSSL 允许配置许多密码套件;请参阅文档。在 SSL 中,传统上,服务器遵循客户端偏好来选择密码套件,但 OpenSSL(库)强制执行服务器偏好(即强制密码套件为特定套件,只要客户端支持它,即使它没有出现在客户端发送的列表中的第一个)。请注意,OpenSSL 是一个图书馆:你只能通过一些应用程序代码来使用它用途OpenSSL,您只能通过该应用程序代码的配置选项来配置 OpenSSL 的行为,这可能会或可能不会让您利用该选项来应用任意 SSL 级别的选项。