c#X509Certificate2不支持的密码字符

时间:2013-07-01 12:31:53

标签: c# openssl x509certificate2 pkcs#12

我们在多个平台上使用证书作为我们身份验证的一部分,例如:

  • 的Linux(centos的)
  • IOS
  • OSX
  • 机器人

证书是使用openssl生成的,并且作为密码,我们使用用户的密码。

在Linux上一切正常,但是当密码包含'passwordé'等特殊字符时,我们在Windows上遇到问题

我会将用于更改密码的代码放在更好的理解中,因为它更短,更容易理解。

#!/bin/bash
OLDPASS=password
NEWPASS=passwordé

openssl pkcs12 -nodes -in mycert -out mycert.tmp -passin pass:$OLDPASS -passout pass:$NEWPASS
openssl pkcs12 -nodes -export -in mycert.tmp -out mycert.final -passin pass:$NEWPASS -passout pass:$NEWPASS

该脚本使用的是env:NEWPASS和env:OLDPASS,但更改了它以便更容易追踪问题。

在Windows上,我总是得到“指定的网络密码不正确”。 请记住,删除“é”并再次正常工作。

我用来打开证书的代码:

try {
   byte[] bytCert = <myCertificate>;
   objCert = new X509Certificate2(bytCert, pSecurePassword);
} catch (Exception e) {
    // Incorrect password
}

我似乎无法在网上找到任何文档(或具有相同问题的人)。 有谁知道在哪里可以找到更多关于此的信息?

有没有人知道解决这个问题的方法?,证书是100%有效的,所以我应该可以打开它。


编辑: 我试过openssl.net:http://sourceforge.net/projects/openssl-net/ 奇怪的是,同样的事情,使用'密码'而不是'密码',使用的代码:

try {
    byte[] fileBytes = File.ReadAllBytes(@"/path/to/my/cert");
    OpenSSL.Core.BIO objBio = new OpenSSL.Core.BIO(fileBytes);
    OpenSSL.X509.PKCS12 objCert = new OpenSSL.X509.PKCS12(objBio, "passwordé");
} catch (Exception ex) {
    Console.WriteLine(ex.Message);
}

0 个答案:

没有答案