2012-02-07 183 views
2

我在签署证书方面遇到了一些问题。我正在使用.net bouncycastle api。我用open-ssl生成了一个root-ca,我想用它来签署更多的证书。 我的问题是,我无法验证我生成的证书,因为open-ssl无法读取文件。进一步调查显示,我的文件中缺少“BEGIN CERTIFICATE”以及“END CERTIFICATE”标签。签名证书

开放式SSL错误: 3900:错误:0906D06C:PEM套路:PEM_read_bio:无从下手行:\加密\ PEM \ pem_lib.c:650:期待:受信任的证书

下面的代码演示了如何我完成了生成过程。

X509V3CertificateGenerator generator = new X509V3CertificateGenerator(); 
generator.SetSerialNumber(BigInteger.ProbablePrime(120, new Random())); 
generator.SetIssuerDN(serverCertificate.SubjectDN); 
generator.SetNotBefore(DateTime.Now); 
generator.SetNotAfter(DateTime.Now.AddYears(5)); 
generator.SetSubjectDN(certificationRequestInfo.Subject); 
generator.SetPublicKey(publicKey); 
generator.SetSignatureAlgorithm("SHA512withRSA"); 
generator.AddExtension(X509Extensions.AuthorityKeyIdentifier, false, new  AuthorityKeyIdentifierStructure(serverCertificate)); 
generator.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(publicKey)); 

var newClientCert = generator.Generate(kP.Private); 

newClientCert.Verify(kP.Public); 
byte[] b = DotNetUtilities.ToX509Certificate(newClientCert).Export(X509ContentType.Cert); 

我将是任何提示或想法非常感谢.. 亲切的问候

迈克尔

+0

如果您只是添加这些固定的标记,它是否工作?我知道这不是最终的解决方案,但它有助于了解这是唯一的问题。 – 2012-02-07 13:53:09

回答

3

BouncyCastle的C#有用于PEM出书面证明在Org.BouncyCastle.OpenSsl命名空间支持直接格式:

Org.BouncyCastle.X509.X509Certificate cert = ...; 
using (FileStream fs = ...) 
{ 
    TextWriter w = new StreamWriter(fs); 
    PemWriter pw = new PemWriter(w); 
    pw.WriteObject(cert); 
    pw.Writer.Close(); 
}