Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det finns olika sätt att skapa och använda självsignerade certifikat för utvecklings- och testscenarier. Den här artikeln beskriver hur du använder självsignerade certifikat med dotnet dev-certs, och andra alternativ som PowerShell och OpenSSL.
Du kan sedan verifiera att certifikatet läses in med ett exempel, till exempel en ASP.NET Core app som finns i en container.
Förutsättningar
För dotnet dev-certsmåste du ha rätt version av .NET installerad:
Det här exemplet kräver Docker-klienten.
Förbereda exempelapp
I den här guiden använder du en exempelapp och gör ändringar där det är lämpligt.
Kontrollera att exempelappen Dockerfile använder .NET 11.
Beroende på värdoperativsystemet kan du behöva uppdatera ASP.NET-körningen. För Windows containrar använder du Windows Server Core-varianten av exemplet.
Detta hjälper till exempel att testa certifikaten i Windows:
# https://github.com/dotnet/dotnet-docker/blob/main/samples/README.md
FROM mcr.microsoft.com/dotnet/sdk:11.0-windowsservercore-ltsc2025 AS build
WORKDIR /source
# Copy project file and restore as distinct layers
COPY *.slnx .
COPY AspNetCoreRazorApp/*.csproj ./AspNetCoreRazorApp/
RUN dotnet restore
# Copy source code and publish app
COPY AspNetCoreRazorApp/. ./AspNetCoreRazorApp/
WORKDIR /source/AspNetCoreRazorApp
RUN dotnet publish --no-restore -o /app
# Runtime stage
FROM mcr.microsoft.com/dotnet/aspnet:11.0-windowsservercore-ltsc2025
EXPOSE 8080
WORKDIR /app
COPY --from=build /app .
USER ContainerUser
ENTRYPOINT ["AspNetCoreRazorApp"]
Om du testar certifikaten i Linux kan du använda den befintliga Dockerfile.
Kontrollera att AspNetCoreRazorApp.csproj innehåller lämpligt målramverk:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net11.0</TargetFramework>
<!--Other Properties-->
</PropertyGroup>
</Project>
Anmärkning
Om du vill använda dotnet publish parametrar för att trimma distributionen kontrollerar du att lämpliga beroenden ingår för stöd för SSL-certifikat. Uppdatera projektfilen för att säkerställa att lämpliga sammansättningar ingår i containern. Som referens kontrollerar du hur du uppdaterar .csproj-filen för att stödja SSL-certifikat när du använder trimning för fristående distributioner.
Kontrollera att du pekar på exempelappen.
cd .\dotnet-docker\samples\AspNetCoreRazorApp
För Linux-containrar skapar du containern för att testa lokalt:
docker build -t aspnetapp:my-sample .
För Windows containrar använder du Windows Server Core Dockerfile:
docker build -t aspnetapp:my-sample -f Dockerfile.windowsservercore .
Skapa ett självsignerat certifikat
Du kan skapa ett självsignerat certifikat:
- Med dotnet utvecklingscertifikat
- Med PowerShell
- Med OpenSSL
Utifrån dotnet dev-certs
Du kan använda dotnet dev-certs för att arbeta med självsignerade certifikat.
dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\AspNetCoreRazorApp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
Anmärkning
Certifikatnamnet, i det här fallet AspNetCoreRazorApp.pfx, måste matcha projektets sammansättningsnamn.
$CREDENTIAL_PLACEHOLDER$ representerar ett eget lösenord. Om konsolen returnerar "Ett giltigt HTTPS-certifikat finns redan.", finns det redan ett betrott certifikat i ditt arkiv. Du kan exportera den med hjälp av MMC-konsolen.
I .NET 10 och senare versioner gäller att om du kör dotnet dev-certs https --trust i en instans av Podsystém Windowsu pre Linux (WSL), litar kommandot även på certifikatet på Windows-värddatorn.
I .NET 10 och senare innehåller det genererade certifikatet alternativa ämnesnamn (SAN) för host.docker.internal och host.containers.internal, vilket gör att du kan använda certifikatet direkt i containerbaserade lokala utvecklingsscenarier utan extra konfiguration.
Kontrollera att det finns ett betrott utvecklingscertifikat genom att köra dotnet dev-certs https --check --trust.
Konfigurera programhemligheter för certifikatet:
dotnet user-secrets -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj init
dotnet user-secrets -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj set "Kestrel:Certificates:Development:Password" "$CREDENTIAL_PLACEHOLDER$"
Anmärkning
Lösenordet måste matcha lösenordet som används för certifikatet.
Kör containeravbildningen med ASP.NET Core konfigurerad för HTTPS:
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_ENVIRONMENT=Development -v $env:APPDATA\microsoft\UserSecrets\:C:\Users\ContainerUser\AppData\Roaming\microsoft\UserSecrets -v $env:USERPROFILE\.aspnet\https:C:\Users\ContainerUser\AppData\Roaming\ASP.NET\Https mcr.microsoft.com/dotnet/samples:aspnetapp
När programmet startar navigerar du till https://localhost:8001 i webbläsaren.
Städa upp
Om hemligheterna och certifikaten inte används måste du rensa dem.
dotnet user-secrets remove "Kestrel:Certificates:Development:Password" -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj
dotnet dev-certs https --clean
Med PowerShell
Du kan använda PowerShell för att generera självsignerade certifikat. PKI-klienten kan användas för att generera ett självsignerat certifikat.
$cert = New-SelfSignedCertificate -DnsName @("contoso.com", "www.contoso.com") -CertStoreLocation "cert:\LocalMachine\My"
Certifikatet genereras, men i testsyfte bör det placeras i ett certifikatarkiv för testning i en webbläsare.
$certKeyPath = "c:\certs\contoso.com.pfx"
$password = ConvertTo-SecureString '$CREDENTIAL_PLACEHOLDER$' -AsPlainText -Force
$cert | Export-PfxCertificate -FilePath $certKeyPath -Password $password
$rootCert = $(Import-PfxCertificate -FilePath $certKeyPath -CertStoreLocation 'Cert:\LocalMachine\Root' -Password $password)
I det här läget bör certifikaten kunna ses från en MMC-snapin.
Du kan köra exempelcontainern i Windows Undersystem för Linux (WSL):
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_ENVIRONMENT=Development -e ASPNETCORE_Kestrel__Certificates__Default__Password="$CREDENTIAL_PLACEHOLDER$" -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/contoso.com.pfx -v /c/certs:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp
Anmärkning
Med volymmontering kan filsökvägen hanteras olika beroende på värddatorn. I WSL kan du till exempel ersätta /c/certs med /mnt/c/certs.
Om du använder containern som skapades tidigare för Windows skulle körningskommandot se ut så här:
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_ENVIRONMENT=Development -e ASPNETCORE_Kestrel__Certificates__Default__Password="$CREDENTIAL_PLACEHOLDER$" -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\contoso.com.pfx -v c:\certs:C:\https aspnetapp:my-sample
När programmet är igång navigerar du till contoso.com:8001 i en webbläsare.
Se till att värdposterna har uppdaterats för att contoso.com ska kunna svara på den lämpliga IP-adressen (till exempel 127.0.0.1). Om certifikatet inte erkänns kontrollerar du att certifikatet som är laddat med containern också är betrott på värddatorn och att det finns lämpliga SAN/DNS-poster för contoso.com.
Städa upp
$cert | Remove-Item
Get-ChildItem $certKeyPath | Remove-Item
$rootCert | Remove-item
Med OpenSSL
Du kan använda OpenSSL för att skapa självsignerade certifikat. I det här exemplet används WSL/Ubuntu och ett bash-gränssnitt med OpenSSL.
Det här kommandot genererar en .crt och en .key.
PARENT="contoso.com"
openssl req \
-x509 \
-newkey rsa:4096 \
-sha256 \
-days 365 \
-nodes \
-keyout $PARENT.key \
-out $PARENT.crt \
-subj "/CN=${PARENT}" \
-extensions v3_ca \
-extensions v3_req \
-config <( \
echo '[req]'; \
echo 'default_bits= 4096'; \
echo 'distinguished_name=req'; \
echo 'x509_extension = v3_ca'; \
echo 'req_extensions = v3_req'; \
echo '[v3_req]'; \
echo 'basicConstraints = CA:FALSE'; \
echo 'keyUsage = nonRepudiation, digitalSignature, keyEncipherment'; \
echo 'subjectAltName = @alt_names'; \
echo '[ alt_names ]'; \
echo "DNS.1 = www.${PARENT}"; \
echo "DNS.2 = ${PARENT}"; \
echo '[ v3_ca ]'; \
echo 'subjectKeyIdentifier=hash'; \
echo 'authorityKeyIdentifier=keyid:always,issuer'; \
echo 'basicConstraints = critical, CA:TRUE, pathlen:0'; \
echo 'keyUsage = critical, cRLSign, keyCertSign'; \
echo 'extendedKeyUsage = serverAuth, clientAuth')
openssl x509 -noout -text -in $PARENT.crt
Använd följande kommando för att hämta en .pfx:
openssl pkcs12 -export -out $PARENT.pfx -inkey $PARENT.key -in $PARENT.crt
Anmärkning
Från och med .NET 5 kan Kestrel ta .crt - och PEM-kodade .key filer utöver PFX-filer med ett lösenord.
Beroende på värdoperativsystemet måste certifikatet vara betrodd. På en Linux-värd skiljer sig godkännandet av certifikatet beroende på distribution.
I den här guiden finns här ett exempel i Windows som använder PowerShell:
Import-Certificate -FilePath $certKeyPath -CertStoreLocation 'Cert:\LocalMachine\Root'
Kör exemplet med följande kommando i WSL:
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_ENVIRONMENT=Development -e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/contoso.com.crt -e ASPNETCORE_Kestrel__Certificates__Default__KeyPath=/https/contoso.com.key -v /c/path/to/certs:/https/ mcr.microsoft.com/dotnet/samples:aspnetapp
Anmärkning
I WSL kan sökvägen för volymmontering ändras beroende på konfigurationen.
Kör följande kommando i PowerShell:
docker run --rm -it -p 8000:80 -p 8001:443 -e ASPNETCORE_URLS="https://+;http://+" -e ASPNETCORE_HTTPS_PORT=8001 -e ASPNETCORE_ENVIRONMENT=Development -e ASPNETCORE_Kestrel__Certificates__Default__Path=c:\https\contoso.com.crt -e ASPNETCORE_Kestrel__Certificates__Default__KeyPath=c:\https\contoso.com.key -v c:\certs:C:\https aspnetapp:my-sample
När programmet är igång navigerar du till contoso.com:8001 i en webbläsare.
Se till att värdposterna har uppdaterats för att contoso.com ska kunna svara på den lämpliga IP-adressen (till exempel 127.0.0.1). Om certifikatet inte erkänns kontrollerar du att certifikatet som är laddat med containern också är betrott på värddatorn och att det finns lämpliga SAN/DNS-poster för contoso.com.
Städa upp
Se till att rensa de självsignerade certifikaten när du är klar med testningen.
Get-ChildItem $certKeyPath | Remove-Item