다른 (외부) REST 서비스를 사용하는 내부 REST 서비스를 구현했습니다. 외부 서비스는 클라이언트 인증서 (및 토큰)가있는 HTTPS로 보호됩니다. 첫 번째 구현에서클라이언트 인증서 HttpClient .Net Core Docker Linux
그것은 .NET 프레임 워크 (물론 윈도우의 4.6.2)를 기반으로하는 서비스이고 코드는 닮은 :
var certificate = new X509Certificate2("./ExternalCert.pfx", "supersecurepassword764689");
var httpClientHandler = new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption.Manual,
ClientCertificates =
{
certificate
},
CookieContainer = this.cookieContainer,
};
this.httpClient = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(url)
};
그리고 그것은 아주 잘했다. 이제 ASP.NET Core 2 (.NET Core 기반)와 Docker로 전환하고 있습니다. 내 Windows 컴퓨터에서 개발하는 동안 위의 코드도 .NET Core와 함께 작동했습니다.
하지만 지금은 도커 컨테이너 (물론 리눅스) 내부에서 실행하면 더 이상 작동하지 않습니다 (SSL 오류). (당분간 인증서는 컨테이너 이미지로 복사되지만, 도커의 비밀 정보로 저장할 계획입니다).
나는 약간의 조사를했는데 * .pfx는 리눅스에서 작동하지 않으므로 pfx를 기반으로 * .pem 파일을 생성해야합니다. 또한 시도
var certificate = new X509Certificate2("./NewExternalCert.pem", "supersecurepassword764689");
과 : : 이제
var certificate = new X509Certificate2(File.ReadAllBytes("./NewExternalCert.pem"), "supersecurepassword764689");
나는 여전히 외부에서 오류가 발생
openssl pkcs12 -in ExternalCertificate.pfx -out ExternalCertificate.pem -nodes
는 그 후 나는 다음과 같은 라인을 교체 : 그래서 나는이 명령으로 생성 클라이언트 인증서가 누락되었지만 응용 프로그램에 예외가없는 서비스.
그래서 내가 뭘 잘못하고 있니? 어떻게하면 리눅스에서 인증서를 보낼 수 있습니까? 두 OS에서 같은 방식으로 수행 할 수 있습니까?
미리 조언 해 주셔서 감사합니다.
는 소리, https://github.com :
내가 가진 컨테이너 이미지의 일부 (Dockerfile)로 인증서를 복사/dotnet/corefx/search? q = 클라이언트 + 인증서 + httpclienthandler & type = Issues & utf8 = ✓ 당신이 어느 솔루션을 찾았는지 그리고 이미 해결책이 있는지를 파헤칠 수 있습니다. 자신과 일치하는 항목이 없으면 새 항목을 엽니 다. –예, 많은 것을 읽고 "해결책"을 시도했습니다. 나는 여러 가지 일을 시도하는 데 많은 시간을 보냈지 만, 너무 명백한 것을 놓친다면 확실하지 않습니다. – pr177
빠른 방법은 해당 부분에 대한 Microsoft 단위 테스트 케이스를 파헤 치고 Linux에서 작동하는지 확인하는 것입니다. 그런 다음 Microsoft가 이미 구현했는지 여부를 알 수 있습니다. –