Configurar HTTPS para una API en .NET
Cuantas veces nos paso que necesitamos correr algo bajo SSL para desarrollo local, y siempre es un dolor de... cabeza. Por suerte la tecnologia avanza, y ahora es "relativamente" facil hacerlo, al menos si es para Windows, .NET Core y estas usando Kestrel.
- Primero, abrir un Powershell como administrador y correr este comando. Reemplazar
my.domain.local
por el dominio que querramos usar.
New-SelfSignedCertificate -DnsName "my.domain.local" -CertStoreLocation "Cert:\LocalMachine\My"
Esto va a crear un certificado en tu compu, instalado en el store LocalMachine\My
- Abrir Manage Computer Certificates (no tengo ni idea como se llama en español, pero debe ser algo con Certificados 😁)
- Exportar ese certificado haciendo click derecho -> Export
- Exportar la clave privada
- Exportarlo como PFX
- Setear algun password
Guardar ese archivo en algun directorio (como C:\projects o algo asi), con un nombre que nos acordemos, como domain_local.pfx
.
Trusted Root Certificate
Ahora tenemos que decirle que nuestra compu "confia" en ese certificado, y para eso lo vamos a instalar como un Trusted Root Certificate.
- Hacer doble click en el archivo pfx
- En el Certificate Import Wizard
- Elegir Local Machine -> Next
- Buscar el archivo .pfx con Browse -> Next
- Ingresar el password, marcar que la key sea exportable -> Next
- Hacer click en Browse para elegir el destino, elegir Trusted Root Certification Authorities, OK -> Next
- Listo!
Kestrel configuration
Finalmente, cambiamos nuestra configuracion de Kestrel (el web server de ASP.NET Core), para decirle que vamos a usar un certificado:
Abrir appSettings.json
y agregar lo siguiente:
"Kestrel": {
"Endpoints": {
"Https": {
"Url": "https://my.domain.local:5001",
"Certificate": {
"Path": "C:\\path\\domain_local.pfx",
"Password": "tu_password"
}
}
}
}
Como ultimo paso, agregarmos my.domain.local
al archivo hosts (si todavia no lo agregaste), corremos nuestra API, y listo, ya tenemos nuestra API bajo SSL 😊