我们在多个平台上使用证书作为我们身份验证的一部分,例如:
- 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);
}