如何创建同时包含私钥和公钥的自签名x509证书?

13
我正在使用SAML2和ADFS2(IdP)创建SSO“概念验证”。登录功能正常工作,但是ADFS2要求我的注销请求被签名(使用私钥),然后我想在ADFS2的Relying Party Trusts下的Signature选项卡中添加相同的证书(.cer文件)。唯一的问题是我的应用程序(服务提供商)没有证书。我知道我可以为此目的创建自签名证书,但似乎无法弄清楚如何创建所需的所有内容。
2个回答

26
为了生成自签名证书,您需要openssl库,因此:
Debian: apt-get install openssl Centos/RedHat: yum install openssl 然后按照以下3个步骤进行操作:
1. 生成私钥: openssl genrsa -out server.pem 2048 2. 生成CSR:(在“通用名称”中设置您的服务提供商应用程序的域) openssl req -new -key server.pem -out server.csr 3. 生成自签名证书 openssl x509 -req -days 365 -in server.csr -signkey server.pem -out server.crt 完成后,您将获得server.csr(证书签名请求)、server.pem(私钥)和server.crt(自签名证书)
在Windows中,您可以使用makecert.exe

看起来ADFS需要一个.cer、.sst或.p7b文件。你的解决方案中有没有这些文件之一? - Brian David Berman
您可以在ADFS 2.0中使用x509证书作为“令牌签名证书”: http://technet.microsoft.com/zh-cn/library/dd807040%28v=WS.10%29.aspx.pb7是类型为application/x-pkcs7-certificates的证书文件 要从实际格式(PEM或DER)转换为pkcs7格式,可以执行以下操作: openssl crl2pkcs7 -nocrl -certfile server.crt -out server.p7b.sst文件采用了application/vnd.ms-pki.certstore格式, 不知道如何使用openssl进行转换。 - smartin
1
.crt和.pem是我使用的扩展名。 您可以将它们重命名为: server.pem更改为server-private-key.cer server.crt更改为server-self-signed-cert.cer - smartin
您也可以使用此在线工具: https://www.samltool.com/self_signed_certs.php - smartin
你可以使用openssl req -new -x509 -key privateKey.pem -out cert.cer -days 365从私钥创建一个.cer格式文件。 - tony.0919
在生成私钥时,选择强大的算法也非常重要,例如可以使用-sha512选项。 - smartin

3

我在制作ADFS概念验证时,使用了Windows的SelfSSL工具。特别是这位博主为IIS7开发的增强版本。

示例命令:

selfssl7.exe /N cn=www.example.com /K 2048 /V 3652 /X /F C:\example.pfx /W foo

生成一个名为“example.pfx”的文件,使用2048位密钥,有效期约为10年,密码为“foo”保护私钥,通用名称为“www.example.com”。您可以将其导入到本地计算机的证书存储中,然后根据需要将其导出为带或不带私钥信息的.cer文件。

@Sean - 这个证书将能够用作签署(私钥)发送到ADFS的单点注销请求(例如)的方式,其中ADFS使用公钥进行验证?非常感谢。 - Brian David Berman
Sean - 当我使用私钥进行导出时,我没有看到 .cer 作为选项,只有 .pfx。这正常吗? - Brian David Berman
1
@Brian 是的,那很正常。CER格式不能携带像私钥这样的额外数据。我相信PFX更像是一种容器格式,适用于许多不同类型的安全数据,因此可以处理将证书和密钥捆绑在一起。 - Sean Hanley

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