Ich habe eine Windows Phone App, die für 8.1 entwickelt wurde, und eine der Aufgaben war ein Client-Server-Zertifikatszenario. Meine App hat gut funktioniert, ich konnte das Client-Zertifikat senden und mich am Server anmelden. Nach dem Upgrade auf Windows 8.10.14xxxx war das nicht möglich. Ich habe Drahtziehspuren genommen und es scheint, dass das Zertifikat nie gesendet wird. Die Inhaltslänge der Nachricht ist 0.Fehler beim Senden des Zertifikats nach dem Upgrade auf das neueste Windows Phone 8.1
Ich benutze HttpClient.SendAsync
(erwarten) und HttpBaseProtocolFilter
, um das Zertifikat einzugeben. Es funktionierte perfekt vor dem Upgrade.
Irgendeine Idee? Ist etwas kaputt?
Zuerst Ich installiere die pfx
async private void btnInstall_Click(object sender, RoutedEventArgs e)
{
//Install the self signed client cert to the user certificate store
string CACertificate = null;
try
{
Uri uri = new Uri("ms-appx:///certificates/test.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,
"xxxxx",
ExportOption.Exportable,
KeyProtectionLevel.NoConsent,
InstallOptions.None,
"ClientCert1");
}
catch (Exception ex)
{
//;
}
}
Dann nenne ich den Dienst
string serviceURL = "https://my.web.services";
Certificate cert = null;
CertificateQuery query = new CertificateQuery();
query.FriendlyName = "ClientCert1";
IReadOnlyCollection<Certificate> certs = await CertificateStores.FindAllAsync(query);
HttpBaseProtocolFilter bpf = new HttpBaseProtocolFilter();
//if you install the CA you don't need to ignore the ServerCertificate Errors
//bpf.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted);
if (certs.Count > 0)
{
cert = certs.ElementAt(0);
bpf.ClientCertificate = cert;
}
HttpClient httpClient = new HttpClient(bpf);
try
{
var response = await httpClient.GetInputStreamAsync(new Uri(serviceURL));
//take data
}
catch (Exception ex)
{
//0x80072F0D
}
ich immer eine Ausnahme (0x80072F0D
) nehme, wenn sie in 8.10.14xxxx
Windows Phone läuft. Mein Code hat vor dem Update funktioniert, jetzt nehme ich immer diesen Rückgabecode. Das Zertifikat wird in httpClient geladen. Wenn ich die App mit dem Debugger stoppe, scheint es, dass das Zertifikat da ist, aber die 0x800072F0D
bedeutet wahrscheinlich, dass das Zertifikat nicht gesendet wird ???
Es gibt eine Zwischenzertifizierungsstelle im Szenario. Dieses Zertifikat ist in der pfx enthalten. Muss ich das irgendwie installieren?
Haben Sie eine Repro? – kiewic
@kiewic Kennen Sie das Problem? Ich kann Quellcode teilen. – cateof
Ja, ich kann es mir ansehen. Du kannst RepH auf GitHub oder anderswo setzen. – kiewic