有谁知道如何使用 OpenSSL 为以下公钥类型生成证书:
- DSA - 用于
DHE_DSS
密钥交换。 - Diffie-Hellman - 用于
DH_DSS
和DH_RSA
密钥交换。 - ECDH - 用于
ECDH_ECDSA
和ECDH_RSA
密钥交换。 - ECDSA - 用于
ECDHE_ECDSA
密钥交换。
我可以在网上找到的大部分内容都会教您如何生成 RSA 类型证书。
有谁知道如何使用 OpenSSL 为以下公钥类型生成证书:
DHE_DSS
密钥交换。DH_DSS
和DH_RSA
密钥交换。ECDH_ECDSA
和ECDH_RSA
密钥交换。ECDHE_ECDSA
密钥交换。我可以在网上找到的大部分内容都会教您如何生成 RSA 类型证书。
对于 DSA 密钥对,请使用以下命令:
openssl dsaparam -out dsakey.pem -genkey 1024
其中“1024”是以位为单位的大小。第一个 DSA 标准要求大小必须是 64 的倍数,在 512..1024 范围内。然后另一个版本不推荐使用低于 1024 的大小,因此有效的 DSA 密钥大小的长度为 1024 位,仅此而已。当前版本指定有效 DSA 密钥的长度为 1024、2048 或 3072 位。OpenSSL 接受其他长度。如果要最大化互操作性,请使用 1024 位。
对于 ECDSA 密钥对,请使用:
openssl ecparam -genkey -out eckey.pem -name prime256v1
要查看 OpenSSL 支持哪些曲线名称,请使用: openssl ecparam -list_curves
(为了获得最佳的互操作性,请遵循 NIST 曲线 P-256,OpenSSL 以“prime256v1”的名称知道该曲线。)
拥有 DSA 或 ECDSA 密钥对后,您可以生成包含公钥并使用私钥签名的自签名证书:
openssl req -x509 -new -key dsakey.pem -out cert.pem
(将“dsakey.pem”替换为“eckey.pem”以使用上面生成的 EC 密钥。)
对于 Diffie-Hellman(有或没有椭圆曲线),事情更复杂,因为 DH 不是签名算法:
虽然 OpenSSL库具有颁发包含 DH 公钥的证书所需的支持;此页面可能包含指针。挑战在于说服命令行工具OpenSSL去做。在 OpenSSL 文档的丛林中,我还没有找到一个完整的方法来做到这一点。不过,密钥对很容易生成。
要使用 OpenSSL 命令行工具生成 DH 密钥对,您必须分两步完成:
openssl dhparam -out dhparam.pem 1024
openssl genpkey -paramfile dhparam.pem -out dhkey.pem
对于 ECDH 密钥对,请使用以下命令:
openssl ecparam -out ecparam.pem -name prime256v1
openssl genpkey -paramfile ecparam.pem -out ecdhkey.pem
但是,包含 ECDH 公钥的证书的格式恰好与包含 ECDSA 公钥的证书的格式完全相同;实际上,该格式包含“EC 公钥”,但没有指明预期的算法(ECDH 或 ECDSA)。因此,ECDSA 的任何私钥和证书(用于生成 ECDSA 签名的私钥、自签名证书或由任何其他 CA 签名的证书)都适用于 ECDH-* 密码套件。
我不知道如何使用 OpenSSL 命令行工具生成的一种情况是静态 Diffie-Hellman(非 EC)证书。但是请注意,OpenSSL 也不支持带有静态 DH 密码套件的 SSL/TLS,因此即使您可以生成证书,它也不适用于 OpenSSL。
(事实上,没有人在实践中使用静态 DH。)
只是挖掘一个老问题。我最近需要为测试目的创建一个 DH 证书。这是如何做到的。首先根据汤姆的回答创建 DH 参数和私钥:
openssl dhparam -out dhparam.pem 1024
openssl genpkey -paramfile dhparam.pem -out dhkey.pem
接下来创建公钥文件:
openssl pkey -in dhkey.pem -pubout -out dhpubkey.pem
现在您需要一个 CSR 文件。CSR 是自签名的,这显然不能用于 DH,因为 DH 不是签名算法。但是无论如何都要为不同的密钥创建一个(可以签名的密钥,例如 RSA)。要创建 RSA 密钥和关联的 CSR:
openssl genrsa -out rsakey.pem 1024
openssl req -new -key rsakey.pem -out rsa.csr
最后,您从 RSA CSR 和 DH 公钥生成 DH 证书。无法创建自签名 DH 证书,因为(如上所述)DH 不是签名算法。因此,您需要设置 CA 证书/密钥。在这个例子中,我假设你之前已经创建了一个 CAkey.pem 和 CAcert.pem:
openssl x509 -req -in rsa.csr -CAkey CAkey.pem -CA CAcert.pem -force_pubkey dhpubkey.pem -out dhcert.pem -CAcreateserial
您的 DH 证书将在 dhcert.pem