Ho un'app di Windows Phone, creata per 8.1, e una delle attività era uno scenario di certificato client-server. La mia app ha funzionato bene, potevo inviare il certificato del client e accedere al server. Tuttavia, dopo l'aggiornamento a Windows 8.10.14xxxx non è stato possibile. Ho preso tracce di wirehark e sembra che il certificato non venga mai inviato. La lunghezza del contenuto del messaggio è 0.Impossibile inviare il certificato dopo l'aggiornamento all'ultima versione del telefono di Windows 8.1
Io uso HttpClient.SendAsync
(attendi) e HttpBaseProtocolFilter
per immettere il certificato. Ha funzionato perfettamente prima dell'aggiornamento.
Qualche idea? C'è qualcosa di rotto?
Prima Sto installando il 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)
{
//;
}
}
Poi sto chiamando il servizio
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
}
Sono sempre prendendo una eccezione (0x80072F0D
) durante l'esecuzione in 8.10.14xxxx
Windows Phone. Il mio codice ha funzionato prima dell'aggiornamento, ora prendo sempre questo codice di ritorno. Il certificato è caricato in httpClient. Quando interrompo l'app con il debugger, sembra che il certificato sia presente, tuttavia lo 0x800072F0D
probabilmente significa che il certificato non viene inviato ???
Esiste un'autorità di certificazione intermedia nello scenario. Questo certificato è incluso nel pfx. Devo installarlo in qualche modo?
Hai una riproduzione? – kiewic
@kiewic conosci il problema? Posso condividere qualche codice sorgente. – cateof
Sì, posso dare un'occhiata. Puoi inserire repro su GitHub o altrove. – kiewic