相关疑难解决方法(0)

将私钥与.net中的X509Certificate2类相关联

我正在研究一些创建X509certificate和公钥/私钥对的代码.公钥被添加到证书中,并将其发送给签署它的CA.

然后通过System.Security.Cryptography.X509Certificates.X509Certificate2类访问返回的证书.现在,我想使用此证书启动与其他客户端的安全连接.因此我使用SslStream类.要启动SSL握手,我使用以下方法:

server.AssociatedSslStream.AuthenticateAsServer(
                        MyCertificate,                      // Client Certificate
                        true,                               // Require Certificate from connecting Peer
                        SslProtocols.Tls,                   // Use TLS 1.0
                        false                               // check Certificate revocation
                    );
Run Code Online (Sandbox Code Playgroud)

此方法要求私钥与证书关联.当然,CA返回的证书不包含私钥.但它作为.key文件存储在硬盘上.X509Certificate2类有一个名为PrivateKey的属性,我想将私钥与证书关联,但我找不到设置此属性的方法.

有没有办法可以将私钥与.net X509类关联起来?

.net c# ssl x509certificate

23
推荐指数
4
解决办法
4万
查看次数

仅使用Bouncy Castle阅读PEM RSA公钥

我正在尝试使用C#读取.pem仅包含RSA公钥的文件.我无权访问私钥信息,我的应用程序也不需要它.文件myprivatekey.pem文件以.开头

-----BEGIN PUBLIC KEY----- 最后以 -----END PUBLIC KEY-----.

我目前的代码如下:

    Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair keyPair;

    using (var reader = File.OpenText(@"c:\keys\myprivatekey.pem"))
        keyPair = (Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair)new Org.BouncyCastle.OpenSsl.PemReader(reader).ReadObject();
Run Code Online (Sandbox Code Playgroud)

但是代码会抛出一条InvalidCastException消息

无法将"Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters"类型的对象强制转换为"Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair".

PemReader当没有私钥信息时,如何使用Bouncy Castle 只读公钥?

c# bouncycastle pem public-key

12
推荐指数
2
解决办法
3万
查看次数

解密包含私钥的受密码保护的PEM

我有以下使用Bouncy Castle for C#创建加密私钥的方法:

public string GetPrivateKey(AsymmetricCipherKeyPair keyPair, string password)
{
    var generator = new Pkcs8Generator(keyPair.Private, Pkcs8Generator.PbeSha1_3DES);
    generator.IterationCount = 4;
    generator.Password = password.ToCharArray();
    var pem = generator.Generate();

    TextWriter textWriter = new StringWriter();
    PemWriter pemWriter = new PemWriter(textWriter);
    pemWriter.WriteObject(pem);
    pemWriter.Writer.Flush();
    string privateKey = textWriter.ToString();
    return privateKey;
}
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

我不知道如何在Decrypt方法中使用用于加密私钥的密码。现在,在不知道如何使用he来“解密”我的私钥password的情况下,我得到了以下异常:

Org.BouncyCastle.OpenSsl.PemException:创建ENCRYPTED私钥时出现问题:System.NullReferenceException:对象引用未设置为对象的实例。在Org.BouncyCastle.OpenSsl.PemReader.ReadPrivateKey(PemObject pemObject)

这是Decrypt方法的代码:

public string Decrypt(string base64Input, string privateKey, string password)
{
    var bytesToDecrypt = Convert.FromBase64String(base64Input);

    //get a stream from the …
Run Code Online (Sandbox Code Playgroud)

c# encryption bouncycastle pem private-key

6
推荐指数
1
解决办法
3152
查看次数