WebSocket을 사용하는 자체 호스팅 WCF가 SSL을 사용하여 작동하지 않습니다.

마르코 메드 라노

콘솔 응용 프로그램에이 코드가 있습니다. 개발 도구 크롬에서 연결을 시도하고 있지만 WCF 측에서 문제가 확실하지만이 오류가 발생합니다.

WebSocket connection to 'wss://127.0.0.1:5650/Echo' failed: Error in connection establishment: net::ERR_CONNECTION_RESET

WSS 가 내 서버 코드를 치지 않고 예외도 로그도 없습니다. 최소한의 수정으로 WS가 제대로 작동합니다. 코드를 단순화하기 위해 nuget Microsoft.WebSockets사용했습니다 .

WebSocketHost server = new WebSocketHost(typeof(EchoWSService), new Uri("https://127.0.0.1:5650/Echo"));
var bindingSsl = WebSocketHost.CreateWebSocketBinding(true);
server.AddWebSocketEndpoint(bindingSsl);
server.Open();

나는 이미 Custom Cert Validator를 시도했지만 내 코드에 맞지 않는다고 말했습니다.

이제 ServiceRoute를 사용하는 ASP.net 앱에서 server.Open ()제외하고 동일한 코드가 있으며 꽤 잘 작동합니다! 예, SSL 및 IIS Express 용 VS에서 생성 한 자체 서명 된 인증서 :

RouteTable.Routes.Add(new ServiceRoute("Echo", new TRWebSocketServiceFactory(), typeof(EchoWSService)));

브라우저 측은 다음과 같습니다.

var ws = new WebSocket('wss://127.0.0.1:5650/Echo')

에서 의 Web.config 나는 이상이없는

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

그렇다면 도대체 왜 간단한 콘솔 앱에서 자체 호스팅 WCF가 작동하지 않습니까?

마르코 메드 라노

좋아, 마침내 나는 자기 서명 된 인증서와 COMODO에서 발행 한 인증서로이 작업을했다. IIS가 수행하는 작업을 조사하고 모방하여 OS 수준에서 포트와 호스트를 바인딩합니다. 이 결과를이 코드 프로젝트 게시물 에 기반으로했습니다 .

1. 호스팅 머신에 인증서를 설치합니다. 제안 테스트를 위해 IIS 용 VS로 생성 된 자체 서명 된 인증서를 사용하고 있습니다. 다른 것을 사용하거나 makecert.exe로 직접 만들 수 있습니다. Personal → Certificates 에 설치합니다 .여기에 이미지 설명 입력

2. 소켓을 고정합니다. 관리자 권한으로 명령 줄을 통해 다음을 실행합니다.

netsh http add sslcert ipport=0.0.0.0:5650 certhash=xxxxxxx.. appid={xxxx-xxx..} certstorename=MY
netsh http add sslcert hostnameport=domainnamne:5650 certhash=xxxxxxx.. appid={xxxx-xxx..} certstorename=MY

어디:

  • ipport 및 hostnameport = IP, 호스트 또는 도메인 및 포트가 인증서에 바인딩되어 있습니까?
  • certhash = 공백이없는 인증서의 지문입니다.
  • appid = GUID가 무엇이든, 어떤 앱이 그것을 사용하고 있는지 식별해야합니다.
  • certstorename = 인증서 경로,이 경우 MY는 Personal → Certificates를 의미합니다.

Windows Server 2008에서는 동일한 제안에 * httpcfg.exe ***를 사용할 수 있습니다. 성공적으로 바인딩되면 다음을 실행하여 검토 할 수 있습니다.

netsh http show sslcert

우리는 얻을 것이다:

Hostname:port                : domainname:5650
Certificate Hash             : xxxxxxx..
Application ID               : {xxxx-xxx..}
Certificate Store Name       : MY
Verify Client Certificate Revocation : Enabled
…

