2014-04-23 4 views
3

mkbundle을 사용하여 기본 (Linux) 실행 파일로 번들로 묶은 Mono로 .NET 응용 프로그램을 구축했습니다. 이는 최종 사용자가 모노를 혼란에 빠뜨릴 필요가 없도록하기 위해서입니다.HttpListener와 함께 SSL을 mkbundle'd Mono 응용 프로그램과 함께 사용하는 방법

응용 프로그램은 HttpListener을 사용하는 ServiceStack을 사용합니다. SSL 지원 HTTP 끝점을 통해 노출되도록 웹 서비스가 필요합니다.

일반적으로 구성 중에 httpcfg -add -port 1234 -p12 MyCert.pfx -pwd "MyPass"과 같은 것을 실행하면 (이 모든 것은 인증서를 특정 경로로 복사하는 것이므로) HttpListener은 자동으로 인증서를 포트에 바인딩합니다.

따라서 HttpListener은 런타임에 특정 경로의 인증서를로드합니다.

경로는 하드 코딩되어 있습니까? 아니면 최종 사용자가 Mono를 설치하지 않기 때문에 다른 위치에서 인증서를 사용하도록 말할 수있는 방법이 있습니까?

답변

2

HttpListener에서 인증서를 찾을 것으로 예상되는 경로는 미리 정의되어 있으며 프로그래밍 방식으로 또는 구성 파일을 통해 사용자가 지정할 수 없습니다. 모노 EndPointListener 클래스 경로를 찾습니다 :

~/.config/.mono/httplistener/ 

HttpListener code을 :

string dirname = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData); 
string path = Path.Combine (dirname, ".mono"); 
path = Path.Combine (path, "httplistener"); 

이이 httpcfg 복사 인증서에 동일한 경로 언급했듯이.

mkbundle을 사용해도 Mono 런타임이 설치되어 있는지 여부와 관계없이 HttpListener에서 인증서를 읽을 것으로 예상됩니다. 응용 프로그램 시작에

, 당신이해야 : 디렉토리의 존재

  • 확인하고,
  • 응용 프로그램에 포함 된 리소스에서 해당 경로에 인증서와 키를 쓰기 필요에 따라 만들 수 있습니다. PouPou's answer here은 HttpCfg.exe에서 사용하는 방법을 보여줍니다.

따라서 httpcfg을 실행할 필요가 없으므로이 기능을 응용 프로그램에 효과적으로 구현할 수 있습니다.


합니까 모노는 HTTP Listener에 거기에서로드 인증서의 유효성 검사를 수행? 즉, 인증서 저장소에서 발급자의 인증서를 찾을 것으로 예상됩니까?

Mono가 수신기를 만들 때 인증서 저장소에있는 유효한 해당 발급자 인증서를 확인하는지 또는 각 연결 요청시에 나는 확실하지 않습니다. 그러나 인증서 저장소에 CA 인증서를 직접 추가하거나 모든 표준 Mozroot 인증서를 가져올 수 있습니다.

Mozroots is here에 대한 전체 소스 코드입니다. CA 인증서를 가져 오는 방법을 보여줍니다.

인증서 저장소에 대한 경로도 하드 코딩되어 있습니까?

인증서 저장소는 공급자를 통해 관리해야합니다.

+0

Mono는'HttpListener'에서로드하는 인증서의 유효성 검사를 수행합니까? 즉, 인증서 저장소에서 발급자의 인증서를 찾을 것으로 예상됩니까? 인증서 저장소에 대한 경로도 하드 코딩되어 있습니까? – Cocowalla

+0

@Cocowalla 답변을 업데이트했습니다. 'Mozroots' 도구의 링크 된 구현은 응용 프로그램 구성 단계에서 CA 경로 인증서를 시스템에 추가 할 수있게합니다. 'X509StoreManager'는 인증서 저장소를 관리하는 데 사용되므로 경로에 직접 액세스하면 안됩니다. 희망이 도움이 – Scott

+0

'X509StoreManager' (https://github.com/mono/mono/blob/a31c107f59298053e4ff17fd09b2fa617b75c1ba/mcs/class/Mono.Security/Mono.Security.X509/X509StoreManager.cs)를 확인했습니다. 경로는 하드 코딩됩니다. mkbundle은 사용자가 Mono가 이미 설치되어있는 것을 필요로하지 않는다는 것을 의미합니다 ... 그러나 하드 코딩 된 장소에 많은 경로가 필요해 보입니다 :/ – Cocowalla

관련 문제