안녕하세요?
Kestrel 서버를 이용하여 브라우저를 인터페이스로 동작 시키려는 간단한 어플리케이션을 구상중입니다.
주로 AZURE 나 IIS 로 배포 할때 인증서는 너무 쉽게 https 환경을 구성 하였는데요.
이번에는 아주 간소하게 EXE 파일 클릭 만으로 간단하게 동작하는 로컬웹서비스를 구현 하려 하고 있습니다만, https 설정이 생각처럼 쉽지 않네요. 그러던 와중에 아래의 방법을 시도 하였습니다.
mkcert 이용하여 사설 PEM 인증서를 생성 하였습니다. 이것을 이용해 appsetting.json 으로 아래와 같이 적용 하였고, https://localhost:5003 으로 정상 작동 하였습니다.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
...중략...
"Kestrel": {
"Endpoints": {
"HttpsFromPem": {
"Url": "https://localhost:5003",
"Certificate": {
"Path": "cert/localhost.pem",
"KeyPath": "cert/localhost-key.pem"
}
}
}
},
...중략...
"AllowedHosts": "*"
}
하지만 빌드후 쉽게 손질? 이 가능한 appsetting.json 으로 설정하는 방법 대신 동일한 작동을 하도록 코드로 구현 하고자 하는 마음에, 앞서 작성한 appsetting.json을 원상 복구 하고, 다음과 같이 작성 하였습니다만 https://localhost:5003 으로 접속 되지 않았습니다.
...중략...
var x509 = X509Certificate2.CreateFromPemFile(@"cert\localhost.pem", @"cert\localhost-key.pem");
//혹시나 해서 키가 올바른지 검사 해 보았습니다.
if (x509.HasPrivateKey == true)
{
Console.WriteLine("Has private key");
}
else
{
Console.WriteLine("No private key");
}
builder.WebHost.ConfigureKestrel((context, options) =>
{
options.ListenLocalhost(5003, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1AndHttp2AndHttp3;
listenOptions.UseHttps(x509);
});
});
...중략...
이런저런 방법을 많이 시도 해봤지만 제가 무언가 사소한것을 착각 하고 있는것일지, 고민 끝에 질문을 남겨 봅니다.
appsetting.json 에서 작동 했다면 분명 코드로도 동일하게 구현 할 수 있을것이라 생각하는데, 제 생각이 잘못된 것일지요 ?
감사합니다.
- 참고 자료
mkcert