8.1 için geliştirilmiş bir Windows Phone App var ve görevlerden biri de client-server sertifika senaryosuydu. Uygulamam iyi çalıştı, istemci sertifikasını gönderebilir ve sunucuya giriş yapabilirim. Ancak Windows 8.10.14xxxx'ye yükseltme yaptıktan sonra mümkün değildi. Wireshark izlerini aldım ve sertifika asla gönderilmiyor gibi görünüyor. İletinin içerik uzunluğu 0'dır.En son Windows Phone sürümüne yükselttikten sonra sertifika gönderilemedi. 8.1
Sertifika girmek için HttpClient.SendAsync
(beklemede) ve HttpBaseProtocolFilter
kullanıyorum. Yükseltmeden önce mükemmel çalıştı.
Herhangi bir fikrin var mı? Bozuk bir şey mi var? 8.10.14xxxx
pencere telefonda çalıştırırken
Önce Sonra hizmet
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
}
Hep bir hariç (0x80072F0D
) alıyorum arıyorum 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)
{
//;
}
}
yüklüyorum'u. Kodum güncellemeden önce çalıştı, şimdi her zaman bu dönüş kodunu alıyorum. Sertifika httpClient'te yüklenir. Uygulamayı hata ayıklayıcı ile durdurduğumda, sertifikanın var olduğu anlaşılıyor, ancak 0x800072F0D
büyük ihtimalle sertifikanın gönderilmediği anlamına geliyor ???
Senaryoda bir ara sertifika yetkilisi var. Bu sertifika pfx'te yer almaktadır. Bunu bir şekilde yüklemem gerekir mi?
Bir reprounuz var mı? – kiewic
@kiewic sorunu biliyor musunuz? Bazı kaynak kodlarını paylaşabilirim. – cateof
Evet, bir göz atabilirim. GitHub'a veya başka bir yere yeniden yerleştirebilirsiniz. – kiewic