C# 带有密码安全的PFX自签名x509证书

C# 带有密码安全的PFX自签名x509证书,c#,x509,pfx,C#,X509,Pfx,在了解了如何从生成自签名数字签名之后,我可以调用CreateSelfSignCertificateFX并获取字节数组中的PXF数据,然后可以在X509Certificate2对象中使用这些数据进行签名和验证。例如 byte[] pfx = Certificate.CreateSelfSignCertificatePfx("O=Company,CN=Firstname,SN=Lastname", DateTime.Now, DateTime.Now.AddYears(1), "password")

在了解了如何从生成自签名数字签名之后,我可以调用CreateSelfSignCertificateFX并获取字节数组中的PXF数据,然后可以在X509Certificate2对象中使用这些数据进行签名和验证。例如

byte[] pfx = Certificate.CreateSelfSignCertificatePfx("O=Company,CN=Firstname,SN=Lastname", DateTime.Now, DateTime.Now.AddYears(1), "password");

X509Certificate2 cert = new X509Certificate2(pfx, "password");
byte[] publicBytes = cert.RawData;

RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] signedData = rsa.SignData(new System.Text.UTF8Encoding().GetBytes("Test"), new SHA1CryptoServiceProvider());

RSACryptoServiceProvider rsa2 = (RSACryptoServiceProvider)new X509Certificate2(publicBytes).PublicKey.Key;

bool verified = rsa2.VerifyData(new System.Text.UTF8Encoding().GetBytes("Test"), new SHA1CryptoServiceProvider(), signedData);
这很有效。不过,我关心的是原始字节,上面的byte[]pfx,需要存储在DB中(用于签名)。问题是,这种格式的字节有多安全?我知道您需要密码来使用私钥构造新的X509Certificate2,但从一般意义上讲,没有密码的字节有多安全?我没有问题加密这些字节作为一个附加层,但这是必要的吗

使用正确的密码调用此构造函数将解密私钥并将其保存到密钥容器中


我只是想确保私钥在没有密码的情况下是安全的。

在我看来,问题不在于是否应该将“字节”放在数据库中,而在于是否应该将带有私钥的文件放在文件系统中

你做这件事的方式基本上是一样的。您只是在存储组成证书文件的字节


我可能无法理解这里的区别,但字节和文件本质上是相同的,唯一的区别是必须访问数据库才能获取它们。

在我看来,问题不在于是否应该将“字节”放入数据库,而在于更多,请将带有私钥的文件放入文件系统中

你做这件事的方式基本上是一样的。您只是在存储组成证书文件的字节


我可能无法理解这里的区别,但字节和文件本质上是相同的,唯一的区别是必须访问数据库才能获取它们。

使用智能卡或令牌存储您的私钥

更新:
任何可以访问计算机的人都可以访问Pvt密钥。

使用智能卡或令牌存储您的私钥

更新: 任何可以访问计算机的人都可以访问Pvt密钥。

PFX(PKCS#12)中的私钥是加密存储的,这当然就是密码的用途。并不是所有的PFX都是加密的,结构部分保持纯文本,以包含关于内容的元数据(比如使用了什么加密算法)

根据对文件的检查,从Windows 7开始,私钥使用3密钥(168位)3DES加密。密钥是通过涉及密码的复杂公式导出的;文件中没有任何内容可以显示你的密码是什么,密码的长度等等

密码通常通过在内容上添加MAC来证明是正确的,MAC使用相同的密码作为其密钥派生功能。在MAC密码和加密密码可能不同的情况下(我个人从未见过),密码由加密负载中的结构信息进行验证

DES的弱点主要在于小的密钥大小,它在今天很容易被粗暴对待。一个3键3DES键比一个(1)DES键多112个语义位,因此需要2^112(~5 x 10^33)倍的时间才能断开

因此,归根结底,私钥在加密方面是可靠的。但是就像任何基于密码的输入一样,如果你使用了一个容易被猜到的坏密码,那么它就可以被暴力破解。

PFX(PKCS#12)中的私钥是加密存储的,这当然就是密码的用途。并不是所有的PFX都是加密的,结构部分保持纯文本,以包含关于内容的元数据(比如使用了什么加密算法)

根据对文件的检查,从Windows 7开始,私钥使用3密钥(168位)3DES加密。密钥是通过涉及密码的复杂公式导出的;文件中没有任何内容可以显示你的密码是什么,密码的长度等等

密码通常通过在内容上添加MAC来证明是正确的,MAC使用相同的密码作为其密钥派生功能。在MAC密码和加密密码可能不同的情况下(我个人从未见过),密码由加密负载中的结构信息进行验证

DES的弱点主要在于小的密钥大小,它在今天很容易被粗暴对待。一个3键3DES键比一个(1)DES键多112个语义位,因此需要2^112(~5 x 10^33)倍的时间才能断开


因此,归根结底,私钥在加密方面是可靠的。但就像任何基于密码的输入一样,如果你使用了一个很容易被猜到的坏密码,那么它可能会被暴力破解。

我为反应迟钝、节假日等道歉。问题是X509证书单凭密码有多安全?如果你有密码,你就有私钥,但是如果没有密码,私钥有多安全?我为延迟响应、假期和所有这些道歉。问题是X509证书单凭密码有多安全?如果你有密码,你就有私钥,但是没有密码,私钥有多安全?这不是问题。问题是,没有密码的私钥有多安全?存储带有私钥的证书的位置与我的问题无关,尽管我在原始问题中确实提到了存储问题;是我的错。此外,智能卡不是一个选项,因为没有任何基础设施可支持。这不是问题所在。问题是,没有密码的私钥有多安全?存储带有私钥的证书的位置与我的问题无关,尽管我在原始问题中确实提到了存储问题;是我的错。此外,智能卡不是一个选项,因为没有