我尝试将创建的密钥对以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:
答案 0 :(得分:0)
答案 1 :(得分:0)
请记住,openssl对于PEM证书格式化很挑剔。
-----BEGIN CERTIFICATE-----
在另一条线上(即必须用换行符终止)。-----END CERTIFICATE-----
并且还会以换行符结束。所以在你的情况下,看起来你并没有包裹" gibberish" 64个字符,END标记缺少换行符。
对于没有编写自己的密钥对的其他人,可以采取以下几个步骤来规范化Linux上的证书文件:
# dos2unix cert.pem
# fold -w 64 cert.pem
如果您使用的是Windows,请尝试下载Cygwin,然后您就可以获得这些转换工具。