2016-08-04 44 views
0

我有一個PFX文件中的私鑰的自簽名證書。它作爲資源添加到Visual Studio 2015中的Xamarin.Android c#應用程序中。我將它用作客戶端證書來建立到Web服務的安全HTTPS連接。xamarin.android X509Certificate2構造函數/導入失敗,使用SecureString密碼而不是普通字符串

爲此,我在X509Certificate2對象中導入證書。當我以純文本(字符串)的形式提供證書私鑰的密碼時,它運行良好,但我想使用使用SecureStringX509Certificate2構造函數/導入方法。

不幸的是他們扔

「無法解碼證書異常」

在這種情況下

,如果使用構造函數或導入方法沒有問題,如果該證書是作爲字節[過去了不管]或文件名稱。

我的問題是爲什麼它在SecureString中的密碼失敗,同時使用普通字符串以及如何繼續以便使用SecureString作爲密碼。

謝謝!

格奧爾基

我想補充的是具有相同的證書文件和密碼相同的代碼的Windows 10下工作很出色,.NET 4 否則Xamarin.Android是6.1.1.1和Xamarin擴展是4.1.1.3,最小的Android目標是API級別19,在Android 6.0上測試

+0

我想補充的是具有相同的證書文件和密碼相同的代碼的Windows 10下工作很出色,.NET 4 否則Xamarin.Android是6.1.1.1和Xamarin擴展是4.1.1.3,目標最低Android是API級別19,在Android 6.0上測試 Georgi –

回答

0

原因是,在Mono中不完全支持SecureString。請參閱source以獲取評論。它調用的證書類Import方法並傳遞一個(string)null

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

還要注意的是SecureString不會使您的數據100%secure

總體而言,SecureString的比字符串更加安全,因爲它限制暴露敏感的字符串數據。然而,這些串仍可以 暴露於能夠訪問原始內存, 任何處理或操作,如主計算機,一個過程 轉儲,或一個用戶可視的交換文件上運行的惡意程序。建議的替代方法是使用不透明的 句柄來處理存儲在過程之外的憑據,而不是使用SecureString來保護密碼。

+0

謝謝Krumelur,一切都很清楚。無論如何,他們應該在這種情況下拋出一些其他類型的例外,例如「未實現」。 乾杯! –

+0

用更改提交拉取請求;-) – Krumelur

相關問題