创建X509证书并另存为Base-64

时间:2016-07-12 12:03:13

标签: certificate base64 ssl-certificate x509certificate

我一直在遵循指南,该指南涵盖了为Web API安全性签署授权令牌。其中一个方面是将X509证书存储为web.config中的Base-64字符串。但是,没有解释如何获取X509证书并将其转换为Base-64字符串所需的步骤。我找到了一些关于如何使用OpenSSL生成X509证书的指南,但我仍然对使用哪些部分以及如何转换为Base-64感到困惑。这就是我想要的结果。

  1. 我可以存储在web.config
  2. 中的证书的Base-64表示
  3. 与证书一起提供的密码
  4. 我想在我的身份验证服务器中使用的代码是..

    SigningCertificate = new X509Certificate2(certificate, password);
    

    其中certificate是证书的Base 64编码表示,password是签名证书密码。

    因此,使用OpenSSL工具,我可以生成两个文件......

    • 证书档案 - MyCert.pem
    • 密钥文件 - MyKey.pem

    问题#1 - 转换为Base-64时,我只需要使用MyCert.pem文件吗?或者两个文件是否需要在表示为Base-64之前将这两个文件合并为一个PFX文件?

    问题#2 - 我是否可以使用接受文件然后导出Base-64字符串的实用程序?

2 个答案:

答案 0 :(得分:1)

  

问题#1 - 转换为Base-64时,我只需要使用MyCert.pem文件吗?或者两个文件是否需要在表示为Base-64之前将两个文件合并为一个PFX文件?

PEM 文件格式在base64中编码。它可以应用于私钥,证书或证书签名请求。这些文件有一个标题/英尺,可以从----BEGIN PRIVATE KEY--------BEGIN CERTIFICATE----

开始区分它们

PFX 是私钥和受密码保护的证书的容器。您需要包含两个PEM文件。 PFX以pkcs#12格式(二进制)编码。

将证书与密钥文件连接,然后让OpenSSL将其转换为PKCS#12(PFX)

cat MyKey.pem MyCert.pem > cert.pem
openssl pkcs12 -export -in cert.pem -out mykeystore.p12 -name myalias
#Enter Export Password:

如果您使用此service(我在谷歌搜索过),您将需要pkcs12文件和指定的密码

  

问题#2 - 我是否可以使用接受文件然后导出Base-64字符串的实用程序?

我通常使用带有MIME插件的Notepad ++等短信。或者,如果需要以编程方式执行,所有编程语言都有一种将字节数组转换为Base64的方法。

答案 1 :(得分:0)

考虑到您具有本地IIS,这是在.NET中获取有效证书的方法:

  1. Open your IIS
  2. Click on Server Certificates
  3. Click on Create Self-Signed Certificate
  4. Specify a name and select Web Hosting, then click Ok
  5. Select the certificate you just created and click on Export
  6. When exporting it, select a location and choose a password(1)

要获取Base64字符串,可以在C#上使用以下代码:

var certificate = Convert.ToBase64String(File.ReadAllBytes(@"C:\Temp\DemoCert.pfx"));

我将base64字符串和密码存储在我的Web配置中,如下所示:

<appSettings>
 <add key="SigningCertificate" value="MIIKLwIBAzCCCesGCSqGSIb3DQEHAaCCCdwk...." />
 <add key="SigningCertificatePassword" value="password"/>         
</appSettings>

(1)您在key =“ SigningCertificatePassword”属性中使用的密码与创建证书时使用的密码相同。

然后在我的Startup.cs类中使用它:

var certificate = Convert.FromBase64String(ConfigurationManager.AppSettings["SigningCertificate"]);

var options = new IdentityServerOptions
        {
            SigningCertificate = new X509Certificate2(certificate, ConfigurationManager.AppSettings["SigningCertificatePassword"]),
            RequireSsl = false,
            Factory = factory
        };