Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
David Galvan ve Rick Anderson tarafından
https/TLS kullanmak üzere ASP.NET Core uygulamalarınıza gelen istekleri zorunlu kılmak için şunları yapabilirsiniz:
- Tüm istekler için HTTPS iste.
- Tüm HTTP isteklerini HTTPS'ye yeniden yönlendirir.
Hiçbir API, istemcinin ilk istekte hassas veriler göndermesini önleyemez.
Bu makalede, ASP.NET Core uygulamalarınızı HTTPS/TLS gerektirecek şekilde yapılandırma veya güvenli etkileşim için HTTP isteklerini HTTPS/TLS'ye yönlendirme işlemleri açıklanmaktadır. Güvenilmeyen sertifika sorunlarını çözmek için çeşitli platformlar için sorun giderme adımları sağlanır.
API projeleri
Web API'lerini kullanan projeler aşağıdakilerden birini yapmalıdır:
- HTTP'de dinlemeyin.
- 400 (Hatalı İstek) durum koduyla bağlantıyı kapatın ve isteği sunmayın.
API'de HTTP yeniden yönlendirmesini devre dışı bırakmak için ortam değişkenini ASPNETCORE_URLS ayarlayın veya komut satırı bayrağını --urls kullanın. Daha fazla bilgi için bkz . ASP.NET Core çalışma zamanı ortamları ve Andrew Lock tarafından ASP.NET Core uygulamasının URL'lerini ayarlamanın 8 yolu .
Warning
Hassas bilgiler alan Web API'lerinde kullanmayınRequireHttpsAttribute.
RequireHttpsAttribute tarayıcıları HTTP'den HTTPS'ye yönlendirmek için HTTP durum kodlarını kullanır.
API istemcileri HTTP'den HTTPS'ye yönlendirmeleri anlamayabilir veya bunlara uymayabilir ve HTTP üzerinden bilgi gönderebilir.
HSTS ve API projeleri
HTTP Katı Aktarım Güvenliği (HSTS) protokolü için güvenli yaklaşım, API projelerini yalnızca HTTPS üzerinden dinleyecek ve yanıt verecek şekilde yapılandırmaktır.
Warning
Genellikle yalnızca bir tarayıcı yönergesi olduğundan varsayılan API projeleri HSTS içermez. Telefon veya masaüstü uygulamaları gibi diğer arayanlar yönergeye uymaz. Tarayıcılar içinde bile, HTTP üzerinden API'ye yapılan tek bir kimliği doğrulanmış çağrının güvenli olmayan ağlarda riskleri vardır.
HTTP'den HTTPS'ye yönlendirme (CORS ön kontrol isteğinde ERR_INVALID_REDIRECT)
HTTP kullanan bir uç noktaya yapılan istek, UseHttpsRedirection yöntemiyle HTTPS'ye yönlendirildiğinde, yeniden yönlendirme CORS ön kontrol isteğinde ERR_INVALID_REDIRECT hatasıyla başarısız olur.
API projeleri, istekleri HTTPS'ye yeniden yönlendirmek için UseHttpsRedirection yöntemini kullanmak yerine HTTP isteklerini reddedebilir.
HTTPS'i zorunlu kıl.
Üretim ASP.NET Core web uygulamaları için aşağıdaki yaklaşım önerilir:
HTTP isteklerini HTTPS'ye yönlendirmek için HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection ) kullanın.
İstemcilere HSTS üst bilgileri göndermek için UseHsts yöntemi aracılığıyla HSTS ara yazılımını kullanın.
Note
Ters ara sunucu yapılandırmasında dağıtılan uygulamalar, proxy'nin bağlantı güvenliğini (HTTPS) işlemesine olanak tanır. Proxy, HTTPS yeniden yönlendirmeyi de işleyecekse, HTTPS yeniden yönlendirme ara yazılımını kullanmanız gerekmez. Proxy sunucusu HSTS üst bilgilerini de yazıyorsa (örneğin, Internet Information Services (IIS) 10.0 sürüm 1709 ve sonraki sürümlerde yerel HSTS desteği), uygulama HSTS ara katmanını gerektirmez. Daha fazla bilgi için bkz . Proje oluşturma işleminde HTTPS/HSTS'yi geri çevirme.
UseHttpsRedirection
Aşağıdaki kod, UseHttpsRedirection dosyasında yöntemini çağırır:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Yukarıdaki vurgulanan kod:
- Varsayılan HttpsRedirectionOptions.RedirectStatusCode özelliğini Status307TemporaryRedirect koduyla kullanır.
-
HttpsRedirectionOptions.HttpsPort ortam değişkeni veya
ASPNETCORE_HTTPS_PORTtarafından geçersiz kılınmadığı sürece varsayılan IServerAddressesFeature özelliğini kullanır (null geçirilerek).
Önerilen yaklaşım, kalıcı yeniden yönlendirmeler yerine geçici yeniden yönlendirmeler kullanmaktır. Bağlantı önbelleğe alma, geliştirme ortamlarında kararsız davranışlara neden olabilir. Uygulama Development ortamında değilken kalıcı yönlendirme durum kodu göndermeyi tercih ediyorsanız, Prodüksiyon ortamında kalıcı yönlendirmeleri yapılandırma bölümüne bakın. İstemcilere yalnızca güvenli kaynak isteklerinin uygulamaya gönderilmesi gerektiğini (yalnızca üretimde) sinyal vermek için HSTS kullanın.
Bağlantı noktası yapılandırması
Güvenli olmayan bir isteği HTTPS'ye yönlendirmek için ara yazılım için bir bağlantı noktası kullanılabilir olmalıdır. Kullanılabilir bağlantı noktası yoksa:
- HTTPS'ye yeniden yönlendirme gerçekleşmez.
- Ara yazılım, yeniden yönlendirme için https bağlantı noktasını belirleyemedi uyarısını günlüğe kaydeder.
Aşağıdaki yaklaşımlardan herhangi birini kullanarak HTTPS bağlantı noktasını belirtin:
HttpsRedirectionOptions.HttpsPort'u ayarlayın.
https_portKonak ayarını ayarlayın:Sunucu yapılandırmasında.
Ortam değişkenini
ASPNETCORE_HTTPS_PORTayarlayarak.appsettings.json dosyasına üst düzey girdi ekleyerek:
{ "https_port": 443, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
ASPNETCORE_URLS ortam değişkenini kullanarak güvenli şemaya sahip bir bağlantı noktası belirtin. Ortam değişkeni sunucuyu yapılandırıyor. Ara yazılım, IServerAddressesFeature aracılığıyla HTTPS bağlantı noktasını dolaylı olarak bulur. Bu yaklaşım ters ara sunucu dağıtımlarında çalışmaz.
ASP.NET Core web şablonları, hem hem de IIS Express için Kestrel dosyasında bir HTTPS URL'si ayarlar. launchsettings.json dosyası yalnızca yerel makinede kullanılır.
Sunucunun veya HTTP.sys sunucusunun genel erişime açık uç dağıtımı için bir HTTPS URL uç noktası yapılandırın. Uygulama tarafından yalnızca bir HTTPS bağlantı noktası kullanılır. Orta katman yazılımı IServerAddressesFeature aracılığıyla bağlantı noktasını bulur.
Note
Bir uygulama reverse proxy yapılandırmasında çalıştığında, IServerAddressesFeature kullanılamaz. Bu bölümde açıklanan diğer yaklaşımlardan birini kullanarak bağlantı noktasını ayarlayın.
Edge dağıtımları
Kestrel HTTP.sys genel kullanıma açık bir uç sunucu olarak kullanıldığında, Kestrel veya HTTP.sys her ikisinin de dinlenmesi için yapılandırılmalıdır.
- İstemcinin yeniden yönlendirildiği güvenli bağlantı noktası (genellikle, üretimde 443 ve geliştirme aşamasında 5001).
- Güvenli olmayan port (genellikle üretimde 80, geliştirme ortamında 5000 olarak kullanılır).
Uygulamanın güvenli olmayan bir isteği alabilmesi ve istemciyi güvenli bağlantı noktasına yönlendirebilmesi için güvenli olmayan bağlantı noktasının istemci tarafından erişilebilir olması gerekir.
Daha fazla bilgi için bkzKestrel. ASP.NET Core'da uç nokta yapılandırması veya HTTP.sys web sunucusu uygulaması.
Dağıtım senaryoları
İstemci ve sunucu arasındaki tüm güvenlik duvarlarının da trafik için açık iletişim bağlantı noktaları olmalıdır.
İstekler ters ara sunucu yapılandırmasında iletiliyorsa, HTTPS yeniden yönlendirme ara yazılımını çağırmadan önce iletilen üst bilgi ara yazılımını kullanın. İletilen üst bilgiler ara yazılımı, X-Forwarded-Proto üst bilgisini kullanarak Request.Scheme günceller. Ara yazılım, yeniden yönlendirme URI'lerinin ve diğer güvenlik ilkelerinin düzgün çalışmasına izin verir. İletilen başlıklar ara yazılımı kullanılmadığında, arka uç uygulaması doğru şemayı alamayabilir ve bir yeniden yönlendirme döngüsüne girebilir. Sık karşılaşılan son kullanıcı hata iletisi, çok fazla yeniden yönlendirme olmasıdır.
Azure App Service dağıtırken Azure App Service'da özel bir etki alanı için HTTPS'yi etkinleştirme başlığındaki yönergeleri izleyin.
Options
Aşağıda vurgulanan kod, ara yazılım seçeneklerini yapılandırmak için AddHttpsRedirection yöntemini çağırır:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
AddHttpsRedirection çağrısı yalnızca HttpsPort veya RedirectStatusCode değerlerini değiştirmek için gereklidir.
Yukarıdaki vurgulanan kod:
-
HttpsRedirectionOptions.RedirectStatusCode özelliğini Status307TemporaryRedirect varsayılan değer olan koda ayarlar.
StatusCodes sınıfının alanlarını
RedirectStatusCodeiçin atamalar için kullanın. - HTTPS bağlantı noktasını 5001 olarak ayarlar.
Üretimde kalıcı yeniden yönlendirmeleri yapılandırma
Ara yazılım varsayılan olarak tüm yeniden yönlendirmelerle bir Status307TemporaryRedirect kod gönderir. Uygulama belirtilen ortamda değilken kalıcı bir yönlendirme durum kodu göndermeyi tercih ediyorsanız, ara yazılım seçenekleri yapılandırmasını bu ortamda olmadığını kontrol eden bir koşullu ifadeye sarın.
Aşağıdaki kod , Program.cs dosyasındaki hizmetlerin yapılandırmasını gösterir:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (!builder.Environment.IsDevelopment())
{
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status308PermanentRedirect;
options.HttpsPort = 443;
});
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
HTTPS yeniden yönlendirme ara yazılımı alternatif yaklaşımı
HTTPS yeniden yönlendirme ara yazılımını (yöntemiyle UseHttpsRedirection ) kullanmanın bir alternatifi, URL yeniden yazma ara yazılımını (yöntemi aracılığıyla AddRedirectToHttps ) kullanmaktır.
AddRedirectToHttps , yeniden yönlendirme yürütülürken durum kodunu ve bağlantı noktasını da ayarlayabilir. Daha fazla bilgi için bkz. URL yeniden yazma ara yazılımı.
Uygulama diğer yeniden yönlendirme kurallarına gerek kalmadan HTTPS'ye yeniden yönlendirildiğinde, bu makalede açıklandığı gibi HTTPS yeniden yönlendirme ara yazılımının (UseHttpsRedirection) kullanılması önerilir.
HTTP Katı Aktarım Güvenliği (HSTS) protokolü
OWASP'ye göre, HSTS, bir web uygulaması tarafından bir yanıt başlığı aracılığıyla tanımlanan isteğe bağlı bir güvenlik geliştirmesidir. HSTS destekleyen bir tarayıcı bu üst bilgiyi aldığında:
- Tarayıcı, HTTP üzerinden herhangi bir iletişim gönderilmesini engelleyen etki alanının yapılandırmasını depolar. Tarayıcı, tüm iletişimi HTTPS üzerinden yönlendirir.
- Tarayıcı, kullanıcının güvenilmeyen veya geçersiz sertifikalar kullanmasını engeller. Tarayıcı, kullanıcının bu tür bir sertifikaya geçici olarak güvenmesine izin veren istemleri devre dışı bırakır.
İstemci HSTS'yi zorunlu kıldığından bazı sınırlamalar vardır:
- İstemcinin HSTS'yi desteklemesi gerekir.
- HSTS, HSTS ilkesini oluşturmak için en az bir başarılı HTTPS isteği gerektirir.
- Uygulamanın her HTTP isteğini denetlemesi ve HTTP isteğini yeniden yönlendirmesi veya reddetmesi gerekir.
ASP.NET Core, uzantı yöntemiyle UseHsts HSTS uygular. Uygulama geliştirme modunda değilken, aşağıdaki kod UseHsts çağrılır.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
UseHsts geliştirme aşamasında önerilmez çünkü HSTS ayarları tarayıcılar tarafından yüksek oranda önbelleğe alınabilir. Varsayılan olarak, UseHsts yerel geri döngü adresini dışlar.
HTTPS'yi ilk kez uygulayan üretim ortamları için yöntemlerden birini HstsOptions.MaxAge kullanarak ilk TimeSpan özellik değerini küçük bir miktara ayarlayın. HTTPS altyapısını HTTP'ye geri döndürmeniz gerekirse, saat değerini tek bir günden fazla olmayacak şekilde ayarlayın. HTTPS yapılandırmasının sürdürülebilirliğine güvendikten sonra HSTS max-age değerini artırın (genellikle bir yıl).
Aşağıdaki vurgulanmış kod:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
-
Strict-Transport-Securitybaşlığının ön yükleme parametresini ayarlar. Önceden yükleme , RFC 6797 HSTS belirtiminin bir parçası değildir. Web tarayıcıları, yeni yüklemede HSTS sitelerinin önceden yüklenmesini destekler. Daha fazla bilgi için bkz. https://hstspreload.org/. -
includeSubDomainHSTS ilkesini alt etki alanlarına uygulayan yönergesini etkinleştirir. Daha fazla bilgi için bkz. RFC 6797 HSTS belirtimi (Bölüm 6.1.2). - Üst bilgi
max-age'inStrict-Transport-Securityparametresini açıkça 60 güne ayarlar. Ayarlanmadıysa, varsayılan olarak 30 gün olur. Daha fazla bilgi içinmax-ageiçindeki yönergeye bakın. - Hariç tutulacak konaklar listesine
example.comekler.
UseHsts aşağıdaki geri döngü konaklarını dışlar:
-
localhost: IPv4 geri döngü adresi. -
127.0.0.1: IPv4 geri döngü adresi. -
[::1]: IPv6 geri döngü adresi.
Proje oluşturma işleminde HTTPS/HSTS'i geri çevirme
Bağlantı güvenliğinin ağın genel kullanıma yönelik kenarında işlendiği bazı arka uç hizmet senaryolarında, her düğümde bağlantı güvenliğini yapılandırmak gerekmez. Visual Studio'daki şablonlardan veya dotnet new komutundan oluşturulan web uygulamaları HTTPS yeniden yönlendirmesini ve HSTS'yi etkinleştirir. Bu senaryoları gerektirmeyen dağıtımlar için, uygulama şablondan oluşturulduğunda HTTPS/HSTS'yi geri çevirebilirsiniz.
HTTPS/HSTS'yi geri çevirmek için:
Yeni bir ASP.NET Core web uygulaması oluşturduğunuzda HTTPS için
ASP.NET Core HTTPS geliştirme sertifikasına güvenme
.NET SDK'sı bir HTTPS geliştirme sertifikası içerir. Sertifika, ilk çalıştırma deneyiminin bir parçası olarak yüklenir. Örneğin, dotnet --info komut aşağıdaki çıkışın bir çeşitlemini oluşturur:
ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
.NET SDK'sını yüklemek ASP.NET Core HTTPS geliştirme sertifikasını yerel kullanıcı sertifika deposuna yükler. Sertifika yüklü, ancak güvenilir değil. Sertifikaya güvenmek için aracı çalıştırmak için tek seferlik adımı gerçekleştirin dotnet dev-certs :
dotnet dev-certs https --trust
Aşağıdaki komut, dotnet dev-certs aracı hakkında yardım bilgisi verir.
dotnet dev-certs https --help
Warning
Kapsayıcı görüntüsü veya sanal makine gibi yeniden dağıtım için planlanan bir ortamda geliştirme sertifikası oluşturmayın. Bu senaryo kimlik sahtekarlığına ve ayrıcalıkların yükseltilmesine yol açabilir. Bu durumun önlenmesine yardımcı olmak için, .NET CLI'yı ilk kez çağırmadan önce DOTNET_GENERATE_ASPNET_CERTIFICATE ortam değişkenini false olarak ayarlayın. Bu yaklaşım, CLI'nın ilk çalıştırma deneyimi sırasında ASP.NET Core geliştirme sertifikasının otomatik olarak oluşturulmasını atlar.
Docker için geliştirici sertifikası ayarlama
Docker için geliştirici sertifikasını yapılandırmak için bkz. GitHub dotnet/aspnetcore.docs sorunu #6199 - Geliştirme aşamasında Docker kullanırken geliştirme sertifikası nasıl ayarlanır.
Linux'a özgü dikkat edilmesi gerekenler
Linux dağıtımları, sertifikaları güvenilir olarak işaretleme açısından önemli ölçüde farklılık gösterir.
Aracın dotnet dev-certs geniş ölçüde uygulanabilir olması beklenir, ancak yalnızca Ubuntu ve Fedora için resmi destek sağlanır. Destek özellikle Firefox ve Chromium tabanlı tarayıcılara (Microsoft Edge, Chrome ve Chromium) güven sağlanmasını amaçlar.
Dependencies
- OpenSSL güvenini sağlamak için
opensslaracının sistem yolunda olması gerekir. - Tarayıcı güveni oluşturmak için (örneğin Microsoft Edge veya Firefox'ta),
certutilaracı yolda olmalıdır.
OpenSSL güvenilirliği
ASP.NET Core geliştirme sertifikasına güvenildiğinde, sertifika geçerli kullanıcının giriş dizinindeki bir klasöre aktarılır. OpenSSL'nin (ve kullanan istemcilerin) bu klasörü almasını sağlamak için ortam değişkenini SSL_CERT_DIR ayarlamanız gerekir. gibi export SSL_CERT_DIR=$HOME/.aspnet/dev-certs/trust:/usr/lib/ssl/certs bir komut çalıştırarak (geçirildiğinde --verbose tam değer çıktıdadır) veya (distro ve kabuğa özgü) yapılandırma dosyanızı (örneğin .profile) ekleyerek değişkeni tek bir oturumda ayarlayabilirsiniz.
curl gibi araçların geliştirme sertifikasına güvenmesini sağlamak için bu yaklaşım gereklidir. Alternatif olarak, her bir -CAfile çağrısına -CApath veya curl iletebilirsiniz.
Note
Kullandığınız ana sürüme bağlı olarak 1.1.1h veya üzeri ya da 3.0.0 veya üzeri gerekir.
OpenSSL güven yapısı bozuk bir duruma girerse (örneğin dotnet dev-certs https --clean bunu kaldıramazsa), durumu çoğu zaman c_rehash aracını kullanarak çözebilirsiniz.
Overrides
Kendi Ağ Güvenlik Hizmetleri (NSS) deposuna sahip başka bir tarayıcı kullanıyorsanız, ortam değişkenini DOTNET_DEV_CERTS_NSSDB_PATHS kullanarak NSS dizinlerinin iki nokta üst üste ayrılmış listesini (örneğin, içeren cert9.dbdizin) belirtebilirsiniz. Daha sonra geliştirme sertifikası konumunu değişkendeki listeye ekleyebilirsiniz.
OpenSSL'nin güvenmesini istediğiniz sertifikaları belirli bir dizinde depolarsanız, sertifika konumunu belirtmek için ortam değişkenini kullanabilirsiniz DOTNET_DEV_CERTS_OPENSSL_CERTIFICATE_DIRECTORY .
Warning
Değişkenlerden birini ayarlarsanız, güven her güncelleştirildiğinde aynı değerleri ayarladığınızdan emin olun. Değerler değişirse, araç eski konumlardaki sertifikalar hakkında bilgi edinemez (örneğin, sertifika temizleme sırasında).
Sudo kullanma
Diğer platformlarda olduğu gibi geliştirme sertifikaları da her kullanıcı için ayrı olarak depolanır ve güvenilir.
dotnet dev-certs öğesini farklı bir kullanıcı olarak (örneğin, sudo kullanarak) çalıştırırsanız, bu durumda özellikle söz konusu kullanıcı (örneğin root) geliştirme sertifikasına güvenir.
Linux-dev-certs ile Linux'ta HTTPS sertifikasına güvenme
linux-dev-certs , Linux üzerinde geliştirici sertifikası oluşturmak ve güvenmek için kullanışlı bir yol sağlayan açık kaynak, topluluk tarafından desteklenen bir .NET genel aracıdır. Microsoft aracın bakımını yapmaz veya desteklemez.
Aşağıdaki komutlar aracı yükler ve güvenilir bir geliştirici sertifikası oluşturur:
dotnet tool update -g linux-dev-certs
dotnet linux-dev-certs install
Daha fazla bilgi edinmek veya sorunları bildirmek için bkz . linux-dev-certs GitHub deposu.
SUSE Linux Enterprise Server (SLES Linux)
Yapılandırmanız SUSE Linux Enterprise Server içeriyorsa bkz. GitHub dotnet/aspnetcore.docs sorunu #28292 - SLES üzerinde HTTPS sertifikasına güvenin.
Sertifika sorunlarını giderme (sertifika güvenilir değil)
Bazen bir ASP.NET Core HTTPS geliştirme sertifikası yüklenip güvenilen bir sertifika olduğunda, tarayıcı sertifikanın güvenilir olmadığı konusunda uyarı verir. Aşağıdaki bölümler bu sorunu gidermeye yönelik yardım sağlar.
ASP.NET Core HTTPS geliştirme sertifikası, Kestrel tarafından kullanılır.
IIS Express sertifikasını onarmak için bkz. Stack Overflow sorunu #20036984 / answer #20048613 - Eksik IIS Express SSL Sertifikasını nasıl geri yükleyebilirim?
Tüm platformlar - sertifika güvenilir değil
Tüm platformlar için güvenilmeyen sertifika sorunlarını aşağıdaki adımlarla çözmeyi deneyin:
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean dotnet dev-certs https --trustAçık tarayıcı örneklerini kapatın ve uygulamayı yeni bir tarayıcı penceresinde açın.
Tarayıcı önbelleği bir sertifikanın güvenilir olup olmadığını depolar. Kapatma/açma işlemi, sertifikaların tarayıcı önbellek ayarlarını yenilemeye yardımcı olur.
Komutlar dotnet dev-certs https genellikle tarayıcı güveni sorunlarının çoğunu çözer.
dotnet dev-certs https --clean Komut başarısız olursa ve tarayıcı sertifikaya hala güvenmiyorsa, aşağıdaki bölümlerde platforma özgü önerileri deneyin.
Docker - sertifika güvenilir değil
Docker kullanıyorsanız sorunu aşağıdaki adımlarla çözmeyi deneyin:
C:\Users{USER}\AppData\Roaming\ASP.NET\Https klasörünü silin.
Çözümü temizleyin. bin ve obj klasörlerini silin.
Geliştirme aracını yeniden başlatın. Örneğin, Visual Studio veya Visual Studio Code.
Windows - sertifika güvenilir değil
Windows'de çalışıyorsanız aşağıdaki sorun giderme adımlarını tamamlayın:
Sertifika deposundaki sertifikaları denetleyin. İki klasörde,
localhostkolay adına sahip birASP.NET Core HTTPS development certificatesertifikası arayın:- Geçerli Kullanıcı > Kişisel > Sertifikaları
- Geçerli Kullanıcı > Güvenilen Kök Sertifika Yetkilileri > Sertifikalar
Hem Kişisel hem de Güvenilen kök sertifika yetkililerinden tüm sertifikaları kaldırın.
Important
IIS Express localhost sertifikasını kaldırmayın.
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean dotnet dev-certs https --trustAçık tarayıcı örneklerini kapatın ve uygulamayı yeni bir tarayıcı penceresinde açın.
OS X - sertifika güvenilir değil
OS X ile çalışıyorsanız sorunu aşağıdaki adımlarla çözmeyi deneyin:
Anahtar Zinciri Erişimi'ni açın ve sistem anahtar zincirini seçin.
Localhost sertifikası olup olmadığını denetleyin.
Sertifikanın, tüm kullanıcılar için sertifikanın güvenilir olduğunu gösteren artı (
+) simgesini simgede gösterdiğini onaylayın.Sertifikayı sistem anahtarlığından kaldırın.
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean dotnet dev-certs https --trustAçık tarayıcı örneklerini kapatın ve uygulamayı yeni bir tarayıcı penceresinde açın.
Visual Studio'da sertifika sorunlarını giderme hakkında daha fazla bilgi için bkz.: GitHub dotnet/aspnetcore sorunu #16892) - IIS Express kullanırken HTTPS hatası.
Linux - sertifika güvenilir değil
Linux çalıştırıyorsanız güvenilmeyen sertifika sorunlarını gidermek için şu adımları izleyin:
Araştırdığınız sertifikanın sunucu tarafından Kestrel kullanılması planlanan kullanıcı HTTPS geliştirici sertifikası olduğunu onaylayın.
Geçerli kullanıcı varsayılan HTTPS geliştirici Kestrel sertifikasını aşağıdaki konumda denetleyin.
ls -la ~/.dotnet/corefx/cryptography/x509stores/myHTTPS geliştirici Kestrel sertifikası dosyası SHA1 parmak izidir. Dosya komutuyla
dotnet dev-certs https --cleansilindiğinde, farklı bir parmak iziyle gerektiğinde dosya yeniden oluşturulur.Aşağıdaki komutu çalıştırarak dışarı aktarılan sertifika eşleşmelerinin parmak izini doğrulayın:
openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crtSertifika parmak izi eşleşmiyorsa aşağıdaki koşulları araştırın:
Sertifikanın eski olup olmadığını denetleyin.
Sertifikanın kök kullanıcı için dışarı aktarılan bir geliştirici sertifikası olup olmadığını denetleyin.
- Bu durumda, sertifikayı dışarı aktarın.
Aşağıdaki klasörde kök kullanıcı sertifikasını denetleyin:
ls -la /root/.dotnet/corefx/cryptography/x509stores/my
Visual Studio ile kullanılan IIS Express SSL sertifikası
IIS Express sertifikasıyla ilgili sorunları gidermek için Visual Studio yükleyicisinde Repair öğesini seçin. Daha fazla bilgi için bkz. GitHub dotnet/aspnetcore sorunu #16892) - HTTPS IIS Express kullanılırken hata oluştu.
Grup ilkesi otomatik olarak imzalanan sertifikalara güvenmeyi engeller
Bazı durumlarda, grup ilkesi otomatik olarak imzalanan sertifikaların güvenilir olmasını engelleyebilir. Daha fazla bilgi için bkz. GitHub dotnet/aspnetcore sorunu #21173 - HTTPS geliştirici sertifikasına güvenme hatası.
İlgili içerik
Note
.NET 9 veya üzeri SDK kullanıyorsanız , bu makalenin .NET 9 sürümünde güncelleştirilmiş Linux yordamlarına bakın.
Warning
API projeleri
Hassas bilgiler alan Web API'lerinde kullanmayınRequireHttpsAttribute.
RequireHttpsAttribute tarayıcıları HTTP'den HTTPS'ye yönlendirmek için HTTP durum kodlarını kullanır. API istemcileri HTTP'den HTTPS'ye yönlendirmeleri anlamayabilir veya buna uymayabilir. Bu tür istemciler HTTP üzerinden bilgi gönderebilir. Web API'leri aşağıdakilerden birini yapmalıdır:
- HTTP'de dinlemeyin.
- 400 (Hatalı İstek) durum koduyla bağlantıyı kapatın ve isteği sunmayın.
API'de HTTP yeniden yönlendirmesini devre dışı bırakmak için ortam değişkenini ASPNETCORE_URLS ayarlayın veya komut satırı bayrağını --urls kullanın. Daha fazla bilgi için bkz . ASP.NET Core çalışma zamanı ortamları ve Andrew Lock tarafından ASP.NET Core uygulamasının URL'lerini ayarlamanın 8 yolu .
HSTS ve API projeleri
HSTS genellikle yalnızca bir tarayıcı yönergesi olduğundan varsayılan API projeleri HSTS içermez. Telefon veya masaüstü uygulamaları gibi diğer arayanlar yönergeye uymaz. Tarayıcılar içinde bile, HTTP üzerinden API'ye yapılan tek bir kimliği doğrulanmış çağrının güvenli olmayan ağlarda riskleri vardır. Güvenli yaklaşım, API projelerini yalnızca HTTPS'yi dinleyecek ve yanıt verecek şekilde yapılandırmaktır.
HTTPS'ye yönlendirmek için HTTP yeniden yönlendirmesi, CORS ön uç isteğinde ERR_INVALID_REDIRECT hatasına neden oluyor
HTTPS'ye yönlendirilen HTTP kullanan bir uç noktaya yapılan istekler, CORS denetim öncesi isteğinde UseHttpsRedirection ile ERR_INVALID_REDIRECT hatası verir.
API projeleri, istekleri HTTPS'ye yeniden yönlendirmek için kullanmak UseHttpsRedirection yerine HTTP isteklerini reddedebilir.
HTTPS'i zorunlu kıl.
Üretim ASP.NET Core web uygulamalarının aşağıdakini kullanmasını öneririz:
- HTTP isteklerini HTTPS'ye yönlendirmek için HTTPS yeniden yönlendirme ara yazılımı (UseHttpsRedirection).
- İstemcilere HTTP Strict Transport Security (HSTS) protokolü üst bilgileri göndermek için HSTS ara yazılımı (UseHsts).
Note
Ters ara sunucu yapılandırmasında dağıtılan uygulamalar, proxy'nin bağlantı güvenliğini (HTTPS) işlemesine olanak tanır. Proxy, HTTPS yeniden yönlendirmeyi de işleyecekse, HTTPS yeniden yönlendirme ara yazılımını kullanmanız gerekmez. Proxy sunucusu HSTS üst bilgilerini de yazıyorsa (örneğin, IIS 10.0 (1709) veya daha sonraki sürümlerde yerel HSTS desteği), uygulama için HSTS ara yazılımı gerekli değildir. Daha fazla bilgi için bkz . Proje oluşturma işleminde HTTPS/HSTS'yi geri çevirme.
UseHttpsRedirection
Aşağıdaki kod, UseHttpsRedirection dosyasında Program.cs çağrılarını yapar:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Yukarıdaki vurgulanan kod:
- Varsayılan HttpsRedirectionOptions.RedirectStatusCode (Status307TemporaryRedirect) kullanır.
- veya HttpsRedirectionOptions.HttpsPortortam değişkeni tarafından geçersiz kılınmadığı sürece varsayılan
ASPNETCORE_HTTPS_PORT(null) değerini IServerAddressesFeature kullanır.
Kalıcı yeniden yönlendirmeler yerine geçici yeniden yönlendirmeler kullanmanızı öneririz. Bağlantı önbelleğe alma, geliştirme ortamlarında kararsız davranışlara neden olabilir. Uygulama Development ortamında değilken kalıcı yönlendirme durum kodu göndermeyi tercih ediyorsanız, Prodüksiyon ortamında kalıcı yönlendirmeleri yapılandırma bölümüne bakın. İstemcilere uygulamaya yalnızca güvenli kaynak isteklerinin gönderilmesi gerektiğini (yalnızca üretimde) belirten sinyal vermek için HSTS kullanmanızı öneririz.
Bağlantı noktası yapılandırması
Güvenli olmayan bir isteği HTTPS'ye yönlendirmek için ara yazılım için bir bağlantı noktası kullanılabilir olmalıdır. Kullanılabilir bağlantı noktası yoksa:
- HTTPS'ye yeniden yönlendirme gerçekleşmez.
- Ara yazılım "Yeniden yönlendirme için https bağlantı noktası belirlenemedi" uyarısını günlüğe kaydeder.
Aşağıdaki yaklaşımlardan herhangi birini kullanarak HTTPS bağlantı noktasını belirtin:
HttpsRedirectionOptions.HttpsPort'u ayarlayın.
https_portKonak ayarını ayarlayın:Sunucu yapılandırmasında.
Ortam değişkenini
ASPNETCORE_HTTPS_PORTayarlayarak.appsettings.jsoniçinde bir üst düzey girdi ekleyerek:{ "https_port": 443, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
ASPNETCORE_URLS ortam değişkenini kullanarak güvenli düzen ile bir bağlantı noktası belirtin. Ortam değişkeni sunucuyu yapılandırıyor. Ara yazılım, IServerAddressesFeature aracılığıyla HTTPS bağlantı noktasını dolaylı olarak bulur. Bu yaklaşım ters ara sunucu dağıtımlarında çalışmaz.
ASP.NET Core web şablonları, hem
Properties/launchsettings.jsonhem de IIS Express için bir HTTPS URL'si ayarlar.launchsettings.jsonyalnızca yerel makinede kullanılır.Sunucunun veya HTTP.sys sunucusunun genel erişime açık uç dağıtımı için bir HTTPS URL uç noktası yapılandırın. Uygulama tarafından yalnızca bir HTTPS bağlantı noktası kullanılır. Orta katman yazılımı IServerAddressesFeature aracılığıyla bağlantı noktasını bulur.
Note
Bir uygulama ters proxy yapılandırmasında çalıştırıldığında, IServerAddressesFeature kullanılamaz. Bu bölümde açıklanan diğer yaklaşımlardan birini kullanarak bağlantı noktasını ayarlayın.
Edge dağıtımları
Kestrel HTTP.sys genel kullanıma açık bir uç sunucu olarak kullanıldığında, Kestrel veya HTTP.sys her ikisinin de dinlenmesi için yapılandırılmalıdır.
- İstemcinin yeniden yönlendirildiği güvenli bağlantı noktası (genellikle, üretimde 443 ve geliştirme aşamasında 5001).
- Güvenli olmayan port (genellikle üretimde 80, geliştirme ortamında 5000 olarak kullanılır).
Uygulamanın güvenli olmayan bir istek alması ve istemciyi güvenli bağlantı noktasına yönlendirmesi için güvenli olmayan bağlantı noktasına istemci tarafından erişilebilir olmalıdır.
Daha fazla bilgi için bkzKestrel. ASP.NET Core'da uç nokta yapılandırması veya HTTP.sys web sunucusu uygulaması.
Dağıtım senaryoları
İstemci ve sunucu arasındaki tüm güvenlik duvarlarının da trafik için açık iletişim bağlantı noktaları olmalıdır.
İstekler ters ara sunucu yapılandırmasında iletiliyorsa, HTTPS yeniden yönlendirme ara yazılımını çağırmadan önce iletilen üst bilgi ara yazılımını kullanın. İletilen üst bilgi ara yazılımı, X-Forwarded-Proto üst bilgisini kullanarak Request.Scheme değerini günceller. Ara yazılım, yeniden yönlendirme URI'lerinin ve diğer güvenlik ilkelerinin düzgün çalışmasına izin verir. İletilen üstbilgiler ara yazılımı kullanılmadığında, arka uç uygulaması doğru şemayı alamayabilir ve yeniden yönlendirme döngüsüne girebilir. Sık karşılaşılan son kullanıcı hata iletisi, çok fazla yeniden yönlendirme oluştuğudur.
Azure App Service'e dağıtım yaparken, Mevcut bir özel SSL sertifikasını Azure Web Apps'e bağlama öğreticisindeki yönergeleri izleyin.
Options
Ara yazılım seçeneklerini yapılandırmak için aşağıdaki vurgulanmış kod çağrıları AddHttpsRedirection :
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
AddHttpsRedirection çağrısı yalnızca HttpsPort veya RedirectStatusCode değerlerini değiştirmek için gereklidir.
Yukarıdaki vurgulanan kod:
-
HttpsRedirectionOptions.RedirectStatusCode varsayılan değer olan Status307TemporaryRedirect olarak ayarlanır.
StatusCodes sınıfının alanlarını
RedirectStatusCodeiçin atamalar için kullanın. - HTTPS bağlantı noktasını 5001 olarak ayarlar.
Üretimde kalıcı yeniden yönlendirmeleri yapılandırma
Ara yazılım varsayılan olarak tüm yeniden yönlendirmelerle bir Status307TemporaryRedirect gönderir. Uygulama belirtilen ortamda değilken kalıcı bir yönlendirme durum kodu göndermeyi tercih ediyorsanız, ara yazılım seçenekleri yapılandırmasını bu ortamda olmadığını kontrol eden bir koşullu ifadeye sarın.
içindeki Program.cshizmetleri yapılandırırken:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (!builder.Environment.IsDevelopment())
{
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status308PermanentRedirect;
options.HttpsPort = 443;
});
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
HTTPS yeniden yönlendirme ara yazılımı alternatif yaklaşımı
HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanın bir alternatifi, URL yeniden yazma ara yazılımını (AddRedirectToHttps kullanmaktır).
AddRedirectToHttps , yeniden yönlendirme yürütülürken durum kodunu ve bağlantı noktasını da ayarlayabilir. Daha fazla bilgi için bkz. URL yeniden yazma ara yazılımı.
Ek yeniden yönlendirme kuralları gerekmeden HTTPS'ye yeniden yönlendirme yaparken, bu makalede açıklanan HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanızı öneririz.
HTTP Katı Aktarım Güvenliği (HSTS) protokolü
OWASP'e göre, HTTP Strict Transport Security (HSTS), bir web uygulaması tarafından yanıt üst bilgisi kullanılarak belirtilen ve isteğe bağlı bir güvenlik geliştirmesidir. HSTS destekleyen bir tarayıcı bu üst bilgiyi aldığında:
- Tarayıcı, HTTP üzerinden herhangi bir iletişim gönderilmesini engelleyen etki alanının yapılandırmasını depolar. Tarayıcı, tüm iletişimi HTTPS üzerinden yönlendirir.
- Tarayıcı, kullanıcının güvenilmeyen veya geçersiz sertifikalar kullanmasını engeller. Tarayıcı, kullanıcının bu tür bir sertifikaya geçici olarak güvenmesine izin veren istemleri devre dışı bırakır.
HSTS istemci tarafından zorlandığından bazı sınırlamaları vardır:
- İstemcinin HSTS'yi desteklemesi gerekir.
- HSTS, HSTS ilkesini oluşturmak için en az bir başarılı HTTPS isteği gerektirir.
- Uygulamanın her HTTP isteğini denetlemesi ve HTTP isteğini yeniden yönlendirmesi veya reddetmesi gerekir.
ASP.NET Core, uzantı yöntemiyle UseHsts HSTS uygular. Uygulama geliştirme modunda değilken, aşağıdaki kod UseHsts çağrılır.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
UseHsts geliştirme aşamasında önerilmez çünkü HSTS ayarları tarayıcılar tarafından yüksek oranda önbelleğe alınabilir. Varsayılan olarak, UseHsts yerel geri döngü adresini dışlar.
HTTPS'yi ilk kez uygulayan üretim ortamları için yöntemlerden birini kullanarak başlangıç HstsOptions.MaxAge değerini küçük bir değere TimeSpan ayarlayın. HTTPS altyapısını HTTP'ye geri döndürmeniz gerekme ihtimaline karşı saat değerini tek bir günden fazla olmayacak şekilde ayarlayın. HTTPS yapılandırmasının sürdürülebilirliğine güvendikten sonra HSTS max-age değerini artırın; yaygın olarak kullanılan bir değer bir yıldır.
Aşağıdaki vurgulanmış kod:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
-
Strict-Transport-Securitybaşlığının ön yükleme parametresini ayarlar. Önceden yükleme, RFC HSTS belirtiminin bir parçası değildir, ancak yeni yüklemede HSTS sitelerini önceden yüklemek için web tarayıcıları tarafından desteklenir. Daha fazla bilgi için bkz. https://hstspreload.org/. - HSTS ilkesini Konak alt etki alanlarına uygulayan includeSubDomain'i etkinleştirir.
- Üst bilgi
max-age'inStrict-Transport-Securityparametresini açıkça 60 güne ayarlar. Ayarlanmadıysa, varsayılan olarak 30 gün olur. Daha fazla bilgi için "max-age" yönergesine bakın. - Hariç tutulacak konaklar listesine
example.comekler.
UseHsts aşağıdaki geri döngü konaklarını dışlar:
-
localhost: IPv4 geri döngü adresi. -
127.0.0.1: IPv4 geri döngü adresi. -
[::1]: IPv6 geri döngü adresi.
Proje oluşturma işleminde HTTPS/HSTS'i geri çevirme
Bağlantı güvenliğinin ağın genel kullanıma yönelik kenarında işlendiği bazı arka uç hizmet senaryolarında, her düğümde bağlantı güvenliğini yapılandırmak gerekmez. Visual Studio'daki şablonlardan veya dotnet new komutundan oluşturulan web uygulamaları HTTPS yeniden yönlendirmesini ve HSTS'yi etkinleştirir. Bu senaryoları gerektirmeyen dağıtımlar için, uygulama şablondan oluşturulduğunda HTTPS/HSTS'yi geri çevirebilirsiniz.
HTTPS/HSTS'yi geri çevirmek için:
HTTPS için yapılandır onay kutusunun işaretini kaldırın.
Windows ve macOS'ta ASP.NET Core HTTPS geliştirme sertifikasına güvenme
Firefox tarayıcısı için sonraki bölüme bakın.
.NET Core SDK'sı bir HTTPS geliştirme sertifikası içerir. Sertifika, ilk çalıştırma deneyiminin bir parçası olarak yüklenir. Örneğin, dotnet --info aşağıdaki çıkışın bir varyasyonunu üretir:
ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
.NET Core SDK'sını yüklemek, ASP.NET Core HTTPS geliştirme sertifikasını yerel kullanıcı sertifika deposuna yükler. Sertifika yüklendi, ancak güvenilir değil. Sertifikaya güvenmek için aracı çalıştırmak için tek seferlik adımı gerçekleştirin dotnet dev-certs :
dotnet dev-certs https --trust
Aşağıdaki komut, dotnet dev-certs aracı hakkında yardım bilgisi verir.
dotnet dev-certs https --help
Warning
Kapsayıcı görüntüsü veya sanal makine gibi yeniden dağıtılacak bir ortamda geliştirme sertifikası oluşturmayın. Bunu yapmak sahtekarlığa ve ayrıcalıkların yükseltilmesine yol açabilir. Bunu önlemeye yardımcı olmak için ortam değişkenini DOTNET_GENERATE_ASPNET_CERTIFICATE .NET CLI'yı ilk kez çağırmadan önce olarak false ayarlayın. Bu, CLI'nin ilk çalıştırma deneyimi sırasında ASP.NET Core geliştirme sertifikasının otomatik oluşturulmasını geçer.
SEC_ERROR_INADEQUATE_KEY_USAGE hatasını önlemek için Firefox ile HTTPS sertifikasına güvenme
Firefox tarayıcısı kendi sertifika deposunu kullanır, bu nedenle IIS Express veya geliştirici sertifikalarına güvenmez.
Firefox ile HTTPS sertifikasına güvenmeye, bir ilke dosyası oluşturmaya veya FireFox tarayıcısıyla yapılandırmaya yönelik iki yaklaşım vardır. Tarayıcıyla yapılandırıldığında ilke dosyası oluşturulur, bu nedenle iki yaklaşım eşdeğerdir.
Firefox ile HTTPS sertifikasına güvenmek için bir ilke dosyası oluşturma
Bir ilke dosyası (policies.json) şurada oluşturun:
- Windows:
%PROGRAMFILES%\Mozilla Firefox\distribution\ - Macos:
Firefox.app/Contents/Resources/distribution - Linux: Bu makalenin Linux üzerinde Firefox ile sertifikaya güvenme bölümüne bakın.
Firefox ilke dosyasına aşağıdaki JSON dosyasını ekleyin:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true
}
}
}
Yukarıdaki ilke dosyası, Windows sertifika deposundaki güvenilen sertifikalardan Firefox güven sertifikalarını yapar. Sonraki bölümde Firefox tarayıcısını kullanarak önceki ilke dosyasını oluşturmak için alternatif bir yaklaşım sağlanır.
Firefox tarayıcı kullanarak HTTPS sertifikasının güvenini yapılandırma
Aşağıdaki yönergeleri kullanarak ayarlayın security.enterprise_roots.enabled = true :
- FireFox tarayıcısında girin
about:config. - Riski Kabul Et'i ve riski kabul ediyorsanız Devam Et'i seçin.
- Tümünü Göster'i seçin
- Ayarla
security.enterprise_roots.enabled=true - Firefox'ta çıkış ve yeniden başlatma
Daha fazla bilgi için bkz . Firefox'ta Sertifika Yetkililerini (CA) Ayarlama ve mozilla/policy-templates/README dosyası.
Docker için geliştirici sertifikası ayarlama
Bu GitHub sorununa bakın.
Linux'ta HTTPS sertifikasına güvenme
Güven oluşturmak dağıtıma ve tarayıcıya özgüdür. Aşağıdaki bölümlerde bazı popüler dağıtımlar ve Chromium tarayıcıları (Edge ve Chrome) ve Firefox için yönergeler sağlanmaktadır.
Hizmet-hizmet iletişimi için Ubuntu sertifikaya güveniyor
Aşağıdaki yönergeler 20.04 gibi bazı Ubuntu sürümlerinde çalışmaz. Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #23686.
OpenSSL 1.1.1h veya üzerini yükleyin. OpenSSL'yi güncelleştirme yönergeleri için dağıtımınıza bakın.
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM sudo update-ca-certificates
Önceki komutlar:
- Geçerli kullanıcının geliştirici sertifikasının oluşturulduğundan emin olun.
- Geçerli kullanıcının ortamı kullanılarak,
ca-certificatesklasörü için gerekli olan yükseltilmiş izinlere sahip sertifika dışa aktarılır. - bayrağı kaldırılarak
-Ekök kullanıcı sertifikası dışarı aktarılır ve gerekirse oluşturulur. Yeni oluşturulan her sertifikanın farklı bir parmak izi vardır. Kök olarak çalışırken,sudove-Egerekli değildir.
Yukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Edge veya Chrome kullanarak Linux'ta HTTPS sertifikasına güvenme
- Ubuntu
- Red Hat Enterprise Linux
- SUSE Linux Kurumsal Sunucusu
Linux'ta chromium tarayıcıları için:
Dağıtımınız için
libnss3-toolspaketini yükleyin.Makinede
$HOME/.pki/nssdbklasörünün var olup olmadığını doğrulayın veya oluşturun.Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Aşağıdaki komutları çalıştırın:
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crtTarayıcıdan çıkın ve yeniden başlatın.
Linux üzerinde Firefox ile sertifikaya güvenme
Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Aşağıdaki komutla adresinde
/usr/lib/firefox/distribution/policies.jsonbir JSON dosyası oluşturun:
cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
"policies": {
"Certificates": {
"Install": [
"/usr/local/share/ca-certificates/aspnet/https.crt"
]
}
}
}
EOF
Not: Ubuntu 21.10 Firefox bir tutturma paketi olarak gelir ve yükleme klasörü şeklindedir /snap/firefox/current/usr/lib/firefox.
Tarayıcıyı kullanarak ilke dosyasını yapılandırmanın alternatif bir yolu için bu makaledeki Firefox tarayıcısını kullanarak HTTPS sertifikasının güvenini yapılandırma bölümüne bakın.
Fedora 34 ile sertifikaya güvenme
See:
- Bu GitHub açıklaması
- Fedora: Paylaşılan Sistem Sertifikalarını Kullanma
- Fedora'da bir .NET geliştirme ortamı ayarlayın.
Güvenliği diğer dağıtımlarda da sağlamak için sertifikaya güvenin
Bu GitHub sorununa bakın.
Linux için Windows Alt Sistemi'den HTTPS sertifikasına güven
Aşağıdaki yönergeler Ubuntu 20.04 gibi bazı Linux dağıtımlarında çalışmaz. Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #23686.
Linux için Windows Alt Sistemi (WSL), varsayılan olarak Windows'ta güvenilir olmayan bir HTTPS otomatik olarak imzalanan geliştirme sertifikası oluşturur. Windows'un WSL sertifikasına güvenmesinin en kolay yolu, WSL'yi Windows ile aynı sertifikayı kullanacak şekilde yapılandırmaktır:
Windows'ta geliştirici sertifikasını bir dosyaya aktarın:
dotnet dev-certs https -ep https.pfx -p $CREDENTIAL_PLACEHOLDER$ --trust$CREDENTIAL_PLACEHOLDER$bir paroladır.WSL penceresinde, WSL örneğinde dışarı aktarılan sertifikayı içeri aktarın:
dotnet dev-certs https --clean --import <<path-to-pfx>> --password $CREDENTIAL_PLACEHOLDER$
Yukarıdaki yaklaşım, sertifika başına ve WSL dağıtımı başına tek seferlik bir işlemdir. Sertifikayı tekrar tekrar dışarı aktarmaktan daha kolaydır. Windows'ta sertifikayı güncelleştirir veya yeniden oluşturursanız, önceki komutları yeniden çalıştırmanız gerekebilir.
Sertifika güvenilir değil gibi sertifika sorunlarını giderme
Bu bölüm, ASP.NET Core HTTPS geliştirme sertifikası yüklendiğinde ve güvenildiğinde yardım sağlar, ancak yine de sertifikaya güvenilmediğine ilişkin tarayıcı uyarılarınız vardır. ASP.NET Core HTTPS geliştirme sertifikası, Kestrel tarafından kullanılır.
IIS Express sertifikasını onarmak için bu Stackoverflow sorununa bakın.
Tüm platformlar - sertifika güvenilir değil
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın. Sertifika güveni tarayıcılar tarafından önbelleğe alınır.
dotnet dev-certs https --clean Başarısız Oluyor
Yukarıdaki komutlar tarayıcı güveni sorunlarının çoğunu çözer. Tarayıcı sertifikaya hala güvenmiyorsa, aşağıdaki platforma özgü önerileri izleyin.
Docker - sertifika güvenilir değil
- C:\Users{USER}\AppData\Roaming\ASP.NET\Https klasörünü silin.
- Çözümü temizleyin. bin ve obj klasörlerini silin.
- Geliştirme aracını yeniden başlatın. Örneğin, Visual Studio veya Visual Studio Code.
Windows - sertifika güvenilir değil
- Sertifika deposundaki sertifikaları denetleyin. Hem
localhostaltında hem deASP.NET Core HTTPS development certificatealtında,Current User > Personal > Certificateskolay anlaşılır isme sahip birlocalhostsertifika olmalıdır. - Bulunan tüm sertifikaları hem Kişisel hem de Güvenilen kök sertifika yetkililerinden kaldırın. IIS Express localhost sertifikasını kaldırmayın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın.
OS X - sertifika güvenilir değil
- Anahtar Zinciri Erişimi'ni açın.
- Sistem anahtar zincirini seçin.
- Localhost sertifikası olup olmadığını denetleyin.
- Tüm kullanıcılar için güvenilir olduğunu belirtmek için simgede bir
+simge olup olmadığını denetleyin. - Sertifikayı sistem anahtarlığından kaldırın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın.
Visual Studio ile ilgili sertifika sorunlarını gidermek için bkz. IIS Express kullanırken HTTPS Hatası (dotnet/AspNetCore #16892).
Linux sertifikası güvenilir değil
Güven için yapılandırılan sertifikanın sunucu tarafından Kestrel kullanılacak olan kullanıcı HTTPS geliştirici sertifikası olup olmadığını denetleyin.
Geçerli kullanıcı varsayılan HTTPS geliştirici Kestrel sertifikasını aşağıdaki konumda denetleyin.
ls -la ~/.dotnet/corefx/cryptography/x509stores/my
HTTPS geliştirici Kestrel sertifikası dosyası SHA1 parmak izidir. Dosya dotnet dev-certs https --clean aracılığıyla silindiğinde, farklı bir parmak iziyle gerektiğinde yeniden oluşturulur.
Dışarı aktarılan sertifika eşleşmelerinin parmak izini aşağıdaki komutla denetleyin:
openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt
Sertifika eşleşmiyorsa, aşağıdakilerden biri olabilir:
- Eski bir sertifika.
- Kök kullanıcı için bir geliştirici sertifikası dışa aktarılmış. Bu durumda sertifikayı dışarı aktarın.
Kök kullanıcı sertifikası şu konumda denetlenebilir:
ls -la /root/.dotnet/corefx/cryptography/x509stores/my
Visual Studio ile kullanılan IIS Express SSL sertifikası
IIS Express sertifikasıyla ilgili sorunları düzeltmek için Visual Studio yükleyicisinden Onar'ı seçin. Daha fazla bilgi için bu GitHub konusuna bakın.
Grup ilkesi otomatik olarak imzalanan sertifikaların güvenilir olmasını engeller
Bazı durumlarda, grup ilkesi otomatik olarak imzalanan sertifikaların güvenilir olmasını engelleyebilir. Daha fazla bilgi için bu GitHub konusuna bakın.
Ek bilgiler
Warning
API projeleri
Hassas bilgiler alan Web API'lerinde kullanmayınRequireHttpsAttribute.
RequireHttpsAttribute tarayıcıları HTTP'den HTTPS'ye yönlendirmek için HTTP durum kodlarını kullanır. API istemcileri HTTP'den HTTPS'ye yönlendirmeleri anlamayabilir veya buna uymayabilir. Bu tür istemciler HTTP üzerinden bilgi gönderebilir. Web API'leri aşağıdakilerden birini yapmalıdır:
- HTTP'de dinlemeyin.
- 400 (Hatalı İstek) durum koduyla bağlantıyı kapatın ve isteği sunmayın.
API'de HTTP yeniden yönlendirmesini devre dışı bırakmak için ortam değişkenini ASPNETCORE_URLS ayarlayın veya komut satırı bayrağını --urls kullanın. Daha fazla bilgi için bkz . ASP.NET Core çalışma zamanı ortamları ve Andrew Lock tarafından ASP.NET Core uygulamasının URL'lerini ayarlamanın 5 yolu .
HSTS ve API projeleri
HSTS genellikle yalnızca bir tarayıcı yönergesi olduğundan varsayılan API projeleri HSTS içermez. Telefon veya masaüstü uygulamaları gibi diğer arayanlar yönergeye uymaz. Tarayıcılar içinde bile, HTTP üzerinden API'ye yapılan tek bir kimliği doğrulanmış çağrının güvenli olmayan ağlarda riskleri vardır. Güvenli yaklaşım, API projelerini yalnızca HTTPS'yi dinleyecek ve yanıt verecek şekilde yapılandırmaktır.
HTTPS'i zorunlu kıl.
Üretim ASP.NET Core web uygulamalarının aşağıdakini kullanmasını öneririz:
- HTTP isteklerini HTTPS'ye yönlendirmek için HTTPS yeniden yönlendirme ara yazılımı (UseHttpsRedirection).
- İstemcilere HTTP Strict Transport Security (HSTS) protokolü üst bilgileri göndermek için HSTS ara yazılımı (UseHsts).
Note
Ters ara sunucu yapılandırmasında dağıtılan uygulamalar, proxy'nin bağlantı güvenliğini (HTTPS) işlemesine olanak tanır. Proxy, HTTPS yeniden yönlendirmeyi de işleyecekse, HTTPS yeniden yönlendirme ara yazılımını kullanmanız gerekmez. Proxy sunucusu HSTS üst bilgilerini yazmayı da üstleniyorsa (örneğin, IIS 10.0 (1709) veya sonraki sürümlerdeki yerel HSTS desteği), HSTS ara yazılımı uygulama için gerekli değildir. Daha fazla bilgi için bkz . Proje oluşturma işleminde HTTPS/HSTS'yi geri çevirme.
UseHttpsRedirection
UseHttpsRedirection sınıfında aşağıdaki kod Startup çağırır:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
Yukarıdaki vurgulanan kod:
- Varsayılan HttpsRedirectionOptions.RedirectStatusCode (Status307TemporaryRedirect) kullanır.
- veya HttpsRedirectionOptions.HttpsPortortam değişkeni tarafından geçersiz kılınmadığı sürece varsayılan
ASPNETCORE_HTTPS_PORT(null) değerini IServerAddressesFeature kullanır.
Kalıcı yeniden yönlendirmeler yerine geçici yeniden yönlendirmeler kullanmanızı öneririz. Bağlantı önbelleğe alma, geliştirme ortamlarında kararsız davranışlara neden olabilir. Uygulama Development ortamında değilken kalıcı yönlendirme durum kodu göndermeyi tercih ediyorsanız, Prodüksiyon ortamında kalıcı yönlendirmeleri yapılandırma bölümüne bakın. İstemcilere uygulamaya yalnızca güvenli kaynak isteklerinin gönderilmesi gerektiğini (yalnızca üretimde) belirten sinyal vermek için HSTS kullanmanızı öneririz.
Bağlantı noktası yapılandırması
Güvenli olmayan bir isteği HTTPS'ye yönlendirmek için ara yazılım için bir bağlantı noktası kullanılabilir olmalıdır. Kullanılabilir bağlantı noktası yoksa:
- HTTPS'ye yeniden yönlendirme gerçekleşmez.
- Ara yazılım "Yeniden yönlendirme için https bağlantı noktası belirlenemedi" uyarısını günlüğe kaydeder.
Aşağıdaki yaklaşımlardan herhangi birini kullanarak HTTPS bağlantı noktasını belirtin:
HttpsRedirectionOptions.HttpsPort'u ayarlayın.
https_portKonak ayarını ayarlayın:Sunucu yapılandırmasında.
Ortam değişkenini
ASPNETCORE_HTTPS_PORTayarlayarak.appsettings.jsoniçinde bir üst düzey girdi ekleyerek:{ "https_port": 443, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
ASPNETCORE_URLS ortam değişkenini kullanarak güvenli düzen ile bir bağlantı noktası belirtin. Ortam değişkeni sunucuyu yapılandırıyor. Ara yazılım, IServerAddressesFeature aracılığıyla HTTPS bağlantı noktasını dolaylı olarak bulur. Bu yaklaşım ters ara sunucu dağıtımlarında çalışmaz.
Geliştirme aşamasında, bir HTTPS URL'sini
launchsettings.jsoniçinde ayarlayın. IIS Express kullanıldığında HTTPS'yi etkinleştirin.Sunucunun veya HTTP.sys sunucusunun genel erişime açık uç dağıtımı için bir HTTPS URL uç noktası yapılandırın. Uygulama tarafından yalnızca bir HTTPS bağlantı noktası kullanılır. Orta katman yazılımı IServerAddressesFeature aracılığıyla bağlantı noktasını bulur.
Note
Bir uygulama ters proxy yapılandırmasında çalıştırıldığında, IServerAddressesFeature kullanılamaz. Bu bölümde açıklanan diğer yaklaşımlardan birini kullanarak bağlantı noktasını ayarlayın.
Edge dağıtımları
Sadece Kestrel veya HTTP.sys genel kullanıma açık bir uç sunucu olarak kullanıldığında, Kestrel veya HTTP.sys'in her ikisi de dinleme yapacak şekilde yapılandırılmalıdır.
- İstemcinin yeniden yönlendirildiği güvenli bağlantı noktası (genellikle, üretimde 443 ve geliştirme aşamasında 5001).
- Güvenli olmayan port (genellikle üretimde 80, geliştirme ortamında 5000 olarak kullanılır).
Uygulamanın güvenli olmayan bir istek alması ve istemciyi güvenli bağlantı noktasına yönlendirmesi için güvenli olmayan bağlantı noktasına istemci tarafından erişilebilir olmalıdır.
Daha fazla bilgi için bkzKestrel. ASP.NET Core'da uç nokta yapılandırması veya HTTP.sys web sunucusu uygulaması.
Dağıtım senaryoları
İstemci ve sunucu arasındaki tüm güvenlik duvarlarının da trafik için açık iletişim bağlantı noktaları olmalıdır.
İstekler ters ara sunucu yapılandırmasında iletiliyorsa, HTTPS yeniden yönlendirme ara yazılımını çağırmadan önce iletilen üst bilgi ara yazılımını kullanın. İletilen üstbilgiler ara yazılımı, X-Forwarded-Proto üstbilgisini kullanarak Request.Scheme öğesini günceller. Ara yazılım, yeniden yönlendirme URI'lerinin ve diğer güvenlik ilkelerinin düzgün çalışmasına izin verir. İletilen başlıklar ara katman yazılımı kullanılmadığında, arka uç uygulaması doğru şemayı alamayabilir ve yeniden yönlendirme döngüsüne girebilir. Sık karşılaşılan son kullanıcı hata iletisi, çok fazla yeniden yönlendirme oluştuğudur.
Azure App Service'e dağıtım yaparken, Mevcut bir özel SSL sertifikasını Azure Web Apps'e bağlama öğreticisindeki yönergeleri izleyin.
Options
Ara yazılım seçeneklerini yapılandırmak için aşağıdaki vurgulanmış kod çağrıları AddHttpsRedirection :
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = (int) HttpStatusCode.TemporaryRedirect;
options.HttpsPort = 5001;
});
}
AddHttpsRedirection çağrısı yalnızca HttpsPort veya RedirectStatusCode değerlerini değiştirmek için gereklidir.
Yukarıdaki vurgulanan kod:
-
HttpsRedirectionOptions.RedirectStatusCode varsayılan değer olan Status307TemporaryRedirect olarak ayarlanır.
StatusCodes sınıfının alanlarını
RedirectStatusCodeiçin atamalar için kullanın. - HTTPS bağlantı noktasını 5001 olarak ayarlar.
Üretimde kalıcı yeniden yönlendirmeleri yapılandırma
Ara yazılım varsayılan olarak tüm yeniden yönlendirmelerle bir Status307TemporaryRedirect gönderir. Uygulama belirtilen ortamda değilken kalıcı bir yönlendirme durum kodu göndermeyi tercih ediyorsanız, ara yazılım seçenekleri yapılandırmasını bu ortamda olmadığını kontrol eden bir koşullu ifadeye sarın.
içindeki Startup.cshizmetleri yapılandırırken:
public void ConfigureServices(IServiceCollection services)
{
// IWebHostEnvironment (stored in _env) is injected into the Startup class.
if (!_env.IsDevelopment())
{
services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = (int) HttpStatusCode.PermanentRedirect;
options.HttpsPort = 443;
});
}
}
HTTPS yeniden yönlendirme ara yazılımı alternatif yaklaşımı
HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanın bir alternatifi, URL yeniden yazma ara yazılımını (AddRedirectToHttps kullanmaktır).
AddRedirectToHttps , yeniden yönlendirme yürütülürken durum kodunu ve bağlantı noktasını da ayarlayabilir. Daha fazla bilgi için bkz. URL yeniden yazma ara yazılımı.
Ek yeniden yönlendirme kuralları gerekmeden HTTPS'ye yeniden yönlendirme yaparken, bu makalede açıklanan HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanızı öneririz.
HTTP Katı Aktarım Güvenliği (HSTS) protokolü
OWASP'e göre, HTTP Strict Transport Security (HSTS), bir web uygulaması tarafından yanıt üst bilgisi kullanılarak belirtilen ve isteğe bağlı bir güvenlik geliştirmesidir. HSTS destekleyen bir tarayıcı bu üst bilgiyi aldığında:
- Tarayıcı, HTTP üzerinden herhangi bir iletişim gönderilmesini engelleyen etki alanının yapılandırmasını depolar. Tarayıcı, tüm iletişimi HTTPS üzerinden yönlendirir.
- Tarayıcı, kullanıcının güvenilmeyen veya geçersiz sertifikalar kullanmasını engeller. Tarayıcı, kullanıcının bu tür bir sertifikaya geçici olarak güvenmesine izin veren istemleri devre dışı bırakır.
HSTS'nin istemci tarafından uygulanıyor olması nedeniyle bazı sınırlamaları vardır:
- İstemcinin HSTS'yi desteklemesi gerekir.
- HSTS, HSTS ilkesini oluşturmak için en az bir başarılı HTTPS isteği gerektirir.
- Uygulamanın her HTTP isteğini denetlemesi ve HTTP isteğini yeniden yönlendirmesi veya reddetmesi gerekir.
ASP.NET Core, uzantı yöntemiyle UseHsts HSTS uygular. Uygulama geliştirme modunda değilken, aşağıdaki kod UseHsts çağrılır.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
UseHsts geliştirme aşamasında önerilmez çünkü HSTS ayarları tarayıcılar tarafından yüksek oranda önbelleğe alınabilir. Varsayılan olarak, UseHsts yerel geri döngü adresini dışlar.
HTTPS'yi ilk kez uygulayan üretim ortamları için yöntemlerden birini kullanarak başlangıç HstsOptions.MaxAge değerini küçük bir değere TimeSpan ayarlayın. HTTPS altyapısını HTTP'ye geri döndürmeniz gerekme ihtimaline karşı saat değerini tek bir günden fazla olmayacak şekilde ayarlayın. HTTPS yapılandırmasının sürdürülebilirliğine güvendikten sonra HSTS max-age değerini artırın; yaygın olarak kullanılan bir değer bir yıldır.
Aşağıdaki kod:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = (int) HttpStatusCode.TemporaryRedirect;
options.HttpsPort = 5001;
});
}
-
Strict-Transport-Securitybaşlığının ön yükleme parametresini ayarlar. Önceden yükleme, RFC HSTS belirtiminin bir parçası değildir, ancak yeni yüklemede HSTS sitelerini önceden yüklemek için web tarayıcıları tarafından desteklenir. Daha fazla bilgi için bkz. https://hstspreload.org/. - HSTS ilkesini Konak alt etki alanlarına uygulayan includeSubDomain'i etkinleştirir.
- Üst bilgi
max-age'inStrict-Transport-Securityparametresini açıkça 60 güne ayarlar. Ayarlanmadıysa, varsayılan olarak 30 gün olur. Daha fazla bilgi için "max-age" yönergesine bakın. - Hariç tutulacak konaklar listesine
example.comekler.
UseHsts aşağıdaki geri döngü konaklarını dışlar:
-
localhost: IPv4 geri döngü adresi. -
127.0.0.1: IPv4 geri döngü adresi. -
[::1]: IPv6 geri döngü adresi.
Proje oluşturma işleminde HTTPS/HSTS'i geri çevirme
Bağlantı güvenliğinin ağın genel kullanıma yönelik kenarında işlendiği bazı arka uç hizmet senaryolarında, her düğümde bağlantı güvenliğini yapılandırmak gerekmez. Visual Studio'daki şablonlardan veya dotnet new komutundan oluşturulan web uygulamaları HTTPS yeniden yönlendirmesini ve HSTS'yi etkinleştirir. Bu senaryoları gerektirmeyen dağıtımlar için, uygulama şablondan oluşturulduğunda HTTPS/HSTS'yi geri çevirebilirsiniz.
HTTPS/HSTS'yi geri çevirmek için:
HTTPS için yapılandır onay kutusunun işaretini kaldırın.
Windows ve macOS'ta ASP.NET Core HTTPS geliştirme sertifikasına güvenme
Firefox tarayıcısı için sonraki bölüme bakın.
.NET Core SDK'sı bir HTTPS geliştirme sertifikası içerir. Sertifika, ilk çalıştırma deneyiminin bir parçası olarak yüklenir. Örneğin, dotnet new webapp ilk kez çalıştırıldığında aşağıdaki çıktının bir çeşitlemesini üretir.
Installed an ASP.NET Core HTTPS development certificate.
To trust the certificate, run 'dotnet dev-certs https --trust'
Learn about HTTPS: https://aka.ms/dotnet-https
.NET Core SDK'sını yüklemek, ASP.NET Core HTTPS geliştirme sertifikasını yerel kullanıcı sertifika deposuna yükler. Sertifika yüklendi, ancak güvenilir değil. Sertifikaya güvenmek için aracı çalıştırmak için tek seferlik adımı gerçekleştirin dotnet dev-certs :
dotnet dev-certs https --trust
Aşağıdaki komut, dotnet dev-certs aracı hakkında yardım bilgisi verir.
dotnet dev-certs https --help
Warning
Kapsayıcı görüntüsü veya sanal makine gibi yeniden dağıtılacak bir ortamda geliştirme sertifikası oluşturmayın. Bunu yapmak sahtekarlığa ve ayrıcalıkların yükseltilmesine yol açabilir. Bunu önlemeye yardımcı olmak için ortam değişkenini DOTNET_GENERATE_ASPNET_CERTIFICATE .NET CLI'yı ilk kez çağırmadan önce olarak false ayarlayın. Bu, CLI'nin ilk çalıştırma deneyimi sırasında ASP.NET Core geliştirme sertifikasının otomatik oluşturulmasını geçer.
SEC_ERROR_INADEQUATE_KEY_USAGE hatasını önlemek için Firefox ile HTTPS sertifikasına güvenme
Firefox tarayıcısı kendi sertifika deposunu kullanır, bu nedenle IIS Express veya geliştirici sertifikalarına güvenmez.
Firefox ile HTTPS sertifikasına güvenmeye, bir ilke dosyası oluşturmaya veya FireFox tarayıcısıyla yapılandırmaya yönelik iki yaklaşım vardır. Tarayıcıyla yapılandırıldığında ilke dosyası oluşturulur, bu nedenle iki yaklaşım eşdeğerdir.
Firefox ile HTTPS sertifikasına güvenmek için bir ilke dosyası oluşturma
Bir ilke dosyası (policies.json) şurada oluşturun:
- Windows:
%PROGRAMFILES%\Mozilla Firefox\distribution\ - Macos:
Firefox.app/Contents/Resources/distribution - Linux: Bu makalenin devamında Linux üzerinde Firefox ile sertifikaya güvenme konusuna bakın.
Firefox ilke dosyasına aşağıdaki JSON dosyasını ekleyin:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true
}
}
}
Yukarıdaki ilke dosyası, Windows sertifika deposundaki güvenilen sertifikalardan Firefox güven sertifikalarını yapar. Sonraki bölümde Firefox tarayıcısını kullanarak önceki ilke dosyasını oluşturmak için alternatif bir yaklaşım sağlanır.
Firefox tarayıcı kullanarak HTTPS sertifikasının güvenini yapılandırma
Aşağıdaki yönergeleri kullanarak ayarlayın security.enterprise_roots.enabled = true :
- FireFox tarayıcısında girin
about:config. - Riski Kabul Et'i ve riski kabul ediyorsanız Devam Et'i seçin.
- Tümünü Göster'i seçin.
- öğesini ayarlayın
security.enterprise_roots.enabled=true. - Firefox'dan çıkın ve yeniden başlatın.
Daha fazla bilgi için bkz . Firefox'ta Sertifika Yetkililerini (CA) Ayarlama ve mozilla/policy-templates/README dosyası.
Docker için geliştirici sertifikası ayarlama
Bu GitHub sorununa bakın.
Linux'ta HTTPS sertifikasına güvenme
Güven oluşturmak dağıtıma ve tarayıcıya özgüdür. Aşağıdaki bölümlerde bazı popüler dağıtımlar ve Chromium tarayıcıları (Edge ve Chrome) ve Firefox için yönergeler sağlanmaktadır.
Hizmet-hizmet iletişimi için Ubuntu sertifikaya güveniyor
OpenSSL 1.1.1h veya üzerini yükleyin. OpenSSL'yi güncelleştirme yönergeleri için dağıtımınıza bakın.
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM sudo update-ca-certificates
Önceki komutlar:
- Geçerli kullanıcının geliştirici sertifikasının oluşturulduğundan emin olun.
- Geçerli kullanıcının ortamını kullanarak
ca-certificatesklasörü için gereken yönetici izinlerine sahip sertifikayı dışa aktarın. - Kök kullanıcı sertifikasını dışa aktarmak için
-Ebayrağını kaldırın ve gerekirse kök kullanıcı sertifikasını oluşturun. Yeni oluşturulan her sertifikanın farklı bir parmak izi vardır. Kök olarak çalışırken,sudove-Egerekli değildir.
Yukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Edge veya Chrome kullanarak Linux'ta HTTPS sertifikasına güvenme
Linux'ta chromium tarayıcıları için:
Dağıtımınız için
libnss3-toolspaketini yükleyin.Makinede
$HOME/.pki/nssdbklasörünün var olup olmadığını doğrulayın veya oluşturun.Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Aşağıdaki komutları çalıştırın:
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crtTarayıcıdan çıkın ve yeniden başlatın.
Linux üzerinde Firefox ile sertifikaya güvenme
Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
aşağıdaki içeriklere sahip bir JSON dosyası
/usr/lib/firefox/distribution/policies.jsonoluşturun:
cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
"policies": {
"Certificates": {
"Install": [
"/usr/local/share/ca-certificates/aspnet/https.crt"
]
}
}
}
EOF
Tarayıcıyı kullanarak ilke dosyasını yapılandırmanın alternatif bir yolu için bu makaledeki Firefox tarayıcısını kullanarak HTTPS sertifikasının güvenini yapılandırma bölümüne bakın.
Fedora 34 ile sertifikaya güvenme
Fedora'da Firefox
echo 'pref("general.config.filename", "firefox.cfg");
pref("general.config.obscure_value", 0);' > ./autoconfig.js
echo '//Enable policies.json
lockPref("browser.policies.perUserDir", false);' > firefox.cfg
echo "{
\"policies\": {
\"Certificates\": {
\"Install\": [
\"aspnetcore-localhost-https.crt\"
]
}
}
}" > policies.json
dotnet dev-certs https -ep localhost.crt --format PEM
sudo mv autoconfig.js /usr/lib64/firefox/
sudo mv firefox.cfg /usr/lib64/firefox/
sudo mv policies.json /usr/lib64/firefox/distribution/
mkdir -p ~/.mozilla/certificates
cp localhost.crt ~/.mozilla/certificates/aspnetcore-localhost-https.crt
rm localhost.crt
Fedora'da dotnet-to-dotnet'e güvenme
sudo cp localhost.crt /etc/pki/tls/certs/localhost.pem
sudo update-ca-trust
rm localhost.crt
Daha fazla bilgi için bu GitHub açıklamasına bakın.
Güvenliği diğer dağıtımlarda da sağlamak için sertifikaya güvenin
Bu GitHub sorununa bakın.
Linux için Windows Alt Sistemi'den HTTPS sertifikasına güven
Linux için Windows Alt Sistemi (WSL) bir HTTPS otomatik olarak imzalanan geliştirme sertifikası oluşturur. Windows sertifika depoyu WSL sertifikasına güvenecek şekilde yapılandırmak için:
Geliştirici sertifikasını Windows'ta bir dosyaya aktarın:
dotnet dev-certs https -ep C:\<<path-to-folder>>\aspnetcore.pfx -p $CREDENTIAL_PLACEHOLDER$$CREDENTIAL_PLACEHOLDER$bir paroladır.WSL penceresinde, WSL örneğinde dışarı aktarılan sertifikayı içeri aktarın:
dotnet dev-certs https --clean --import /mnt/c/<<path-to-folder>>/aspnetcore.pfx -p $CREDENTIAL_PLACEHOLDER$
Yukarıdaki yaklaşım, sertifika başına ve WSL dağıtımı başına tek seferlik bir işlemdir. Sertifikayı tekrar tekrar dışarı aktarmaktan daha kolaydır. Windows'ta sertifikayı güncelleştirir veya yeniden oluşturursanız, önceki komutları yeniden çalıştırmanız gerekebilir.
Sertifika güvenilir değil gibi sertifika sorunlarını giderme
Bu bölüm, ASP.NET Core HTTPS geliştirme sertifikası yüklendiğinde ve güvenildiğinde yardım sağlar, ancak yine de sertifikaya güvenilmediğine ilişkin tarayıcı uyarılarınız vardır. ASP.NET Core HTTPS geliştirme sertifikası, Kestrel tarafından kullanılır.
IIS Express sertifikasını onarmak için bu Stackoverflow sorununa bakın.
Tüm platformlar - sertifika güvenilir değil
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın. Sertifika güveni tarayıcılar tarafından önbelleğe alınır.
dotnet dev-certs https --clean başarısız oluyor
Yukarıdaki komutlar tarayıcı güveni sorunlarının çoğunu çözer. Tarayıcı sertifikaya hala güvenmiyorsa, aşağıdaki platforma özgü önerileri izleyin.
Docker - sertifika güvenilir değil
- C:\Users{USER}\AppData\Roaming\ASP.NET\Https klasörünü silin.
- Çözümü temizleyin. bin ve obj klasörlerini silin.
- Geliştirme aracını yeniden başlatın. Örneğin, Visual Studio, Visual Studio Code veya Mac için Visual Studio.
Windows - sertifika güvenilir değil
- Sertifika deposundaki sertifikaları denetleyin. Hem
localhostaltında hem deASP.NET Core HTTPS development certificatealtında,Current User > Personal > Certificateskolay anlaşılır isme sahip birlocalhostsertifika olmalıdır. - Bulunan tüm sertifikaları hem Kişisel hem de Güvenilen kök sertifika yetkililerinden kaldırın. IIS Express localhost sertifikasını kaldırmayın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın. Sertifika güveni tarayıcılar tarafından önbelleğe alınır.
OS X - sertifika güvenilir değil
- Anahtar Zinciri Erişimi'ni açın.
- Sistem anahtar zincirini seçin.
- Localhost sertifikası olup olmadığını denetleyin.
- Tüm kullanıcılar için güvenilir olduğunu belirtmek için simgede bir
+simge olup olmadığını denetleyin. - Sertifikayı sistem anahtarlığından kaldırın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın. Sertifika güveni tarayıcılar tarafından önbelleğe alınır.
Visual Studio ile ilgili sertifika sorunlarını gidermek için bkz. IIS Express kullanırken HTTPS Hatası (dotnet/AspNetCore #16892).
Linux sertifikası güvenilir değil
Güven için yapılandırılan sertifikanın sunucu tarafından Kestrel kullanılacak olan kullanıcı HTTPS geliştirici sertifikası olup olmadığını denetleyin.
Geçerli kullanıcı varsayılan HTTPS geliştirici Kestrel sertifikasını aşağıdaki konumda denetleyin.
ls -la ~/.dotnet/corefx/cryptography/x509stores/my
HTTPS geliştirici Kestrel sertifikası dosyası SHA1 parmak izidir. Dosya dotnet dev-certs https --clean aracılığıyla silindiğinde, farklı bir parmak iziyle gerektiğinde yeniden oluşturulur.
Dışarı aktarılan sertifika eşleşmelerinin parmak izini aşağıdaki komutla denetleyin:
openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt
Sertifika eşleşmiyorsa, aşağıdakilerden biri olabilir:
- Eski bir sertifika.
- Kök kullanıcı için bir geliştirici sertifikası dışa aktarılmış. Bu durumda sertifikayı dışarı aktarın.
Kök kullanıcı sertifikası şu konumda denetlenebilir:
ls -la /root/.dotnet/corefx/cryptography/x509stores/my
Visual Studio ile kullanılan IIS Express SSL sertifikası
IIS Express sertifikasıyla ilgili sorunları düzeltmek için Visual Studio yükleyicisinden Onar'ı seçin. Daha fazla bilgi için bu GitHub konusuna bakın.
Ek bilgiler
Note
.NET 9 veya üzeri SDK kullanıyorsanız , bu makalenin .NET 9 sürümünde güncelleştirilmiş Linux yordamlarına bakın.
Warning
API projeleri
Hassas bilgiler alan Web API'lerinde kullanmayınRequireHttpsAttribute.
RequireHttpsAttribute tarayıcıları HTTP'den HTTPS'ye yönlendirmek için HTTP durum kodlarını kullanır. API istemcileri HTTP'den HTTPS'ye yönlendirmeleri anlamayabilir veya buna uymayabilir. Bu tür istemciler HTTP üzerinden bilgi gönderebilir. Web API'leri aşağıdakilerden birini yapmalıdır:
- HTTP'de dinlemeyin.
- 400 (Hatalı İstek) durum koduyla bağlantıyı kapatın ve isteği sunmayın.
API'de HTTP yeniden yönlendirmesini devre dışı bırakmak için ortam değişkenini ASPNETCORE_URLS ayarlayın veya komut satırı bayrağını --urls kullanın. Daha fazla bilgi için bkz . ASP.NET Core çalışma zamanı ortamları ve Andrew Lock tarafından ASP.NET Core uygulamasının URL'lerini ayarlamanın 8 yolu .
HSTS ve API projeleri
HSTS genellikle yalnızca bir tarayıcı yönergesi olduğundan varsayılan API projeleri HSTS içermez. Telefon veya masaüstü uygulamaları gibi diğer arayanlar yönergeye uymaz. Tarayıcılar içinde bile, HTTP üzerinden API'ye yapılan tek bir kimliği doğrulanmış çağrının güvenli olmayan ağlarda riskleri vardır. Güvenli yaklaşım, API projelerini yalnızca HTTPS'yi dinleyecek ve yanıt verecek şekilde yapılandırmaktır.
HTTPS'ye yönlendirmek için HTTP yeniden yönlendirmesi, CORS ön uç isteğinde ERR_INVALID_REDIRECT hatasına neden oluyor
HTTPS'ye yönlendirilen HTTP kullanan bir uç noktaya yapılan istekler, CORS denetim öncesi isteğinde UseHttpsRedirection ile ERR_INVALID_REDIRECT hatası verir.
API projeleri, istekleri HTTPS'ye yeniden yönlendirmek için kullanmak UseHttpsRedirection yerine HTTP isteklerini reddedebilir.
HTTPS'i zorunlu kıl.
Üretim ASP.NET Core web uygulamalarının aşağıdakini kullanmasını öneririz:
- HTTP isteklerini HTTPS'ye yönlendirmek için HTTPS yeniden yönlendirme ara yazılımı (UseHttpsRedirection).
- İstemcilere HTTP Strict Transport Security (HSTS) protokolü üst bilgileri göndermek için HSTS ara yazılımı (UseHsts).
Note
Ters ara sunucu yapılandırmasında dağıtılan uygulamalar, proxy'nin bağlantı güvenliğini (HTTPS) işlemesine olanak tanır. Proxy, HTTPS yeniden yönlendirmeyi de işleyecekse, HTTPS yeniden yönlendirme ara yazılımını kullanmanız gerekmez. Proxy sunucusu HSTS üst bilgilerini yazmayı da üstleniyorsa (örneğin, IIS 10.0 (1709) veya sonraki sürümlerdeki yerel HSTS desteği), HSTS ara yazılımı uygulama için gerekli değildir. Daha fazla bilgi için bkz . Proje oluşturma işleminde HTTPS/HSTS'yi geri çevirme.
UseHttpsRedirection
Aşağıdaki kod, UseHttpsRedirection dosyasında Program.cs çağrılarını yapar:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Yukarıdaki vurgulanan kod:
- Varsayılan HttpsRedirectionOptions.RedirectStatusCode (Status307TemporaryRedirect) kullanır.
- veya HttpsRedirectionOptions.HttpsPortortam değişkeni tarafından geçersiz kılınmadığı sürece varsayılan
ASPNETCORE_HTTPS_PORT(null) değerini IServerAddressesFeature kullanır.
Kalıcı yeniden yönlendirmeler yerine geçici yeniden yönlendirmeler kullanmanızı öneririz. Bağlantı önbelleğe alma, geliştirme ortamlarında kararsız davranışlara neden olabilir. Uygulama Development ortamında değilken kalıcı yönlendirme durum kodu göndermeyi tercih ediyorsanız, Prodüksiyon ortamında kalıcı yönlendirmeleri yapılandırma bölümüne bakın. İstemcilere uygulamaya yalnızca güvenli kaynak isteklerinin gönderilmesi gerektiğini (yalnızca üretimde) belirten sinyal vermek için HSTS kullanmanızı öneririz.
Bağlantı noktası yapılandırması
Güvenli olmayan bir isteği HTTPS'ye yönlendirmek için ara yazılım için bir bağlantı noktası kullanılabilir olmalıdır. Kullanılabilir bağlantı noktası yoksa:
- HTTPS'ye yeniden yönlendirme gerçekleşmez.
- Ara yazılım "Yeniden yönlendirme için https bağlantı noktası belirlenemedi" uyarısını günlüğe kaydeder.
Aşağıdaki yaklaşımlardan herhangi birini kullanarak HTTPS bağlantı noktasını belirtin:
HttpsRedirectionOptions.HttpsPort'u ayarlayın.
https_portKonak ayarını ayarlayın:Sunucu yapılandırmasında.
Ortam değişkenini
ASPNETCORE_HTTPS_PORTayarlayarak.appsettings.jsoniçinde bir üst düzey girdi ekleyerek:{ "https_port": 443, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
ASPNETCORE_URLS ortam değişkenini kullanarak güvenli düzen ile bir bağlantı noktası belirtin. Ortam değişkeni sunucuyu yapılandırıyor. Ara yazılım, IServerAddressesFeature aracılığıyla HTTPS bağlantı noktasını dolaylı olarak bulur. Bu yaklaşım ters ara sunucu dağıtımlarında çalışmaz.
ASP.NET Core web şablonları, hem
Properties/launchsettings.jsonhem de IIS Express için bir HTTPS URL'si ayarlar.launchsettings.jsonyalnızca yerel makinede kullanılır.Sunucunun veya HTTP.sys sunucusunun genel erişime açık uç dağıtımı için bir HTTPS URL uç noktası yapılandırın. Uygulama tarafından yalnızca bir HTTPS bağlantı noktası kullanılır. Orta katman yazılımı IServerAddressesFeature aracılığıyla bağlantı noktasını bulur.
Note
Bir uygulama ters proxy yapılandırmasında çalıştırıldığında, IServerAddressesFeature kullanılamaz. Bu bölümde açıklanan diğer yaklaşımlardan birini kullanarak bağlantı noktasını ayarlayın.
Edge dağıtımları
Kestrel HTTP.sys genel kullanıma açık bir uç sunucu olarak kullanıldığında, Kestrel veya HTTP.sys her ikisinin de dinlenmesi için yapılandırılmalıdır.
- İstemcinin yeniden yönlendirildiği güvenli bağlantı noktası (genellikle, üretimde 443 ve geliştirme aşamasında 5001).
- Güvenli olmayan port (genellikle üretimde 80, geliştirme ortamında 5000 olarak kullanılır).
Uygulamanın güvenli olmayan bir istek alması ve istemciyi güvenli bağlantı noktasına yönlendirmesi için güvenli olmayan bağlantı noktasına istemci tarafından erişilebilir olmalıdır.
Daha fazla bilgi için bkzKestrel. ASP.NET Core'da uç nokta yapılandırması veya HTTP.sys web sunucusu uygulaması.
Dağıtım senaryoları
İstemci ve sunucu arasındaki tüm güvenlik duvarlarının da trafik için açık iletişim bağlantı noktaları olmalıdır.
İstekler ters ara sunucu yapılandırmasında iletiliyorsa, HTTPS yeniden yönlendirme ara yazılımını çağırmadan önce iletilen üst bilgi ara yazılımını kullanın. İletilen üstbilgiler ara yazılımı, X-Forwarded-Proto üstbilgisini kullanarak Request.Scheme öğesini günceller. Ara yazılım, yeniden yönlendirme URI'lerinin ve diğer güvenlik ilkelerinin düzgün çalışmasına izin verir. İletilen başlıklar ara katman yazılımı kullanılmadığında, arka uç uygulaması doğru şemayı alamayabilir ve yeniden yönlendirme döngüsüne girebilir. Sık karşılaşılan son kullanıcı hata iletisi, çok fazla yeniden yönlendirme oluştuğudur.
Azure App Service'e dağıtım yaparken, Mevcut bir özel SSL sertifikasını Azure Web Apps'e bağlama öğreticisindeki yönergeleri izleyin.
Options
Ara yazılım seçeneklerini yapılandırmak için aşağıdaki vurgulanmış kod çağrıları AddHttpsRedirection :
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
AddHttpsRedirection çağrısı yalnızca HttpsPort veya RedirectStatusCode değerlerini değiştirmek için gereklidir.
Yukarıdaki vurgulanan kod:
-
HttpsRedirectionOptions.RedirectStatusCode varsayılan değer olan Status307TemporaryRedirect olarak ayarlanır.
StatusCodes sınıfının alanlarını
RedirectStatusCodeiçin atamalar için kullanın. - HTTPS bağlantı noktasını 5001 olarak ayarlar.
Üretimde kalıcı yeniden yönlendirmeleri yapılandırma
Ara yazılım varsayılan olarak tüm yeniden yönlendirmelerle bir Status307TemporaryRedirect gönderir. Uygulama belirtilen ortamda değilken kalıcı bir yönlendirme durum kodu göndermeyi tercih ediyorsanız, ara yazılım seçenekleri yapılandırmasını bu ortamda olmadığını kontrol eden bir koşullu ifadeye sarın.
içindeki Program.cshizmetleri yapılandırırken:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (!builder.Environment.IsDevelopment())
{
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status308PermanentRedirect;
options.HttpsPort = 443;
});
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
HTTPS yeniden yönlendirme ara yazılımı alternatif yaklaşımı
HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanın bir alternatifi, URL yeniden yazma ara yazılımını (AddRedirectToHttps kullanmaktır).
AddRedirectToHttps , yeniden yönlendirme yürütülürken durum kodunu ve bağlantı noktasını da ayarlayabilir. Daha fazla bilgi için bkz. URL yeniden yazma ara yazılımı.
Ek yeniden yönlendirme kuralları gerekmeden HTTPS'ye yeniden yönlendirme yaparken, bu makalede açıklanan HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanızı öneririz.
HTTP Katı Aktarım Güvenliği (HSTS) protokolü
OWASP'e göre, HTTP Strict Transport Security (HSTS), bir web uygulaması tarafından yanıt üst bilgisi kullanılarak belirtilen ve isteğe bağlı bir güvenlik geliştirmesidir. HSTS destekleyen bir tarayıcı bu üst bilgiyi aldığında:
- Tarayıcı, HTTP üzerinden herhangi bir iletişim gönderilmesini engelleyen etki alanının yapılandırmasını depolar. Tarayıcı, tüm iletişimi HTTPS üzerinden yönlendirir.
- Tarayıcı, kullanıcının güvenilmeyen veya geçersiz sertifikalar kullanmasını engeller. Tarayıcı, kullanıcının bu tür bir sertifikaya geçici olarak güvenmesine izin veren istemleri devre dışı bırakır.
HSTS istemci tarafından zorlandığından bazı sınırlamaları vardır:
- İstemcinin HSTS'yi desteklemesi gerekir.
- HSTS, HSTS ilkesini oluşturmak için en az bir başarılı HTTPS isteği gerektirir.
- Uygulamanın her HTTP isteğini denetlemesi ve HTTP isteğini yeniden yönlendirmesi veya reddetmesi gerekir.
ASP.NET Core, uzantı yöntemiyle UseHsts HSTS uygular. Uygulama geliştirme modunda değilken, aşağıdaki kod UseHsts çağrılır.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
UseHsts geliştirme aşamasında önerilmez çünkü HSTS ayarları tarayıcılar tarafından yüksek oranda önbelleğe alınabilir. Varsayılan olarak, UseHsts yerel geri döngü adresini dışlar.
HTTPS'yi ilk kez uygulayan üretim ortamları için yöntemlerden birini kullanarak başlangıç HstsOptions.MaxAge değerini küçük bir değere TimeSpan ayarlayın. HTTPS altyapısını HTTP'ye geri döndürmeniz gerekme ihtimaline karşı saat değerini tek bir günden fazla olmayacak şekilde ayarlayın. HTTPS yapılandırmasının sürdürülebilirliğine güvendikten sonra HSTS max-age değerini artırın; yaygın olarak kullanılan bir değer bir yıldır.
Aşağıdaki vurgulanmış kod:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
-
Strict-Transport-Securitybaşlığının ön yükleme parametresini ayarlar. Önceden yükleme, RFC HSTS belirtiminin bir parçası değildir, ancak yeni yüklemede HSTS sitelerini önceden yüklemek için web tarayıcıları tarafından desteklenir. Daha fazla bilgi için bkz. https://hstspreload.org/. - HSTS ilkesini Konak alt etki alanlarına uygulayan includeSubDomain'i etkinleştirir.
- Üst bilgi
max-age'inStrict-Transport-Securityparametresini açıkça 60 güne ayarlar. Ayarlanmadıysa, varsayılan olarak 30 gün olur. Daha fazla bilgi için "max-age" yönergesine bakın. - Hariç tutulacak konaklar listesine
example.comekler.
UseHsts aşağıdaki geri döngü konaklarını dışlar:
-
localhost: IPv4 geri döngü adresi. -
127.0.0.1: IPv4 geri döngü adresi. -
[::1]: IPv6 geri döngü adresi.
Proje oluşturma işleminde HTTPS/HSTS'i geri çevirme
Bağlantı güvenliğinin ağın genel kullanıma yönelik kenarında işlendiği bazı arka uç hizmet senaryolarında, her düğümde bağlantı güvenliğini yapılandırmak gerekmez. Visual Studio'daki şablonlardan veya dotnet new komutundan oluşturulan web uygulamaları HTTPS yeniden yönlendirmesini ve HSTS'yi etkinleştirir. Bu senaryoları gerektirmeyen dağıtımlar için, uygulama şablondan oluşturulduğunda HTTPS/HSTS'yi geri çevirebilirsiniz.
HTTPS/HSTS'yi geri çevirmek için:
HTTPS için yapılandır onay kutusunun işaretini kaldırın.
Windows ve macOS'ta ASP.NET Core HTTPS geliştirme sertifikasına güvenme
Firefox tarayıcısı için sonraki bölüme bakın.
.NET Core SDK'sı bir HTTPS geliştirme sertifikası içerir. Sertifika, ilk çalıştırma deneyiminin bir parçası olarak yüklenir. Örneğin, dotnet --info aşağıdaki çıkışın bir varyasyonunu üretir:
ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
.NET Core SDK'sını yüklemek, ASP.NET Core HTTPS geliştirme sertifikasını yerel kullanıcı sertifika deposuna yükler. Sertifika yüklendi, ancak güvenilir değil. Sertifikaya güvenmek için aracı çalıştırmak için tek seferlik adımı gerçekleştirin dotnet dev-certs :
dotnet dev-certs https --trust
Aşağıdaki komut, dotnet dev-certs aracı hakkında yardım bilgisi verir.
dotnet dev-certs https --help
Warning
Kapsayıcı görüntüsü veya sanal makine gibi yeniden dağıtılacak bir ortamda geliştirme sertifikası oluşturmayın. Bunu yapmak sahtekarlığa ve ayrıcalıkların yükseltilmesine yol açabilir. Bunu önlemeye yardımcı olmak için ortam değişkenini DOTNET_GENERATE_ASPNET_CERTIFICATE .NET CLI'yı ilk kez çağırmadan önce olarak false ayarlayın. Bu, CLI'nin ilk çalıştırma deneyimi sırasında ASP.NET Core geliştirme sertifikasının otomatik oluşturulmasını geçer.
SEC_ERROR_INADEQUATE_KEY_USAGE hatasını önlemek için Firefox ile HTTPS sertifikasına güvenme
Firefox tarayıcısı kendi sertifika deposunu kullanır, bu nedenle IIS Express veya geliştirici sertifikalarına güvenmez.
Firefox ile HTTPS sertifikasına güvenmeye, bir ilke dosyası oluşturmaya veya FireFox tarayıcısıyla yapılandırmaya yönelik iki yaklaşım vardır. Tarayıcıyla yapılandırıldığında ilke dosyası oluşturulur, bu nedenle iki yaklaşım eşdeğerdir.
Firefox ile HTTPS sertifikasına güvenmek için bir ilke dosyası oluşturma
Bir ilke dosyası (policies.json) şurada oluşturun:
- Windows:
%PROGRAMFILES%\Mozilla Firefox\distribution\ - Macos:
Firefox.app/Contents/Resources/distribution - Linux: Bu makalenin Linux üzerinde Firefox ile sertifikaya güvenme bölümüne bakın.
Firefox ilke dosyasına aşağıdaki JSON dosyasını ekleyin:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true
}
}
}
Yukarıdaki ilke dosyası, Windows sertifika deposundaki güvenilen sertifikalardan Firefox güven sertifikalarını yapar. Sonraki bölümde Firefox tarayıcısını kullanarak önceki ilke dosyasını oluşturmak için alternatif bir yaklaşım sağlanır.
Firefox tarayıcı kullanarak HTTPS sertifikasının güvenini yapılandırma
Aşağıdaki yönergeleri kullanarak ayarlayın security.enterprise_roots.enabled = true :
- FireFox tarayıcısında girin
about:config. - Riski Kabul Et'i ve riski kabul ediyorsanız Devam Et'i seçin.
- Tümünü Göster'i seçin
- Ayarla
security.enterprise_roots.enabled=true - Firefox'ta çıkış ve yeniden başlatma
Daha fazla bilgi için bkz . Firefox'ta Sertifika Yetkililerini (CA) Ayarlama ve mozilla/policy-templates/README dosyası.
Docker için geliştirici sertifikası ayarlama
Bu GitHub sorununa bakın.
Linux'ta HTTPS sertifikasına güvenme
Güven oluşturmak dağıtıma ve tarayıcıya özgüdür. Aşağıdaki bölümlerde bazı popüler dağıtımlar ve Chromium tarayıcıları (Edge ve Chrome) ve Firefox için yönergeler sağlanmaktadır.
Hizmet-hizmet iletişimi için Ubuntu sertifikaya güveniyor
Aşağıdaki yönergeler 20.04 gibi bazı Ubuntu sürümlerinde çalışmaz. Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #23686.
OpenSSL 1.1.1h veya üzerini yükleyin. OpenSSL'yi güncelleştirme yönergeleri için dağıtımınıza bakın.
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM sudo update-ca-certificates
Önceki komutlar:
- Geçerli kullanıcının geliştirici sertifikasının oluşturulduğundan emin olun.
- Geçerli kullanıcının ortamı kullanılarak,
ca-certificatesklasörü için gerekli olan yükseltilmiş izinlere sahip sertifika dışa aktarılır. - bayrağı kaldırılarak
-Ekök kullanıcı sertifikası dışarı aktarılır ve gerekirse oluşturulur. Yeni oluşturulan her sertifikanın farklı bir parmak izi vardır. Kök olarak çalışırken,sudove-Egerekli değildir.
Yukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Edge veya Chrome kullanarak Linux'ta HTTPS sertifikasına güvenme
- Ubuntu
- Red Hat Enterprise Linux
- SUSE Linux Kurumsal Sunucusu
Linux'ta chromium tarayıcıları için:
Dağıtımınız için
libnss3-toolspaketini yükleyin.Makinede
$HOME/.pki/nssdbklasörünün var olup olmadığını doğrulayın veya oluşturun.Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Aşağıdaki komutları çalıştırın:
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crtTarayıcıdan çıkın ve yeniden başlatın.
Linux üzerinde Firefox ile sertifikaya güvenme
Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Aşağıdaki komutla adresinde
/usr/lib/firefox/distribution/policies.jsonbir JSON dosyası oluşturun:
cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
"policies": {
"Certificates": {
"Install": [
"/usr/local/share/ca-certificates/aspnet/https.crt"
]
}
}
}
EOF
Not: Ubuntu 21.10 Firefox bir tutturma paketi olarak gelir ve yükleme klasörü şeklindedir /snap/firefox/current/usr/lib/firefox.
Tarayıcıyı kullanarak ilke dosyasını yapılandırmanın alternatif bir yolu için bu makaledeki Firefox tarayıcısını kullanarak HTTPS sertifikasının güvenini yapılandırma bölümüne bakın.
Fedora 34 ile sertifikaya güvenme
See:
- Bu GitHub açıklaması
- Fedora: Paylaşılan Sistem Sertifikalarını Kullanma
- Fedora'da bir .NET geliştirme ortamı ayarlayın.
Güvenliği diğer dağıtımlarda da sağlamak için sertifikaya güvenin
Bu GitHub sorununa bakın.
Linux için Windows Alt Sistemi'den HTTPS sertifikasına güven
Aşağıdaki yönergeler Ubuntu 20.04 gibi bazı Linux dağıtımlarında çalışmaz. Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #23686.
Linux için Windows Alt Sistemi (WSL), varsayılan olarak Windows'ta güvenilir olmayan bir HTTPS otomatik olarak imzalanan geliştirme sertifikası oluşturur. Windows'un WSL sertifikasına güvenmesinin en kolay yolu, WSL'yi Windows ile aynı sertifikayı kullanacak şekilde yapılandırmaktır:
Windows'ta geliştirici sertifikasını bir dosyaya aktarın:
dotnet dev-certs https -ep https.pfx -p $CREDENTIAL_PLACEHOLDER$ --trust$CREDENTIAL_PLACEHOLDER$bir paroladır.WSL penceresinde, WSL örneğinde dışarı aktarılan sertifikayı içeri aktarın:
dotnet dev-certs https --clean --import <<path-to-pfx>> --password $CREDENTIAL_PLACEHOLDER$
Yukarıdaki yaklaşım, sertifika başına ve WSL dağıtımı başına tek seferlik bir işlemdir. Sertifikayı tekrar tekrar dışarı aktarmaktan daha kolaydır. Windows'ta sertifikayı güncelleştirir veya yeniden oluşturursanız, önceki komutları yeniden çalıştırmanız gerekebilir.
Sertifika güvenilir değil gibi sertifika sorunlarını giderme
Bu bölüm, ASP.NET Core HTTPS geliştirme sertifikası yüklendiğinde ve güvenildiğinde yardım sağlar, ancak yine de sertifikaya güvenilmediğine ilişkin tarayıcı uyarılarınız vardır. ASP.NET Core HTTPS geliştirme sertifikası, Kestrel tarafından kullanılır.
IIS Express sertifikasını onarmak için bu Stackoverflow sorununa bakın.
Tüm platformlar - sertifika güvenilir değil
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın. Sertifika güveni tarayıcılar tarafından önbelleğe alınır.
dotnet dev-certs https --clean Başarısız Oluyor
Yukarıdaki komutlar tarayıcı güveni sorunlarının çoğunu çözer. Tarayıcı sertifikaya hala güvenmiyorsa, aşağıdaki platforma özgü önerileri izleyin.
Docker - sertifika güvenilir değil
- C:\Users{USER}\AppData\Roaming\ASP.NET\Https klasörünü silin.
- Çözümü temizleyin. bin ve obj klasörlerini silin.
- Geliştirme aracını yeniden başlatın. Örneğin, Visual Studio veya Visual Studio Code.
Windows - sertifika güvenilir değil
- Sertifika deposundaki sertifikaları denetleyin. Hem
localhostaltında hem deASP.NET Core HTTPS development certificatealtında,Current User > Personal > Certificateskolay anlaşılır isme sahip birlocalhostsertifika olmalıdır. - Bulunan tüm sertifikaları hem Kişisel hem de Güvenilen kök sertifika yetkililerinden kaldırın. IIS Express localhost sertifikasını kaldırmayın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın.
OS X - sertifika güvenilir değil
- Anahtar Zinciri Erişimi'ni açın.
- Sistem anahtar zincirini seçin.
- Localhost sertifikası olup olmadığını denetleyin.
- Tüm kullanıcılar için güvenilir olduğunu belirtmek için simgede bir
+simge olup olmadığını denetleyin. - Sertifikayı sistem anahtarlığından kaldırın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın.
Visual Studio ile ilgili sertifika sorunlarını gidermek için bkz. IIS Express kullanırken HTTPS Hatası (dotnet/AspNetCore #16892).
Linux sertifikası güvenilir değil
Güven için yapılandırılan sertifikanın sunucu tarafından Kestrel kullanılacak olan kullanıcı HTTPS geliştirici sertifikası olup olmadığını denetleyin.
Geçerli kullanıcı varsayılan HTTPS geliştirici Kestrel sertifikasını aşağıdaki konumda denetleyin.
ls -la ~/.dotnet/corefx/cryptography/x509stores/my
HTTPS geliştirici Kestrel sertifikası dosyası SHA1 parmak izidir. Dosya dotnet dev-certs https --clean aracılığıyla silindiğinde, farklı bir parmak iziyle gerektiğinde yeniden oluşturulur.
Dışarı aktarılan sertifika eşleşmelerinin parmak izini aşağıdaki komutla denetleyin:
openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt
Sertifika eşleşmiyorsa, aşağıdakilerden biri olabilir:
- Eski bir sertifika.
- Kök kullanıcı için bir geliştirici sertifikası dışa aktarılmış. Bu durumda sertifikayı dışarı aktarın.
Kök kullanıcı sertifikası şu konumda denetlenebilir:
ls -la /root/.dotnet/corefx/cryptography/x509stores/my
Visual Studio ile kullanılan IIS Express SSL sertifikası
IIS Express sertifikasıyla ilgili sorunları düzeltmek için Visual Studio yükleyicisinden Onar'ı seçin. Daha fazla bilgi için bu GitHub konusuna bakın.
Grup ilkesi otomatik olarak imzalanan sertifikaların güvenilir olmasını engeller
Bazı durumlarda, grup ilkesi otomatik olarak imzalanan sertifikaların güvenilir olmasını engelleyebilir. Daha fazla bilgi için bu GitHub konusuna bakın.
Ek bilgiler
Note
.NET 9 veya üzeri SDK kullanıyorsanız , bu makalenin .NET 9 sürümünde güncelleştirilmiş Linux yordamlarına bakın.
Warning
API projeleri
Hassas bilgiler alan Web API'lerinde kullanmayınRequireHttpsAttribute.
RequireHttpsAttribute tarayıcıları HTTP'den HTTPS'ye yönlendirmek için HTTP durum kodlarını kullanır. API istemcileri HTTP'den HTTPS'ye yönlendirmeleri anlamayabilir veya buna uymayabilir. Bu tür istemciler HTTP üzerinden bilgi gönderebilir. Web API'leri aşağıdakilerden birini yapmalıdır:
- HTTP'de dinlemeyin.
- 400 (Hatalı İstek) durum koduyla bağlantıyı kapatın ve isteği sunmayın.
API'de HTTP yeniden yönlendirmesini devre dışı bırakmak için ortam değişkenini ASPNETCORE_URLS ayarlayın veya komut satırı bayrağını --urls kullanın. Daha fazla bilgi için bkz . ASP.NET Core çalışma zamanı ortamları ve Andrew Lock tarafından ASP.NET Core uygulamasının URL'lerini ayarlamanın 8 yolu .
HSTS ve API projeleri
HSTS genellikle yalnızca bir tarayıcı yönergesi olduğundan varsayılan API projeleri HSTS içermez. Telefon veya masaüstü uygulamaları gibi diğer arayanlar yönergeye uymaz. Tarayıcılar içinde bile, HTTP üzerinden API'ye yapılan tek bir kimliği doğrulanmış çağrının güvenli olmayan ağlarda riskleri vardır. Güvenli yaklaşım, API projelerini yalnızca HTTPS'yi dinleyecek ve yanıt verecek şekilde yapılandırmaktır.
HTTPS'ye yönlendirmek için HTTP yeniden yönlendirmesi, CORS ön uç isteğinde ERR_INVALID_REDIRECT hatasına neden oluyor
HTTPS'ye yönlendirilen HTTP kullanan bir uç noktaya yapılan istekler, CORS denetim öncesi isteğinde UseHttpsRedirection ile ERR_INVALID_REDIRECT hatası verir.
API projeleri, istekleri HTTPS'ye yeniden yönlendirmek için kullanmak UseHttpsRedirection yerine HTTP isteklerini reddedebilir.
HTTPS'i zorunlu kıl.
Üretim ASP.NET Core web uygulamalarının aşağıdakini kullanmasını öneririz:
- HTTP isteklerini HTTPS'ye yönlendirmek için HTTPS yeniden yönlendirme ara yazılımı (UseHttpsRedirection).
- İstemcilere HTTP Strict Transport Security (HSTS) protokolü üst bilgileri göndermek için HSTS ara yazılımı (UseHsts).
Note
Ters ara sunucu yapılandırmasında dağıtılan uygulamalar, proxy'nin bağlantı güvenliğini (HTTPS) işlemesine olanak tanır. Proxy, HTTPS yeniden yönlendirmeyi de işleyecekse, HTTPS yeniden yönlendirme ara yazılımını kullanmanız gerekmez. Proxy sunucusu HSTS üst bilgilerini yazmayı da üstleniyorsa (örneğin, IIS 10.0 (1709) veya sonraki sürümlerdeki yerel HSTS desteği), HSTS ara yazılımı uygulama için gerekli değildir. Daha fazla bilgi için bkz . Proje oluşturma işleminde HTTPS/HSTS'yi geri çevirme.
UseHttpsRedirection
Aşağıdaki kod, UseHttpsRedirection dosyasında Program.cs çağrılarını yapar:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Yukarıdaki vurgulanan kod:
- Varsayılan HttpsRedirectionOptions.RedirectStatusCode (Status307TemporaryRedirect) kullanır.
- veya HttpsRedirectionOptions.HttpsPortortam değişkeni tarafından geçersiz kılınmadığı sürece varsayılan
ASPNETCORE_HTTPS_PORT(null) değerini IServerAddressesFeature kullanır.
Kalıcı yeniden yönlendirmeler yerine geçici yeniden yönlendirmeler kullanmanızı öneririz. Bağlantı önbelleğe alma, geliştirme ortamlarında kararsız davranışlara neden olabilir. Uygulama Development ortamında değilken kalıcı yönlendirme durum kodu göndermeyi tercih ediyorsanız, Prodüksiyon ortamında kalıcı yönlendirmeleri yapılandırma bölümüne bakın. İstemcilere uygulamaya yalnızca güvenli kaynak isteklerinin gönderilmesi gerektiğini (yalnızca üretimde) belirten sinyal vermek için HSTS kullanmanızı öneririz.
Bağlantı noktası yapılandırması
Güvenli olmayan bir isteği HTTPS'ye yönlendirmek için ara yazılım için bir bağlantı noktası kullanılabilir olmalıdır. Kullanılabilir bağlantı noktası yoksa:
- HTTPS'ye yeniden yönlendirme gerçekleşmez.
- Ara yazılım "Yeniden yönlendirme için https bağlantı noktası belirlenemedi" uyarısını günlüğe kaydeder.
Aşağıdaki yaklaşımlardan herhangi birini kullanarak HTTPS bağlantı noktasını belirtin:
HttpsRedirectionOptions.HttpsPort'u ayarlayın.
https_portKonak ayarını ayarlayın:Sunucu yapılandırmasında.
Ortam değişkenini
ASPNETCORE_HTTPS_PORTayarlayarak.appsettings.jsoniçinde bir üst düzey girdi ekleyerek:{ "https_port": 443, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
ASPNETCORE_URLS ortam değişkenini kullanarak güvenli düzen ile bir bağlantı noktası belirtin. Ortam değişkeni sunucuyu yapılandırıyor. Ara yazılım, IServerAddressesFeature aracılığıyla HTTPS bağlantı noktasını dolaylı olarak bulur. Bu yaklaşım ters ara sunucu dağıtımlarında çalışmaz.
ASP.NET Core web şablonları, hem
Properties/launchsettings.jsonhem de IIS Express için bir HTTPS URL'si ayarlar.launchsettings.jsonyalnızca yerel makinede kullanılır.Sunucunun veya HTTP.sys sunucusunun genel erişime açık uç dağıtımı için bir HTTPS URL uç noktası yapılandırın. Uygulama tarafından yalnızca bir HTTPS bağlantı noktası kullanılır. Orta katman yazılımı IServerAddressesFeature aracılığıyla bağlantı noktasını bulur.
Note
Bir uygulama ters proxy yapılandırmasında çalıştırıldığında, IServerAddressesFeature kullanılamaz. Bu bölümde açıklanan diğer yaklaşımlardan birini kullanarak bağlantı noktasını ayarlayın.
Edge dağıtımları
Kestrel HTTP.sys genel kullanıma açık bir uç sunucu olarak kullanıldığında, Kestrel veya HTTP.sys her ikisinin de dinlenmesi için yapılandırılmalıdır.
- İstemcinin yeniden yönlendirildiği güvenli bağlantı noktası (genellikle, üretimde 443 ve geliştirme aşamasında 5001).
- Güvenli olmayan port (genellikle üretimde 80, geliştirme ortamında 5000 olarak kullanılır).
Uygulamanın güvenli olmayan bir istek alması ve istemciyi güvenli bağlantı noktasına yönlendirmesi için güvenli olmayan bağlantı noktasına istemci tarafından erişilebilir olmalıdır.
Daha fazla bilgi için bkzKestrel. ASP.NET Core'da uç nokta yapılandırması veya HTTP.sys web sunucusu uygulaması.
Dağıtım senaryoları
İstemci ve sunucu arasındaki tüm güvenlik duvarlarının da trafik için açık iletişim bağlantı noktaları olmalıdır.
İstekler ters ara sunucu yapılandırmasında iletiliyorsa, HTTPS yeniden yönlendirme ara yazılımını çağırmadan önce iletilen üst bilgi ara yazılımını kullanın. İletilen üstbilgiler ara yazılımı, X-Forwarded-Proto üstbilgisini kullanarak Request.Scheme öğesini günceller. Ara yazılım, yeniden yönlendirme URI'lerinin ve diğer güvenlik ilkelerinin düzgün çalışmasına izin verir. İletilen başlıklar ara katman yazılımı kullanılmadığında, arka uç uygulaması doğru şemayı alamayabilir ve yeniden yönlendirme döngüsüne girebilir. Sık karşılaşılan son kullanıcı hata iletisi, çok fazla yeniden yönlendirme oluştuğudur.
Azure App Service'e dağıtım yaparken, Mevcut bir özel SSL sertifikasını Azure Web Apps'e bağlama öğreticisindeki yönergeleri izleyin.
Options
Ara yazılım seçeneklerini yapılandırmak için aşağıdaki vurgulanmış kod çağrıları AddHttpsRedirection :
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
AddHttpsRedirection çağrısı yalnızca HttpsPort veya RedirectStatusCode değerlerini değiştirmek için gereklidir.
Yukarıdaki vurgulanan kod:
-
HttpsRedirectionOptions.RedirectStatusCode varsayılan değer olan Status307TemporaryRedirect olarak ayarlanır.
StatusCodes sınıfının alanlarını
RedirectStatusCodeiçin atamalar için kullanın. - HTTPS bağlantı noktasını 5001 olarak ayarlar.
Üretimde kalıcı yeniden yönlendirmeleri yapılandırma
Ara yazılım varsayılan olarak tüm yeniden yönlendirmelerle bir Status307TemporaryRedirect gönderir. Uygulama belirtilen ortamda değilken kalıcı bir yönlendirme durum kodu göndermeyi tercih ediyorsanız, ara yazılım seçenekleri yapılandırmasını bu ortamda olmadığını kontrol eden bir koşullu ifadeye sarın.
içindeki Program.cshizmetleri yapılandırırken:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
if (!builder.Environment.IsDevelopment())
{
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status308PermanentRedirect;
options.HttpsPort = 443;
});
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
HTTPS yeniden yönlendirme ara yazılımı alternatif yaklaşımı
HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanın bir alternatifi, URL yeniden yazma ara yazılımını (AddRedirectToHttps kullanmaktır).
AddRedirectToHttps , yeniden yönlendirme yürütülürken durum kodunu ve bağlantı noktasını da ayarlayabilir. Daha fazla bilgi için bkz. URL yeniden yazma ara yazılımı.
Ek yeniden yönlendirme kuralları gerekmeden HTTPS'ye yeniden yönlendirme yaparken, bu makalede açıklanan HTTPS yeniden yönlendirme ara yazılımını (UseHttpsRedirection) kullanmanızı öneririz.
HTTP Katı Aktarım Güvenliği (HSTS) protokolü
OWASP'e göre, HTTP Strict Transport Security (HSTS), bir web uygulaması tarafından yanıt üst bilgisi kullanılarak belirtilen ve isteğe bağlı bir güvenlik geliştirmesidir. HSTS destekleyen bir tarayıcı bu üst bilgiyi aldığında:
- Tarayıcı, HTTP üzerinden herhangi bir iletişim gönderilmesini engelleyen etki alanının yapılandırmasını depolar. Tarayıcı, tüm iletişimi HTTPS üzerinden yönlendirir.
- Tarayıcı, kullanıcının güvenilmeyen veya geçersiz sertifikalar kullanmasını engeller. Tarayıcı, kullanıcının bu tür bir sertifikaya geçici olarak güvenmesine izin veren istemleri devre dışı bırakır.
HSTS istemci tarafından zorlandığından bazı sınırlamaları vardır:
- İstemcinin HSTS'yi desteklemesi gerekir.
- HSTS, HSTS ilkesini oluşturmak için en az bir başarılı HTTPS isteği gerektirir.
- Uygulamanın her HTTP isteğini denetlemesi ve HTTP isteğini yeniden yönlendirmesi veya reddetmesi gerekir.
ASP.NET Core, uzantı yöntemiyle UseHsts HSTS uygular. Uygulama geliştirme modunda değilken, aşağıdaki kod UseHsts çağrılır.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
UseHsts geliştirme aşamasında önerilmez çünkü HSTS ayarları tarayıcılar tarafından yüksek oranda önbelleğe alınabilir. Varsayılan olarak, UseHsts yerel geri döngü adresini dışlar.
HTTPS'yi ilk kez uygulayan üretim ortamları için yöntemlerden birini kullanarak başlangıç HstsOptions.MaxAge değerini küçük bir değere TimeSpan ayarlayın. HTTPS altyapısını HTTP'ye geri döndürmeniz gerekme ihtimaline karşı saat değerini tek bir günden fazla olmayacak şekilde ayarlayın. HTTPS yapılandırmasının sürdürülebilirliğine güvendikten sonra HSTS max-age değerini artırın; yaygın olarak kullanılan bir değer bir yıldır.
Aşağıdaki vurgulanmış kod:
using static Microsoft.AspNetCore.Http.StatusCodes;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
builder.Services.AddHttpsRedirection(options =>
{
options.RedirectStatusCode = Status307TemporaryRedirect;
options.HttpsPort = 5001;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
-
Strict-Transport-Securitybaşlığının ön yükleme parametresini ayarlar. Önceden yükleme, RFC HSTS belirtiminin bir parçası değildir, ancak yeni yüklemede HSTS sitelerini önceden yüklemek için web tarayıcıları tarafından desteklenir. Daha fazla bilgi için bkz. https://hstspreload.org/. - HSTS ilkesini Konak alt etki alanlarına uygulayan includeSubDomain'i etkinleştirir.
- Üst bilgi
max-age'inStrict-Transport-Securityparametresini açıkça 60 güne ayarlar. Ayarlanmadıysa, varsayılan olarak 30 gün olur. Daha fazla bilgi için "max-age" yönergesine bakın. - Hariç tutulacak konaklar listesine
example.comekler.
UseHsts aşağıdaki geri döngü konaklarını dışlar:
-
localhost: IPv4 geri döngü adresi. -
127.0.0.1: IPv4 geri döngü adresi. -
[::1]: IPv6 geri döngü adresi.
Proje oluşturma işleminde HTTPS/HSTS'i geri çevirme
Bağlantı güvenliğinin ağın genel kullanıma yönelik kenarında işlendiği bazı arka uç hizmet senaryolarında, her düğümde bağlantı güvenliğini yapılandırmak gerekmez. Visual Studio'daki şablonlardan veya dotnet new komutundan oluşturulan web uygulamaları HTTPS yeniden yönlendirmesini ve HSTS'yi etkinleştirir. Bu senaryoları gerektirmeyen dağıtımlar için, uygulama şablondan oluşturulduğunda HTTPS/HSTS'yi geri çevirebilirsiniz.
HTTPS/HSTS'yi geri çevirmek için:
HTTPS için yapılandır onay kutusunun işaretini kaldırın.
Windows ve macOS'ta ASP.NET Core HTTPS geliştirme sertifikasına güvenme
Firefox tarayıcısı için sonraki bölüme bakın.
.NET SDK'sı bir HTTPS geliştirme sertifikası içerir. Sertifika, ilk çalıştırma deneyiminin bir parçası olarak yüklenir. Örneğin, dotnet --info aşağıdaki çıkışın bir varyasyonunu üretir:
ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
.NET SDK'sını yüklemek ASP.NET Core HTTPS geliştirme sertifikasını yerel kullanıcı sertifika deposuna yükler. Sertifika yüklendi, ancak güvenilir değil. Sertifikaya güvenmek için aracı çalıştırmak için tek seferlik adımı gerçekleştirin dotnet dev-certs :
dotnet dev-certs https --trust
Aşağıdaki komut, dotnet dev-certs aracı hakkında yardım bilgisi verir.
dotnet dev-certs https --help
Warning
Kapsayıcı görüntüsü veya sanal makine gibi yeniden dağıtılacak bir ortamda geliştirme sertifikası oluşturmayın. Bunu yapmak sahtekarlığa ve ayrıcalıkların yükseltilmesine yol açabilir. Bunu önlemeye yardımcı olmak için ortam değişkenini DOTNET_GENERATE_ASPNET_CERTIFICATE .NET CLI'yı ilk kez çağırmadan önce olarak false ayarlayın. Bu, CLI'nin ilk çalıştırma deneyimi sırasında ASP.NET Core geliştirme sertifikasının otomatik oluşturulmasını geçer.
SEC_ERROR_INADEQUATE_KEY_USAGE hatasını önlemek için Firefox ile HTTPS sertifikasına güvenme
Firefox tarayıcısı kendi sertifika deposunu kullanır, bu nedenle IIS Express veya geliştirici sertifikalarına güvenmez.
Firefox ile HTTPS sertifikasına güvenmeye, bir ilke dosyası oluşturmaya veya FireFox tarayıcısıyla yapılandırmaya yönelik iki yaklaşım vardır. Tarayıcıyla yapılandırıldığında ilke dosyası oluşturulur, bu nedenle iki yaklaşım eşdeğerdir.
Firefox ile HTTPS sertifikasına güvenmek için bir ilke dosyası oluşturma
Bir ilke dosyası (policies.json) şurada oluşturun:
- Windows:
%PROGRAMFILES%\Mozilla Firefox\distribution\ - Macos:
Firefox.app/Contents/Resources/distribution - Linux: Bu makalenin Linux üzerinde Firefox ile sertifikaya güvenme bölümüne bakın.
Firefox ilke dosyasına aşağıdaki JSON dosyasını ekleyin:
{
"policies": {
"Certificates": {
"ImportEnterpriseRoots": true
}
}
}
Yukarıdaki ilke dosyası, Windows sertifika deposundaki güvenilen sertifikalardan Firefox güven sertifikalarını yapar. Sonraki bölümde Firefox tarayıcısını kullanarak önceki ilke dosyasını oluşturmak için alternatif bir yaklaşım sağlanır.
Firefox tarayıcı kullanarak HTTPS sertifikasının güvenini yapılandırma
Aşağıdaki yönergeleri kullanarak ayarlayın security.enterprise_roots.enabled = true :
- FireFox tarayıcısında girin
about:config. - Riski Kabul Et'i ve riski kabul ediyorsanız Devam Et'i seçin.
- Tümünü Göster'i seçin
- Ayarla
security.enterprise_roots.enabled=true - Firefox'ta çıkış ve yeniden başlatma
Daha fazla bilgi için bkz . Firefox'ta Sertifika Yetkililerini (CA) Ayarlama ve mozilla/policy-templates/README dosyası.
Docker için geliştirici sertifikası ayarlama
Bu GitHub sorununa bakın.
Linux'ta HTTPS sertifikasına güvenme
Güven oluşturmak dağıtıma ve tarayıcıya özgüdür. Aşağıdaki bölümlerde bazı popüler dağıtımlar ve Chromium tarayıcıları (Edge ve Chrome) ve Firefox için yönergeler sağlanmaktadır.
Linux-dev-certs ile Linux'ta HTTPS sertifikasına güvenme
linux-dev-certs , Linux üzerinde geliştirici sertifikası oluşturmak ve güvenmek için kullanışlı bir yol sağlayan açık kaynak, topluluk tarafından desteklenen bir .NET genel aracıdır. Araç Microsoft tarafından korunmaz veya desteklenmez.
Aşağıdaki komutlar aracı yükler ve güvenilir bir geliştirici sertifikası oluşturur:
dotnet tool update -g linux-dev-certs
dotnet linux-dev-certs install
Daha fazla bilgi edinmek veya sorunları bildirmek için bkz . linux-dev-certs GitHub deposu.
Hizmet-hizmet iletişimi için Ubuntu sertifikaya güveniyor
Aşağıdaki yönergeler 20.04 gibi bazı Ubuntu sürümlerinde çalışmaz. Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #23686.
OpenSSL 1.1.1h veya üzerini yükleyin. OpenSSL'yi güncelleştirme yönergeleri için dağıtımınıza bakın.
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM sudo update-ca-certificates
Önceki komutlar:
- Geçerli kullanıcının geliştirici sertifikasının oluşturulduğundan emin olun.
- Geçerli kullanıcının ortamı kullanılarak,
ca-certificatesklasörü için gerekli olan yükseltilmiş izinlere sahip sertifika dışa aktarılır. - bayrağı kaldırılarak
-Ekök kullanıcı sertifikası dışarı aktarılır ve gerekirse oluşturulur. Yeni oluşturulan her sertifikanın farklı bir parmak izi vardır. Kök olarak çalışırken,sudove-Egerekli değildir.
Yukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Edge veya Chrome kullanarak Linux'ta HTTPS sertifikasına güvenme
- Ubuntu
- Red Hat Enterprise Linux
- SUSE Linux Kurumsal Sunucusu
Linux'ta chromium tarayıcıları için:
Dağıtımınız için
libnss3-toolspaketini yükleyin.Makinede
$HOME/.pki/nssdbklasörünün var olup olmadığını doğrulayın veya oluşturun.Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Aşağıdaki komutları çalıştırın:
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/aspnet/https.crtTarayıcıdan çıkın ve yeniden başlatın.
Linux üzerinde Firefox ile sertifikaya güvenme
Sertifikayı aşağıdaki komutla dışarı aktarın:
dotnet dev-certs https sudo -E dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEMYukarıdaki komuttaki yol Ubuntu'ya özgüdür. Diğer dağıtımlar için uygun bir yol seçin veya Sertifika Yetkilileri (CA) için yolu kullanın.
Aşağıdaki komutla adresinde
/usr/lib/firefox/distribution/policies.jsonbir JSON dosyası oluşturun:
cat <<EOF | sudo tee /usr/lib/firefox/distribution/policies.json
{
"policies": {
"Certificates": {
"Install": [
"/usr/local/share/ca-certificates/aspnet/https.crt"
]
}
}
}
EOF
Not: Ubuntu 21.10 Firefox bir tutturma paketi olarak gelir ve yükleme klasörü şeklindedir /snap/firefox/current/usr/lib/firefox.
Tarayıcıyı kullanarak ilke dosyasını yapılandırmanın alternatif bir yolu için bu makaledeki Firefox tarayıcısını kullanarak HTTPS sertifikasının güvenini yapılandırma bölümüne bakın.
Fedora 34 ile sertifikaya güvenme
See:
- Bu GitHub açıklaması
- Fedora: Paylaşılan Sistem Sertifikalarını Kullanma
- Fedora'da bir .NET geliştirme ortamı ayarlayın.
Güvenliği diğer dağıtımlarda da sağlamak için sertifikaya güvenin
Bu GitHub sorununa bakın.
Linux için Windows Alt Sistemi'den HTTPS sertifikasına güven
Aşağıdaki yönergeler Ubuntu 20.04 gibi bazı Linux dağıtımlarında çalışmaz. Daha fazla bilgi için bkz. GitHub sorunu dotnet/AspNetCore.Docs #23686.
Linux için Windows Alt Sistemi (WSL), varsayılan olarak Windows'ta güvenilir olmayan bir HTTPS otomatik olarak imzalanan geliştirme sertifikası oluşturur. Windows'un WSL sertifikasına güvenmesinin en kolay yolu, WSL'yi Windows ile aynı sertifikayı kullanacak şekilde yapılandırmaktır:
Windows'ta geliştirici sertifikasını bir dosyaya aktarın:
dotnet dev-certs https -ep https.pfx -p $CREDENTIAL_PLACEHOLDER$ --trust$CREDENTIAL_PLACEHOLDER$bir paroladır.WSL penceresinde, WSL örneğinde dışarı aktarılan sertifikayı içeri aktarın:
dotnet dev-certs https --clean --import <<path-to-pfx>> --password $CREDENTIAL_PLACEHOLDER$
Yukarıdaki yaklaşım, sertifika başına ve WSL dağıtımı başına tek seferlik bir işlemdir. Sertifikayı tekrar tekrar dışarı aktarmaktan daha kolaydır. Windows'ta sertifikayı güncelleştirir veya yeniden oluşturursanız, önceki komutları yeniden çalıştırmanız gerekebilir.
Sertifika güvenilir değil gibi sertifika sorunlarını giderme
Bu bölüm, ASP.NET Core HTTPS geliştirme sertifikası yüklendiğinde ve güvenildiğinde yardım sağlar, ancak yine de sertifikaya güvenilmediğine ilişkin tarayıcı uyarılarınız vardır. ASP.NET Core HTTPS geliştirme sertifikası, Kestrel tarafından kullanılır.
IIS Express sertifikasını onarmak için bu Stackoverflow sorununa bakın.
Tüm platformlar - sertifika güvenilir değil
Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın. Sertifika güveni tarayıcılar tarafından önbelleğe alınır.
dotnet dev-certs https --clean Başarısız Oluyor
Yukarıdaki komutlar tarayıcı güveni sorunlarının çoğunu çözer. Tarayıcı sertifikaya hala güvenmiyorsa, aşağıdaki platforma özgü önerileri izleyin.
Docker - sertifika güvenilir değil
- C:\Users{USER}\AppData\Roaming\ASP.NET\Https klasörünü silin.
- Çözümü temizleyin. bin ve obj klasörlerini silin.
- Geliştirme aracını yeniden başlatın. Örneğin, Visual Studio veya Visual Studio Code.
Windows - sertifika güvenilir değil
- Sertifika deposundaki sertifikaları denetleyin. Hem
localhostaltında hem deASP.NET Core HTTPS development certificatealtında,Current User > Personal > Certificateskolay anlaşılır isme sahip birlocalhostsertifika olmalıdır. - Bulunan tüm sertifikaları hem Kişisel hem de Güvenilen kök sertifika yetkililerinden kaldırın. IIS Express localhost sertifikasını kaldırmayın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın.
OS X - sertifika güvenilir değil
- Anahtar Zinciri Erişimi'ni açın.
- Sistem anahtar zincirini seçin.
- Localhost sertifikası olup olmadığını denetleyin.
- Tüm kullanıcılar için güvenilir olduğunu belirtmek için simgede bir
+simge olup olmadığını denetleyin. - Sertifikayı sistem anahtarlığından kaldırın.
- Aşağıdaki komutları çalıştırın:
dotnet dev-certs https --clean
dotnet dev-certs https --trust
Açık olan tüm tarayıcı örneklerini kapatın. Uygulamaya yeni bir tarayıcı penceresi açın.
Visual Studio ile ilgili sertifika sorunlarını gidermek için bkz. IIS Express kullanırken HTTPS Hatası (dotnet/AspNetCore #16892).
Linux sertifikası güvenilir değil
Güven için yapılandırılan sertifikanın sunucu tarafından Kestrel kullanılacak olan kullanıcı HTTPS geliştirici sertifikası olup olmadığını denetleyin.
Geçerli kullanıcı varsayılan HTTPS geliştirici Kestrel sertifikasını aşağıdaki konumda denetleyin.
ls -la ~/.dotnet/corefx/cryptography/x509stores/my
HTTPS geliştirici Kestrel sertifikası dosyası SHA1 parmak izidir. Dosya dotnet dev-certs https --clean aracılığıyla silindiğinde, farklı bir parmak iziyle gerektiğinde yeniden oluşturulur.
Dışarı aktarılan sertifika eşleşmelerinin parmak izini aşağıdaki komutla denetleyin:
openssl x509 -noout -fingerprint -sha1 -inform pem -in /usr/local/share/ca-certificates/aspnet/https.crt
Sertifika eşleşmiyorsa, aşağıdakilerden biri olabilir:
- Eski bir sertifika.
- Kök kullanıcı için bir geliştirici sertifikası dışa aktarılmış. Bu durumda sertifikayı dışarı aktarın.
Kök kullanıcı sertifikası şu konumda denetlenebilir:
ls -la /root/.dotnet/corefx/cryptography/x509stores/my
Visual Studio ile kullanılan IIS Express SSL sertifikası
IIS Express sertifikasıyla ilgili sorunları düzeltmek için Visual Studio yükleyicisinden Onar'ı seçin. Daha fazla bilgi için bu GitHub konusuna bakın.
Grup ilkesi otomatik olarak imzalanan sertifikaların güvenilir olmasını engeller
Bazı durumlarda, grup ilkesi otomatik olarak imzalanan sertifikaların güvenilir olmasını engelleyebilir. Daha fazla bilgi için bu GitHub konusuna bakın.
Ek bilgiler
ASP.NET Core