4

我尝试将创建的 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:
4

2 回答 2

0

看看这篇博文:http: //pstaev.blogspot.com.es/2010/08/convert-rsa-public-key-from-xml-to-pem.html

于 2012-08-17T08:03:55.457 回答
0

请记住,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,您应该能够获得这些转换工具。

于 2015-04-08T23:45:50.580 回答