TLS 1.2'yi kullanmak için .NET web hizmetini güncelleyin


99

NET web hizmetimden TLS 1.2'yi zorlayacak başka bir hizmete bağlanmak için TLS 1.2 kullanmam gerekiyor. NET 4.6'nın varsayılan olarak TLS 1.2'yi kullandığını söyleyen bir kaynak buldum, bu yüzden en kolay çözüm gibi görünüyordu. Sunucu üzerindeki .NET çerçevesini güncelledim ve yeniden başlattım. IIS'de .NET 4.6 kullanarak bir uygulama havuzu oluşturmaya çalıştım, ancak 4.0 tek seçenekti. Sonra hala 4.0 yazacağını söyleyen bir şey buldum çünkü 4.6, .NET 4.0 için "yerinde" bir güncelleme. Ben de bitmiş olabilirim diye düşündüm. Bununla birlikte, ilgisiz nedenlerden dolayı aldığım bir hata sayfasında, Microsoft .NET Framework Version:4.0.30319başarılı bir şekilde yükseltmedim gibi görünüyor. Uygulama havuzumun .NET 4.6 kullandığından nasıl emin olacağıma veya daha genel olarak TLS 1.2'yi nasıl etkinleştireceğime dair herhangi bir işaret var mı?


4
TLS12'nin sunucuda etkinleştirilmesi gerektiğine inanıyorum. support.quovadisglobal.com/kb/a433/…
lcryder

4
Neden olumsuz oylar?
nasch

Yanıtlar:


140

TLS 1.2'ye izin vermek için bir .NET web hizmetini 4.6'ya yükselttik.

Artem'in söylediği, yaptığımız ilk adımlardı. Web hizmetinin çerçevesini 4.6 olarak yeniden derledik ve TLS 1.2'yi etkinleştirmek için kayıt defteri anahtarını değiştirmeyi denedik, ancak bu işe yaramadı: bağlantı hala TLS 1.0'da idi. Ayrıca, makinede SLL 3.0, TLS 1.0 veya TLS 1.1'e izin vermemek istemedik: diğer web hizmetleri bunu kullanıyor olabilir; kayıt defterindeki değişikliklerimizi geri aldık.

IIS'ye şunu söylemek için Web.Config dosyalarını değiştirdik: "hey, beni 4.6'da çalıştırın lütfen".

NET 4.6'da web.config + yeniden derlemesine eklediğimiz değişiklikler şunlardır:

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->

    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />

    <authentication mode="Windows"/>
    <pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>

Ve bağlantı TLS 1.2 olarak değiştirildi, çünkü IIS artık web hizmetini 4.6'da çalıştırıyor (açıkça anlatılıyor) ve 4.6 varsayılan olarak TLS 1.2 kullanıyor.


3
Araştırma için kullandığımız belgeler: HTTPRuntime , RenderingCompatibility
Etienne Faucher

1
Anladım - HTTPS istemiyordum. Bunu düzelttikten sonra işe yaradı.
nasch

3
Derlemeyi 4.6 olarak değiştirmek ve httpRuntime 4.6 eklemek bizim durumumuzda yeterliydi, çözüm için teşekkürler!
krilovich

2
Bu tamamen doğru cevap. Bunu geçenlerde yaşadım. İşte bununla ilgili bir blog yazısı: blog.thelevelup.com/pci-security-is-your-restaurant-ready ve bunu yapan bir GitHub projesi: github.com/TheLevelUp/pos-tls-patcher
user24601


88

Web hizmeti istemcinizi başlatmadan önce aşağıdaki kodu ekleyin:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Veya TLS 1.1 ve öncesi ile geriye dönük uyumluluk için:

System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; 

2
Evet bunu zaten yapıyorum, ancak hata mesajı hala .NET 4.0'ı gösteriyor.
nasch

12
Bu sizin CLR versiyonunuzdur. .Net CLR'nin 2.0 ve 4.0 olmak üzere iki sürümü vardır. IIS'de Çerçeve sürümünü değil, CLR sürümünü belirtirsiniz. IIS size .Net 4.6'yı söylemeyecek çünkü umursamıyor. 4.6 kullanarak derlediyseniz, 4.6 kullanıyorsunuz demektir.
Amy

2
TLS 1.2, .NET
Gilberto Alexandre

5
Bu durumda | =, just = 'dan üstündür. İkili bayraklardır, gereksiz yere her şeyin üzerine yazmayın.
Izzy