3. 브라우저 측에서 인증서를 수락합니다. 신뢰할 수있는 유효한 인증서가있는 경우에는 이 단계가 필요하지 않습니다 .

따라서 브라우저가 인증서를 수락하도록하려면 https : // domainname : 5650으로 이동합니다 (도메인 이름은 2 단계에서 바인딩하는 데 사용한 것과 일치해야 함). 그런 다음 인증서를 수락하라는 대화 상자가 표시됩니다. https : // domainname : 5650 / Service .

여기에 이미지 설명 입력

그리고 Voila, 콘솔에서 다음을 시도 할 수 있습니다.

ws = new WebSocket('wss://domainname:5650/Service');

그리고 예외는 없습니다.

여기에 이미지 설명 입력

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Kerberos 인증을 사용하는 WCF 자체 호스팅 웹 서비스

분류에서Dev

Gunicorn을 실행하는 사용자 지정 systemd 서비스가 작동하지 않습니다.

분류에서Dev

Selenium을 사용하는 Powershell : "스크롤하여보기"가 작동하지 않습니다.

분류에서Dev

사용자 정의 패널을 사용하는 JOptionPane.showOptionDialog가 제대로 작동하지 않습니다.

분류에서Dev

SSL을 추가 한 후 사용자 지정 TeamSpeak IP가 더 이상 작동하지 않습니다.

분류에서Dev

systemd를 init 시스템 (PID 1)으로 사용하여 시스템을 부팅하지 않았습니다. 작동 할 수 없습니다. 버스에 연결하지 못했습니다. 호스트가 다운되었습니다.

분류에서Dev

사용자가 공백을 입력하면 Windows 스크립트가 작동하지 않습니다.

분류에서Dev

Appcompat을 사용하여 사용자 정의가 작동하지 않음

분류에서Dev

사용자 svn을 사용하여 svn + ssh가 작동하지 않음

분류에서Dev

사용자 svn을 사용하여 svn + ssh가 작동하지 않음

분류에서Dev

자동 제출을 사용한 값 게시가 작동하지 않습니다.

분류에서Dev

페이지 매김을 사용하여 jquery가 작동하지 않습니다.

분류에서Dev

세션 변수는 로컬 서버에서 작동하지만 symfony2.8을 사용하는 호스팅 서버에서는 작동하지 않습니다.

분류에서Dev

Webstorm 8을 사용하여 sails 앱을 디버깅하는 동안 'Step Over'가 작동하지 않습니다.

분류에서Dev

MVC 속성 라우팅을 사용하는 가장 간단한 예가 작동하지 않습니다.

분류에서Dev

직원 사용자에게 권한을 추가하는 Django 관리자가 작동하지 않습니다.

분류에서Dev

MySQL을 사용하여 선택 쿼리가 작동하지 않습니다.

분류에서Dev

basename을 사용하는 동안 "awk for 루프"가 작동하지 않습니다.

분류에서Dev

프록시 대상을 사용하여 사용자를 localhost : 3000에서 localhost : 3000 / auth / google로 가져 오는 것이 작동하지 않습니다.

분류에서Dev

서비스가 Http 400을 반환 할 때 .map을 사용하는 Http Post가 작동하지 않습니다.

분류에서Dev

ArchLinux | 새 사용자 계정을 만든 후 로그인 암호가 작동하지 않습니다.

분류에서Dev

ArchLinux | 새 사용자 계정을 만든 후 로그인 암호가 작동하지 않습니다.

분류에서Dev

Kotlin을 사용할 때 Keycloak 공급자가 작동하지 않습니다.

분류에서Dev

사용자 등록을위한 PHP 코드가 작동하지 않습니다.

분류에서Dev

사용자 암호를 변경하는 usermod가 작동하지 않습니다.

분류에서Dev

자체 크기 조정 셀을 사용한 후 reloadData가 더 이상 작동하지 않습니다.

분류에서Dev

