我正在尝试使用以下命令生成 RSA 1024 密钥对(公共/私有)
openssl genrsa -des3 -out server.key 1024
在 server.key 文件中,只有 RSA 私有块存在,那么公钥到哪里去了?
我正在尝试使用以下命令生成 RSA 1024 密钥对(公共/私有)
openssl genrsa -des3 -out server.key 1024
在 server.key 文件中,只有 RSA 私有块存在,那么公钥到哪里去了?
RSA 私钥格式包括所有公共元素。当您获得私钥时,您实际上同时拥有私钥和公钥。
这在PKCS#1(领先的 RSA 标准)中有所描述;私钥格式是一个编码的 ASN.1 结构,其中包含:
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
公钥实际上包含在私钥结构中的模数和公钥指数中,如上所示。
现在你的问题可能是:“如果我想要‘单独’的公钥怎么办?”
OpenSSL 存在于 X.509 世界中。在X.509中,公钥不作为独立值存在;并且没有单独的公钥的标准文件格式。应用程序应该使用它在证书中找到的公钥。这在SSL/TLS协议(这是 OpenSSL 的主要支持目标)中非常明显:当客户端发送其公钥时,它会将其作为证书发送。因此,如果您想要文件中的公钥,请安排将其存储在证书中(可能是自签名的)。带有标志的 OpenSSL req子命令可以提供帮助。-x509
当然,每条规则都有例外,所以也有一种方法可以“只”从私钥中获取公钥;这就是@uwotm8 在他的回答中显示的内容。但是,生成的公钥如下所示:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDzYY+BpIuKouSnoemSwHwC25uW
Xc0zX1gl8NtG5UQP2U4Lda0s5XbBJm4O2W+RkOgR1f1d5cGOXRPd6Q9ntw3MYQv6
ubsMRZUaOT4vCpykWfPi/VfsQEPlWHw2pulYAyumx/sw8tX5i9NC2e2bY4eWwo22
BELyXpNdoGozSje8PQIDAQAB
-----END PUBLIC KEY-----
在任何地方都不能真正使用,因为这是一种非标准格式。
(从技术上讲,这是一个出现在 X.509 证书中的SubjectPublicKeyInfo元素,但它不应该出现在 X.509 证书之外。)
公钥需要从私钥派生。试试这个命令:
openssl rsa -in server.key -pubout