2

次のような複数のプラットフォームで、認証の一部として証明書を使用しています。

  • 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);
}
4

0 に答える 0