소켓을 사용하는 C # 대리자가 제대로 작동하지 않습니다.

분류에서Dev

OR 연산자가 Json을 사용하는 Breeze 쿼리에서 작동하지 않습니다.

분류에서Dev

awk를 사용하여 파일 복사를 수행하는 방법. awk에서 분할을 사용하여 복사가 작동하지 않습니다.

Related 관련 기사

  1. 1

    Kerberos 인증을 사용하는 WCF 자체 호스팅 웹 서비스

  2. 2

    Gunicorn을 실행하는 사용자 지정 systemd 서비스가 작동하지 않습니다.

  3. 3

    Selenium을 사용하는 Powershell : "스크롤하여보기"가 작동하지 않습니다.

  4. 4

    사용자 정의 패널을 사용하는 JOptionPane.showOptionDialog가 제대로 작동하지 않습니다.

  5. 5

    SSL을 추가 한 후 사용자 지정 TeamSpeak IP가 더 이상 작동하지 않습니다.

  6. 6

    systemd를 init 시스템 (PID 1)으로 사용하여 시스템을 부팅하지 않았습니다. 작동 할 수 없습니다. 버스에 연결하지 못했습니다. 호스트가 다운되었습니다.

  7. 7

    사용자가 공백을 입력하면 Windows 스크립트가 작동하지 않습니다.

  8. 8

    Appcompat을 사용하여 사용자 정의가 작동하지 않음

  9. 9

    사용자 svn을 사용하여 svn + ssh가 작동하지 않음

  10. 10

    사용자 svn을 사용하여 svn + ssh가 작동하지 않음

  11. 11

    자동 제출을 사용한 값 게시가 작동하지 않습니다.

  12. 12

    페이지 매김을 사용하여 jquery가 작동하지 않습니다.

  13. 13

    세션 변수는 로컬 서버에서 작동하지만 symfony2.8을 사용하는 호스팅 서버에서는 작동하지 않습니다.

  14. 14

    Webstorm 8을 사용하여 sails 앱을 디버깅하는 동안 'Step Over'가 작동하지 않습니다.

  15. 15

    MVC 속성 라우팅을 사용하는 가장 간단한 예가 작동하지 않습니다.

  16. 16

    직원 사용자에게 권한을 추가하는 Django 관리자가 작동하지 않습니다.

  17. 17

    MySQL을 사용하여 선택 쿼리가 작동하지 않습니다.

  18. 18

    basename을 사용하는 동안 "awk for 루프"가 작동하지 않습니다.

  19. 19

    프록시 대상을 사용하여 사용자를 localhost : 3000에서 localhost : 3000 / auth / google로 가져 오는 것이 작동하지 않습니다.

  20. 20

    서비스가 Http 400을 반환 할 때 .map을 사용하는 Http Post가 작동하지 않습니다.

  21. 21

    ArchLinux | 새 사용자 계정을 만든 후 로그인 암호가 작동하지 않습니다.

  22. 22

    ArchLinux | 새 사용자 계정을 만든 후 로그인 암호가 작동하지 않습니다.

  23. 23

    Kotlin을 사용할 때 Keycloak 공급자가 작동하지 않습니다.

  24. 24

    사용자 등록을위한 PHP 코드가 작동하지 않습니다.

  25. 25

    사용자 암호를 변경하는 usermod가 작동하지 않습니다.

  26. 26

    자체 크기 조정 셀을 사용한 후 reloadData가 더 이상 작동하지 않습니다.

  27. 27

    소켓을 사용하는 C # 대리자가 제대로 작동하지 않습니다.

  28. 28

    OR 연산자가 Json을 사용하는 Breeze 쿼리에서 작동하지 않습니다.

  29. 29

    awk를 사용하여 파일 복사를 수행하는 방법. awk에서 분할을 사용하여 복사가 작동하지 않습니다.

뜨겁다태그

보관