Windows 8.1 ve Windows 8.1 telefonlarının yeni bir özelliğini deniyorum. Sertifika depoları ve sunucu tarafında istemci kimlik doğrulaması için istemci sertifikalarını kullanma olanağı. Ancak bu işlevsellik ile ilgili sorunlar yaşıyorum.Windows RT için İstemci sertifikaları kullanma (Windows 8.1/Windows 8.1)
IIS ekspresinde çalışan temel bir WCF hizmetim var. IIS express, SSL
ve istemci sertifikalarını desteklemek üzere yapılandırıldı.
<access sslFlags="SslRequireCert" /> (tried also SslNegotiateCert)
<clientCertificateMappingAuthentication enabled="true" />
Ben aşağıda, Windows RT uygulaması içinde istemci sertifikası eklemiş: IIS (configurationhost.config) konfigürasyon dosyasında bu belirledik Sonra
//Install the self signed client cert to the user certificate store
string CACertificate = null;
try
{
Uri uri = new Uri("ms-appx:///Assets/AdventureWorksTestClient1.pfx");
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(uri);
IBuffer buffer = await FileIO.ReadBufferAsync(file);
using (DataReader dataReader = DataReader.FromBuffer(buffer))
{
byte[] bytes = new byte[buffer.Length];
dataReader.ReadBytes(bytes);
// convert to Base64 for using with ImportPfx
CACertificate = System.Convert.ToBase64String(bytes);
}
await CertificateEnrollmentManager.UserCertificateEnrollmentManager.ImportPfxDataAsync(
CACertificate,
"",
ExportOption.Exportable,
KeyProtectionLevel.NoConsent,
InstallOptions.None,
"ClientCert1");
}
catch (Exception ex)
{...
kullanıyorum HttpBaseProtocolFilter sonra
IReadOnlyCollection<Certificate> certs = await CertificateStores.FindAllAsync(query);
HttpBaseProtocolFilter bpf = new HttpBaseProtocolFilter();
if (certs.Count > 0)
{
cert = certs.ElementAt(0);
bpf.ClientCertificate = cert;
}
HttpClient httpClient = new HttpClient(bpf);
....
Ve rica:
hangi istemci sertifikayı bu şekilde eklemekBu kod satırı
var resp = await httpClient.GetAsync(new Uri(serviceURL));
bu istisnayı oluşturuyor:
{System.Exception: Exception from HRESULT: 0x80072F7D
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at JumpStartCertificateDemo.MainPage.<btnCallService_Click>d__0.MoveNext()}
Ben ben de localhost (yerel bilgisayar) ve ayrıca uygulama tarafında doğru sertifikaları aktardıktan% 100 emin. Tarayıcı üzerinden servis çağrısı düzgün çalışıyor. (İstemci sertifikası sağlamanız istenir), bu nedenle uygulamada istemci sertifikası sağlama konusunda bir sorun olması gerekir.
Bu konuda bana yardımcı olabilecek herhangi biri var mı? Teşekkür ederim.
muhtemelen ne görürsen bu açıklamalara bakın. yakalayamayacağınız için beklemeyi kaldırmanız ve sonucu t.IsFaulted olarak doğrulamak ve t.Exception'ı kontrol etmek için bir görev kullanmak gerekir; –
Pedro, yorum için teşekkürler, ancak istisnayı yakalarım (Onlarla nasıl çalışacağını biliyorum), sorun var, bir istisna olmamalı çünkü müşteri sertifikasını eklediğimde alma isteğinin çağrılması gerekiyor ve istek tarayıcıdan ve ayrıca android çalışır. –
Hayır, In .Net istek seçeneklerine bağlı olarak bir sertifika isteği bir istisna atar, nasıl çalışır, bir çok kez yaptım. 4XX yanıtında bir şey aldığınızda WebException atılır. Ne cevap aldığınızı görmek için kemancıyı kullanın. –