0

私はPFXファイルの秘密鍵で自己署名入りの証明書を持っています。これはVisual Studio 2015のXamarin.Android C#アプリケーションにリソースとして追加されます。これをクライアント証明書として使用して、Webサービスへの安全なHTTPS接続を確立します。xamarin.android X509Certificate2コンストラクタ/インポートがプレーンストリングではなくSecureStringパスワードで失敗しました

これを行うには、X509Certificate2オブジェクトで証明書をインポートします。証明書の秘密鍵のパスワードをプレーンテキスト(文字列)として入力するとうまく動作しますが、SecureStringを使用するX509Certificate2のコンストラクタ/インポートメソッドを使用したいと考えています。

残念ながら、彼らはそのような場合には

「証明書の例外を解読できません」

を投げ、コンストラクタまたはインポート方法が使用されている場合に関係なく、関係なく、証明書は、バイトとして渡された場合[ ]またはファイル名。

私の質問は、パスワードがSecureStringで失敗し、平易な文字列でうまく動作し、パスワードにSecureStringを使用するために進める方法です。

ありがとうございます!

ゲオルギ

ただ、同じ証明書ファイルとパスワードを使用して、同じコードは、Windows 10の下でうまく機能することを追加するために、.NET 4 は、そうでない場合Xamarin.Androidは6.1.1.1で、Xamarinの拡張子は4.1.1.3で、最小アンドロイドAPIレベル19、Android 6.0でテスト済みです

+0

ただ、同じ証明書ファイルとパスワードを使用して、同じコードは、Windows 10の下でうまく機能することを追加するために、.NET 4 は、そうでない場合Xamarin.Androidは6.1.1.1で、Xamarinの拡張子は4.1.1.3で、対象とする最低限のアンドロイドがAPIでありますレベル19、Android 6.0でテスト済み Georgi –

答えて

0

理由はSecureStringがMonoでは完全サポートされていないためです。コメントについてはsourceを参照してください。それはImport方法証明書のクラスを呼び出し、(string)nullを渡します。それが制限されるため

全体的に、SecureStringがStringよりも安全である:

[MonoTODO ("SecureString is incomplete")] 
public override void Import (byte[] rawData, SecureString password, X509KeyStorageFlags keyStorageFlags) 
{ 
    Import (rawData, (string) null, keyStorageFlags); 
} 

SecureStringがあなたのデータを作成していない100%secureことに注意してください機密文字列データの公開。しかし、の文字列は、 のままで、ホストコンピュータ上で実行されている悪意のあるプロセス、プロセス ダンプ、またはユーザーが表示可能なスワップファイルなど、RAWメモリ, にアクセスするプロセスまたは操作にさらされる可能性があります。 SecureStringを使用して にパスワードを保護する代わりに、プロセスの外部に格納されている資格情報に不透明な ハンドルを使用することをお勧めします。

+0

ありがとう、Krumelur、すべては明らかです。とにかく、そのような場合には、「実装されていない」などの例外の例外をスローする必要があります。 乾杯! –

+0

変更を伴うプルリクエストを送信する;-) – Krumelur

関連する問題