Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
Hay diferentes maneras de crear y usar certificados autofirmados para escenarios de desarrollo y pruebas. En este artículo se describe el uso de certificados autofirmados con dotnet dev-certsy otras opciones como PowerShell y OpenSSL.
A continuación, puede validar que el certificado se carga mediante un ejemplo, como una aplicación ASP.NET Core hospedada en un contenedor.
Prerrequisitos
Para dotnet dev-certs, asegúrese de tener instalada la versión adecuada de .NET:
Este ejemplo requiere el cliente de Docker.
Preparación de la aplicación de ejemplo
Para esta guía, usa una aplicación de ejemplo y realiza cambios cuando corresponda.
Compruebe que el Dockerfile de la aplicación de ejemplo usa .NET 11.
En función del sistema operativo host, es posible que tenga que actualizar el entorno de ejecución de ASP.NET. Para Windows contenedores, use la variante Windows Server Core del ejemplo.
Por ejemplo, esto le ayudará a probar los certificados en 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"]
Si va a probar los certificados en Linux, puede usar el Dockerfile existente.
Asegúrese de que AspNetCoreRazorApp.csproj incluye la plataforma de destino adecuada:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net11.0</TargetFramework>
<!--Other Properties-->
</PropertyGroup>
</Project>
Nota:
Si desea usar dotnet publish parámetros para recortar la implementación, asegúrese de que se incluyen las dependencias adecuadas para admitir certificados SSL. Actualice el archivo de proyecto para asegurarse de que los ensamblados adecuados se incluyen en el contenedor. Como referencia, compruebe cómo actualizar el archivo .csproj para admitir certificados SSL al usar el recorte para las implementaciones independientes.
Asegúrese de que apunta a la aplicación de ejemplo.
cd .\dotnet-docker\samples\AspNetCoreRazorApp
En el caso de los contenedores de Linux, compile el contenedor para probarlo localmente:
docker build -t aspnetapp:my-sample .
Para los contenedores de Windows, utilice el Dockerfile de Windows Server Core:
docker build -t aspnetapp:my-sample -f Dockerfile.windowsservercore .
Creación de un certificado autofirmado
Puede crear un certificado autofirmado:
Con dotnet dev-certs
Puede usar dotnet dev-certs para trabajar con certificados autofirmados.
dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\AspNetCoreRazorApp.pfx -p $CREDENTIAL_PLACEHOLDER$
dotnet dev-certs https --trust
Nota:
El nombre del certificado, en este caso AspNetCoreRazorApp.pfx, debe coincidir con el nombre del ensamblado del proyecto.
$CREDENTIAL_PLACEHOLDER$ representa una contraseña de su elección. Si la consola devuelve "Ya existe un certificado HTTPS válido"., ya existe un certificado de confianza en el almacén. Puede exportarlo mediante la consola MMC.
En .NET 10 y versiones posteriores, si ejecuta dotnet dev-certs https --trust dentro de una instancia de Subsistema de Windows para Linux (WSL), el comando también confía en el certificado en el host de Windows.
En .NET 10 y versiones posteriores, el certificado generado incluye nombres alternativos de firmante (SAN) para host.docker.internal y host.containers.internal, lo que le permite usar el certificado directamente en escenarios de desarrollo local basados en contenedores sin configuración adicional.
Para comprobar que existe un certificado de desarrollo de confianza, ejecute dotnet dev-certs https --check --trust.
Configure los secretos de la aplicación para el certificado:
dotnet user-secrets -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj init
dotnet user-secrets -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj set "Kestrel:Certificates:Development:Password" "$CREDENTIAL_PLACEHOLDER$"
Nota:
La contraseña debe coincidir con la contraseña usada para el certificado.
Ejecute la imagen de contenedor con ASP.NET Core configurado para 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
Una vez iniciada la aplicación, vaya a https://localhost:8001 en el explorador web.
Limpieza
Si los secretos y certificados no están en uso, asegúrese de limpiarlos.
dotnet user-secrets remove "Kestrel:Certificates:Development:Password" -p AspNetCoreRazorApp\AspNetCoreRazorApp.csproj
dotnet dev-certs https --clean
Con PowerShell
Puede usar PowerShell para generar certificados autofirmados. El cliente PKI se puede usar para generar un certificado autofirmado.
$cert = New-SelfSignedCertificate -DnsName @("contoso.com", "www.contoso.com") -CertStoreLocation "cert:\LocalMachine\My"
El certificado se generará, pero para los fines de las pruebas, debe colocarse en un almacén de certificados para realizar pruebas en un explorador.
$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)
En este momento, los certificados deben ser visibles desde un complemento MMC.
Puede ejecutar el contenedor de ejemplo en el Subsistema de Windows para 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
Nota:
Al montar el volumen, la ruta de acceso del archivo podría gestionarse de forma diferente según el host. Por ejemplo, en WSL podría reemplazar /c/certs por /mnt/c/certs.
Si usa el contenedor compilado anteriormente para Windows, el comando run tendría el siguiente aspecto:
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
Una vez que la aplicación esté activa, vaya a contoso.com:8001 en un explorador.
Asegúrese de que las entradas del host se actualicen para que contoso.com responda en la dirección IP adecuada (por ejemplo, 127.0.0.1). Si no se reconoce el certificado, asegúrese de que el certificado que se carga con el contenedor también es de confianza en el host y de que hay entradas adecuadas de SAN/DNS para contoso.com.
Limpieza
$cert | Remove-Item
Get-ChildItem $certKeyPath | Remove-Item
$rootCert | Remove-item
Con OpenSSL
Puede usar OpenSSL para crear certificados autofirmados. En este ejemplo se usa WSL/Ubuntu y un shell de Bash con OpenSSL.
Este comando genera un archivo .crt y un .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
Para obtener un archivo .pfx, use el siguiente comando:
openssl pkcs12 -export -out $PARENT.pfx -inkey $PARENT.key -in $PARENT.crt
Nota:
A partir de .NET 5, Kestrel puede aceptar archivos .crt y archivos .key codificados en PEM, además de archivos .pfx con una contraseña.
Según el sistema operativo host, el certificado debe ser de confianza. En un host de Linux, "confiar" en el certificado es diferente y depende de la distribución.
Para los fines de esta guía, este es un ejemplo de Windows mediante PowerShell:
Import-Certificate -FilePath $certKeyPath -CertStoreLocation 'Cert:\LocalMachine\Root'
Ejecute el ejemplo con el siguiente comando en 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
Nota:
En WSL, la ruta de montaje del volumen puede cambiar en función de la configuración.
En PowerShell, ejecute el siguiente comando:
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
Una vez que la aplicación esté activa, vaya a contoso.com:8001 en un explorador.
Asegúrese de que las entradas del host se actualicen para que contoso.com responda en la dirección IP adecuada (por ejemplo, 127.0.0.1). Si no se reconoce el certificado, asegúrese de que el certificado que se carga con el contenedor también es de confianza en el host y de que hay entradas adecuadas de SAN/DNS para contoso.com.
Limpieza
Asegúrese de limpiar los certificados autofirmados una vez realizadas las pruebas.
Get-ChildItem $certKeyPath | Remove-Item