Je suis dans Fedora 14, MonoDevelop 2.4, Mono 2.6.7. J'ai généré mon CERT auto-signé ainsi:Importer un CERT auto-signé créé par openssl dans un X509Certificate2 (Mono): Peut crypter, ne peut pas décrypter
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mysitename.key -out mysitename.crt
Ensuite, je joue avec le cryptage et le décryptage en C# ainsi. Je sélectionne le fichier .crt. Le problème est que le X509Certificate2
en cours de création n'a pas de clé privée! Par conséquent, l'opération de cryptage se passe bien et décrypte les bombes. Je suis probablement en train d'exécuter la commande openssl incorrectement. Ou est-ce un peu de subtilité dans la création de l'objet X509Certificate2
?
protected virtual void OnBtCertClicked (object sender, System.EventArgs e)
{
try
{
if (myCert == null)
{
myCert = new X509Certificate2(fchCert.Filename);
}
RSACryptoServiceProvider pubKey = (RSACryptoServiceProvider)myCert.PublicKey.Key;
byte[] myBlob = UTF8Encoding.Default.GetBytes(tbDisplay.Buffer.Text);
byte[] myEncryptedBlob = pubKey.Encrypt(myBlob, false);
tbDisplay.Buffer.Text = System.Convert.ToBase64String(myEncryptedBlob, Base64FormattingOptions.InsertLineBreaks);
}
catch (Exception excp)
{
tbDisplay.Buffer.Text = excp.GetType().ToString() + "\n\n" + excp.ToString();
}
}
protected virtual void OnBtCertDecClicked (object sender, System.EventArgs e)
{
try
{
if (myCert == null)
{
myCert = new X509Certificate2(fchCert.Filename);
}
if (!myCert.HasPrivateKey)
throw new CryptographicException("Certificate has no private key");
RSACryptoServiceProvider privKey = (RSACryptoServiceProvider)myCert.PrivateKey;
byte[] myEncryptedBlob = System.Convert.FromBase64String(tbDisplay.Buffer.Text);
byte[] myBlob = privKey.Decrypt(myEncryptedBlob, false);
tbDisplay.Buffer.Text = UTF8Encoding.UTF8.GetString(myBlob);
}
catch (Exception excp)
{
tbDisplay.Buffer.Text = excp.GetType().ToString() + "\n\n" + excp.ToString();
}
}
Pouvez-vous fournir des détails d'exception? J'ai signalé un bug il y a quelque temps: https://bugzilla.novell.com/show_bug.cgi?id=646491, semble similaire –
@djechelon: La propriété HasPrivateKey de l'objet X509Certificate2 est "faux" après avoir importé le fichier .crt . L'exception est celle que je me jette moi-même. – JCCyC
Oh oui, vous pouvez importer le certificat, mais sans clé privée. Je crois que cela pourrait être un bug dans Mono qui pourrait être corrélé avec celui que j'ai posté. C'est ma pensée. Avez-vous essayé dans Windows? Si ça marche, c'est 100% un bug mono –