2
@JohnWu - lütfen Izzy'nin yukarıdaki yorumuna dikkat edin. Kodunuz, .NET'e HTTPS kaynaklarına bağlanırken YALNIZCA TLS 1.2'yi açıkça kullanmasını söyler. Örneğin, bir sunucuda yalnızca TLS 1.1 varsa, kodunuz yalnızca TLS 1.2 kullandığı için bağlanmasını durdurur. İstemci ve sunucu hangi protokolü kullanacakları konusunda anlaştığında kodunuza "seçenek olarak TLS 1.2'yi kullanmayı da deneyin" demek için | = kullanmalısınız.
Don Cheadle

27

.Net'i 4.5'ten daha önce kullanıyorsanız, numaralandırmada Tls12 olmayacak, bu nedenle durum burada açıkça belirtilmiştir

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

17

Üç adım gerekli:

  1. Kayıt defterinize Enabled=0ve ekleyerek SSL2.0, TLS1.0, TLS1.1'i sunucu makinenizde yasak olarak işaretleyin DisabledByDefault=1(tam yol HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols). Ayrıntılar için ekrana bakın kayıt

  2. 1.'den TLS1.2adımları izleyerek açıkça etkinleştirin . Sadece sırasıyla Enabled=1ve kullanın DisabledByDefault=0.

NOT: sunucu sürümünü doğrulayın: protokolü Windows Server 2003desteklemiyorTLS 1.2

  1. TLS1.2Yukarıda @ John Wu'nun önerdiği gibi, yalnızca uygulama düzeyinde etkinleştirin .

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

Umarım bu kılavuz yardımcı olur.

GÜNCELLEME @ Subbu'nun bahsettiği gibi: Resmi rehber



Merhaba @Artem tls ekledikten sonra sunucuyu yeniden başlatmam gerekir mi?
Simba

@Simba muhtemelen bunu çözdünüz, ancak bunu şimdi yapıyorum sunucuyu yeniden başlatmam gerekmiyor.
Matt N.

5

Benim için aşağıda çalıştı:

Adım 1: Uygulama sunucusuna https://www.microsoft.com/en-us/download/details.aspx?id=48137 adresinden web Installer exe'yi indirip yükleyin . Kurulum tamamlandıktan sonra uygulama sunucusunu yeniden başlattı.

Adım 2: Web.config dosyasındaki değişikliklerin altına eklendi

<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />
</system.web>

Adım 3: Adım 1 ve 2'yi tamamladıktan sonra, " WebForms UnobtrusiveValidationMode, 'jquery' için bir ScriptResourceMapping gerektirir. Lütfen jquery (büyük / küçük harfe duyarlı) adında bir ScriptResourceMapping ekleyin " hatası verdi ve bu hatayı gidermek için uygulama ayarlarında aşağıdaki anahtarı ekledim benim de web.config dosyasında

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

HttpRuntime hedef çerçevesini eklemek benim için çalıştı.
Mark Redman

0

PowerBI Embedded, TLS 1.2 gerektirir.

Etienne Faucher'in yukarıdaki cevabı sizin çözümünüzdür. yukarıdaki cevaba hızlı bağlantı ... yukarıdaki cevaba hızlı bağlantı ... ( https://stackoverflow.com/a/45442874 )

PowerBI, TLS 1.2 Gerektirir Haziran 2020 - Cevabınız Bu - Çerçeveden aradığınız varsayılan TLS 1.2 davranışını zorlamak için IIS çalışma zamanınızı 4.6'ya yükseltmeye zorlayın. Yukarıdaki cevap size yalnızca yapılandırma değişikliği çözümü sunar.

Belirtiler : Microsoft PowerBI Embedded'e Zorla Kapalı Reddedilen TCP / IP Bağlantısı, sistemlerinizde birdenbire ortaya çıkıyor.

Bu PowerBI Çağrıları, tıpkı bir güvenlik duvarının bir bağlantıyı engelleyeceği gibi, Sabit TCP / IP Kapatma hatasıyla çalışmayı durdurur. Genellikle kimlik doğrulama adımları işe yarar - belirli bir çalışma alanı için hizmete bastığınızda ve başarısız olduğu kimliği rapor ettiğinizde gerçekleşir.

Bu, Microsoft PowerBI'nin TLS 1.2 ile ilgili 2020 notudur

PowerBIClient

bu sorunu gösteren yöntemler

GetReportsInGroupAsync GetReportsInGroupAsAdminAsync GetReportsAsync GetReportsAsAdminAsync Microsoft.PowerBI.Api HttpClientHandler Force TLS 1.1 TLS 1.2

İnsanların bunu bulmasına yardımcı olmak için Arama Hatası Terimleri: System.Net.Http.HttpRequestException: İsteği gönderirken bir hata oluştu System.Net.WebException: Temel bağlantı kapatıldı: Göndermede beklenmeyen bir hata oluştu. System.IO.IOException: Aktarım bağlantısından veri okunamıyor: Mevcut bir bağlantı uzak ana bilgisayar tarafından zorla kapatıldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.