X.509:私钥/公钥

47

我们正在尝试实现与合作伙伴之一的Web服务的一些功能。现在,传输的内容应该使用我们提供的公钥加密。

安全规范要求公共证书必须符合X.509标准。X.509不是依赖于私钥/公钥方法吗?因为我只得到一个包含私钥和证书但没有公钥的.pem文件,使用以下命令:

openssl req -new -x509 -days 365 -nodes -out ./cert.pem -keyout ./cert.pem

我是否需要修改命令才能创建私钥和公钥?

3个回答

127

使用OpenSSL生成私钥和公钥的基本命令行步骤如下:

openssl genrsa -out private.key 1024
openssl req -new -x509 -key private.key -out publickey.cer -days 365
openssl pkcs12 -export -out public_privatekey.pfx -inkey private.key -in publickey.cer

步骤1 - 生成私钥。

步骤2 - 创建包含您的公钥的X509证书(.cer文件),在注册私人应用程序(或升级成合作伙伴应用程序)时上传该证书。

步骤3 - 将您的x509证书和私钥导出到pfx文件。如果您选择的包装库使用.pem文件来签署请求,则不需要此步骤。

这个答案解释了不同的文件扩展名。


1
我不太确定第三个命令的作用,但它似乎与privatekey.pem和publickey.cer非常配合。谢谢! - Ahatius
在这个例子中,privatekey.pem 文件包含的是私钥还是公钥? - Isaac Kleinman
5
你在第一个命令中使用了错误的文件扩展名。你应该使用.key而不是.pem,以避免混淆。生成的文件将只是一个私钥。有人可能会因为错误而发送.pem文件给其他人,从而造成安全问题。 - w0rp
1
我已经花费了很多时间阅读文章和帖子,试图生成一个 .PFX 文件,以便我可以利用它进行 SAML 单点登录。你的第二行代码就是关键 - 我没有看到任何人提到使用 -x509 参数。每个人都在生成 CSR,但在这种情况下,我不需要我的证书签名。 - Chris Smith
对于其他用户: 如果出现配置错误,请参考:https://dev59.com/oGs05IYBdhLWcg3wPfgR - Jhonatan Pereira

16

公钥存储在X.509证书中。证书将身份信息(常用名称、地址等)与该公钥绑定。


3
好的,对于我的情况,有一个 BEGIN CERTIFICATE 和一个 BEGIN PRIVATE KEY。证书是我的公钥吗?我能把这两个分成不同的文件,以便另一方看不到私钥吗? - Ahatius
4
是的,CERTIFICATE 部分是证书(使用公钥进行 base64 编码),PRIVATE KEY - 就是私钥。您可以(实际上应该)将它们分开,并仅发送证书部分给其他人。 - Nickolay Olshevsky
3
好的,非常感谢。我会发送给他们证书部分。我想点赞,但显然我已经达到了每日点赞限制的上限 :O - Ahatius

8
创建一个私钥和公钥对。
openssl req -x509 -newkey rsa:2048 -keyout private.key -out public.cert -days 365

可选地,将这对文件合并成一个单一的文件。

openssl pkcs12 -export -inkey private.key -in public.cert -out certificate.pfx

这将导致以下文件产生。
private.key
certificate.pfx
public.cert

相关链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接