次のような複数のプラットフォームで、認証の一部として証明書を使用しています。
- Linux(セントス)
- ウィンドウズ
- iOS
- OSX
- アンドロイド
証明書は openssl を使用して生成され、パスフレーズとしてユーザーのパスワードを使用します。
Linux ではすべて正常に動作しますが、Windows ではパスワードに「passwordé」などの特殊文字が含まれていると問題が発生します
パスワードを変更するために使用するコードを入れて、理解を深めます。これは、短くて理解しやすいためです。
#!/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);
}