使用openssl / makecert工具创建x509证书

时间:2010-06-09 17:17:09

标签: security encryption openssl rsa makecert

我正在使用带有以下参数的makecert创建x509证书:

  

makecert -r -pe -n“CN = Client”-ss MyApp

我想使用此证书使用RSA算法加密和解密数据。 我期待在Windows证书库中生成证书,一切似乎都好(它有一个私钥,公钥是一个1024位的RSA密钥等等。)

现在我使用这个C#代码来加密数据:

X509Store store = new X509Store("MyApp", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, "Client", false);
X509Certificate2 _x509 = certs[0];

using (RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)_x509.PublicKey.Key)
{
    byte[] dataToEncrypt = Encoding.UTF8.GetBytes("hello");
    _encryptedData = rsa.Encrypt(dataToEncrypt, true);
}

执行Encrypt方法时,我收到一条带有“Bad key”消息的CryptographicException。

我认为代码很好。可能我没有正确创建证书。 任何意见? 感谢

----------------编辑--------------
如果有人知道如何使用OpenSsl创建证书,它对我来说也是一个有效的答案。

2 个答案:

答案 0 :(得分:4)

要允许密钥用于加密,您应该使用-sky-option。默认情况下,'makecert`使用AT_SIGNATURE密钥规范,该规范不适用于加密/解密。而是通过发出以下命令使用AT_KEYEXCHANGE规范:

makecert -r -pe -n "CN=Client" -ss MyApp -sky Exchange

(请记住删除以前的密钥或使用其他容器名称。)

答案 1 :(得分:1)

当我尝试使用c#查找使用x509证书和rsa的makcert使用示例时,这是我偶然发现的另一个页面,不幸的是它只提供了部分解决方案。我把所有的内容放在人们可能感兴趣的博客文章中,可以在这里找到: http://nick-howard.blogspot.com/2011/05/makecert-x509-certificates-and-rsa.html