2017-12-13 6 views
1

다른 (외부) 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에서 같은 방식으로 수행 할 수 있습니까?

미리 조언 해 주셔서 감사합니다.

+0

는 소리, https://github.com :

내가 가진 컨테이너 이미지의 일부 (Dockerfile)로 인증서를 복사/dotnet/corefx/search? q = 클라이언트 + 인증서 + httpclienthandler & type = Issues & utf8 = ✓ 당신이 어느 솔루션을 찾았는지 그리고 이미 해결책이 있는지를 파헤칠 수 있습니다. 자신과 일치하는 항목이 없으면 새 항목을 엽니 다. –

+0

예, 많은 것을 읽고 "해결책"을 시도했습니다. 나는 여러 가지 일을 시도하는 데 많은 시간을 보냈지 만, 너무 명백한 것을 놓친다면 확실하지 않습니다. – pr177

+0

빠른 방법은 해당 부분에 대한 Microsoft 단위 테스트 케이스를 파헤 치고 Linux에서 작동하는지 확인하는 것입니다. 그런 다음 Microsoft가 이미 구현했는지 여부를 알 수 있습니다. –

답변

1

나는 그것을 알아 냈다. Windows에 인증서를 설치해야하므로 Linux 환경을 설정해야합니다.

이후 코드가 같은 목적으로 작품
COPY ExternalCert.pem /etc/ssl/certs/ExternalCert.pem 

그 부분은 많은 문제를 가지고 같은