Herkese açık bir SOAP web hizmetine (WCF değil) https üzerinden erişmeye çalışıyorum ve daha önce hiç görmediğim bir hata alıyorum. İlk olarak, burada gerçekler:İstemci sertifikasını göndermek için WCF istemcisini nasıl zorlar?
- Bu hizmet, istemci sertifikalarını gerektirir. Aynı CA tarafından sunucu sertifikasıyla imzalanan bir sertifikam var.
- Internet Explorer'da vurabildiğim için URL'nin kullanılabilir olduğunu biliyorum. IE, "sertifika seç" penceresini açar ve eğer onu seçersem (ve sunucu-ana bilgisayar-isim-eşleşmiyor-sertifika-hatası) görmezden gelirse, bana bir HTTP 500 hatası verir.
- Siteyi Chrome'da açtığımda, sertifikayı seçip hatayı aldıktan sonra WSA Action = null ile ilgili normal bir hata iletisi alıyorum.
- Siteyi FireFox'ta açarsam, hatayı göz ardı ettikten sonra sunucunun sertifikamı nasıl doğrulayamadığı hakkında bir sayfa açarım. Hiç birini seçmemi istemedi, bu yüzden mükemmel bir anlam ifade ediyor. Şimdi
, istisna:
Error occurred while executing test 12302: System.ServiceModel.Security.SecurityNegotiationException: Could not establish secure channel for SSL/TLS with authority 'ihexds.nist.gov:9085'. ---> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
Ben WireShark'la ile etkileşimi takip ettik ama TLS protokolünde bir uzman değilim çünkü, ne olup bittiğini olarak ipuçları eksik olabilir . Ancak burada, ben görüyorum budur:
- C -> S Müşteri Merhaba
- rastgele sayı, tarih/saat gibi şeyler içerir, cypher suit desteklenen vb
- S - > C Sunucu Merhaba Belgesi, Sertifika isteği, Sunucu Merhaba
- sunucunun sertifikasını içerir hazırlanmış ve bir istemci sertifikası
talebi
- C -> S Belgesi, Müşteri Anahtar Değişimi, Değişim Şifreleme Spec, Şifreli Tokalaşma Mesaj BURAYA
- İLGİNÇ BÖLÜM IS - Bu pakette ilk bölümü yapardım istemci sertifikası varsayalım Sertifika el sıkışma, bir olmalı, ancak sertifika yok (Sertifika Uzunluğu: 0).
- S -> C Uyarısı (Seviye: Ölümcül, Açıklama: Kötü Belgesi)
- Evet, gönderilen hiçbir sertifika yoktu.
Benim şöyle kurulur bağlayıcı şu şekildedir:
<binding name="https_binding">
<textMessageEncoding />
<httpsTransport useDefaultWebProxy="false" />
</binding>
Davranışım kurulur:
<behavior name="clientcred">
<clientCredentials>
<clientCertificate findValue="69b6fbbc615a20dc272a79caa201fe3f505664c3" storeLocation="CurrentUser" storeName="My" x509FindType="FindByThumbprint" />
<serviceCertificate>
<authentication certificateValidationMode="None" revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
<messageInspector />
</behavior>
Benim uç nokta kullanmak üzere ayarlandı hem bağlayıcı ve davranış. WCF neden https bağlantısı oluşturduğunda sertifikayı göndermeyi reddediyor?
WCF'den çok nefret ediyorum. Bu çözüm benim için çalıştı, yığınlar sayesinde - ama hepsi çok beceriksiz. Şimdi beni öldür. – robnick