【问题标题】:How can I change key pair in xml format to PEM format in C#?如何在 C# 中将 xml 格式的密钥对更改为 PEM 格式?
【发布时间】:2011-08-09 11:29:06
【问题描述】:

我尝试将创建的 xml 格式的密钥对更改为 PEM 格式。 这是我的代码。

CspParameters cspParams = new CspParameters();
cspParams.ProviderType = 1;  
cspParams.Flags = CspProviderFlags.UseArchivableKey;
cspParams.KeyNumber = (int)KeyNumber.Exchange;
rsaProvider = new RSACryptoServiceProvider(1024,cspParams);
RSAParameters rsa_params = rsaProvider.ExportParameters(true);
byte[] rsa_export = rsaProvider.ExportCspBlob(true); 

//here I've try to get private key data
string data__ = Convert.ToBase64String(rsa_export);  
FileStream fs = new FileStream(privateKeyFileName, FileMode.CreateNew);

string type = "RSA PRIVATE KEY";
string header = String.Format("-----BEGIN {0}-----\n", type);
string footer = String.Format("\n-----END {0}-----", type);

data__  = header+data__+footer;
byte[] d_ = Encoding.Default.GetBytes(data__); 

//write to file        
fs.Write(d_, 0, d_.Length);
fs.Close();

运行它后,我有一个私钥,但是当我使用密钥进行测试时,使用命令创建证书:

openssl req -new -x509 -key privatekey.pvk -config       
"C:\AppServ\php5\extras\openssl\openssl.cnf" -out myCert.cer -days 365

发生错误

unable to load Private Key
3004:error:0906D064:PEM routines:PEM_read_bio:bad base64 decode:.\crypto\pem\pem_lib.c:756:

【问题讨论】:

    标签: c# xml certificate pem


    【解决方案1】:
    【解决方案2】:

    请记住,openssl 对 PEM 证书格式很挑剔。

    1. 文件必须包含: -----BEGIN CERTIFICATE----- 在单独的行上(即必须以换行符结束)。
    2. 每行“乱码”的宽度必须为 64 个字符。
    3. 文件必须以: -----END CERTIFICATE----- 并以换行符终止。
    4. 不要使用 Word 保存证书文本。它必须是 ASCII 格式。
    5. 不要混合使用 DOS 和 UNIX 样式的行终止符。

    因此,在您的情况下,您似乎没有将“乱码”换行为 64 个字符,并且您的 END 标记缺少换行符。

    对于不编写自己的密钥对的其他人,您可以采取以下几个步骤来规范 Linux 上的证书文件:

    1. 通过dos2unix运行它:# dos2unix cert.pem
    2. 通过折叠运行它:# fold -w 64 cert.pem

    如果您使用的是 Windows,请尝试下载 Cygwin,您应该可以获得这些转换工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2010-11-03
      相关资源
      最近更新 更多