MS SSPI를 사용하여 보안 SLL/TLS 클라이언트를 구현하기위한 컴파일블 C ++ 코드

StackOverflow https://stackoverflow.com/questions/2032056

  •  19-09-2019
  •  | 
  •  

문제

여기에 설명 된대로http://www.ddj.com/cpp/184401688

나는 이것을 처음부터 쓸 시간이 없다.

질문하고 대답하지 않았습니다https://stackoverflow.com/questions/434961/implementing-ssl

질문은 ~이야:

나는 컴파일 가능한 일부를 찾고 있습니다 일하고 있는 MS SSPI를 구현하는 소스 코드 (위의 스레드에서 암시 된 바와 같이), 절차 적은 OOP를 선호하지 않습니다.

여기에서 코드 프로젝트 샘플을 살펴 보았습니다.

http://www.codeproject.com/kb/ip/sslclasses.aspx

그러나 이것은 C# OOP입니다. 이것을 C ++ 코드로 변환하는 것은 사소한 일이 아닙니다.

OpenSSL

Schannel 호출은 GSS API 표준을 따릅니다. 물론 일부 대안이 있습니다. 예를 들어 OpensSL이 있습니다. 이 패키지는 프로토콜을 완벽하고 철저하게 구현 한 것이며 UNIX에 너무 친숙한 사람이 의심 할 여지없이 최선의 선택입니다. 이 패키지는 원래 UNIX 커뮤니티를 대상으로했으며 PERL 런타임에 의존하기 위해 UNIX- 타입 시스템과 함께 작업 한 적이없는 Windows 개발자에게는 일부 학습 곡선이 필요합니다.

그 외에도 Opensll은 매우 비표준 일을합니다.

Nikolai, 많은 편집 가능한 소스 코드 (www.coastrd.com)를 만듭니다.

도움이 되었습니까?

해결책

이 SSPI Schannel SMTPS 예제는 Visual Studio 2008에서 컴파일하고 실행해야합니다.

http://www.coastrd.com/c-channel-smtp

Schannel은 SSL/TLS 프로토콜을 랩핑하는 GSS API의 Microsoft 구현입니다.

Schannel 사용의 장점 :

  • Gory 세부 사항은 SSPI에 의해 개발자로부터 보호됩니다.
  • 최종 응용 프로그램을 실행하려면 추가 설정이 필요하지 않습니다.
  • Schannel은 운영 체제의 필수 부분입니다
  • Windows ME/2000/xp/... 플랫폼에서 Schannel이 설치 및 기본적으로 구성됩니다.
  • Schannel 호출은 GSS API 표준을 따릅니다.
  • 인증서를 만들거나 설치할 필요가 없습니다.
  • 배송 및 설치할 제 3 자 DLL (1MB 이상) 없음

코드는 다음과 같은 것처럼 보이는 세션을 생성해야합니다.

----- SSPI 초기화
----- WinSock 초기화
----- 자격 증명이 초기화되었습니다
----- 서버에 연결합니다
핸드 셰이크 데이터 70 바이트 전송
수신 된 핸드 셰이크 데이터의 974 바이트
182 핸드 셰이크 데이터의 바이트
43 바이트의 핸드 셰이크 데이터 수신
악수는 성공적이었습니다
----- 클라이언트 핸드 셰이크가 수행되었습니다
----- 서버 자격 증명이 인증되었습니다

서버 제목 : C = US, S = California, L = Mountain View, O = Google Inc, CN = smtp.gmail.com
서버 발행자 : C = ZA, S = Western Cape, L = Cape Town, O = Thawte Consulting CC, OU = Certification Services Division, CN = Thawte Premium Server CA, e=premium-server@thawte.com

----- 인증 체인이 표시됩니다
----- 서버 인증서 확인
----- 서버 인증서 컨텍스트가 출시되었습니다

프로토콜 : TLS1
암호 : RC4
암호 강도 : 128
해시 : MD5
해시 강도 : 128
키 교환 : RSA
키 교환 강도 : 1024
----- 보안 연결 정보
64 바이트의 (암호화 된) 신청 데이터 수신
해독 된 데이터 : 43 바이트
220 mx.google.com esmtp 6SM17740567YXG.66

7 바이트의 일반 텍스트 보내기 :
ehlo

암호화 된 데이터의 28 바이트
수신 된 (암호화 된) 응용 프로그램 데이터의 169 바이트
해독 된 데이터 : 148 바이트
서비스시 250-MX.google.com, [22.33.111.222
250 크기 35651584
250-8bitmime
250-Auth 로그인 평원
250-enhancedstatuscodes
250 파이프 라인

7 바이트의 일반 텍스트 보내기 :
그만두다

암호화 된 데이터의 28 바이트
69 바이트의 (암호화 된) 신청 데이터 수신
해독 된 데이터 : 48 바이트
221 2.0.0 닫기 연결 6SM17740567YXG.66

----- SMTP 세션 완료
Close 통지를 보냅니다
23 바이트의 핸드 셰이크 데이터 전송
----- 서버와의 연결이 끊어져
----- 청소를 시작하십시오
----- 모든 완료 ----

다른 팁

나에게 반복 : "나는 사용하고 싶다 OpenSSL".

이 문제는 너무 심각하고 너무 쉽고 너무 쉽게 해결하기가 쉽지 않습니다. OpenSSL에 문제가있는 경우 대화와 패치를 통해 OpenSSL을 통해이를 해결하십시오.

(아무도 Microsoft, 또는 실제로 OpensSL이 아닌 사람을 망치는 것에 면역이 없습니다. 문제가있을 때 검토 할 수 있고 패치가 발생하는 소스를 사용하십시오. OpenSSL을 사용하십시오.)

아마도 이 링크 좋은 출발점입니다. MS SSPI를 사용하여 실제로 작동하는 샘플 코드가 포함되어 있습니다 (MSVC는 매우 구체적으로 보이지만 Windows는 어쨌든 만 보입니다). OpenSSL 예제를 무시하십시오 ;-)

이러한 편집 가능한 작업 소스 코드에 대해 얼마를 지불 하시겠습니까? 아니면 누군가가 당신에게 그것을 줄 것을 기대 했습니까? Openssl Guys는 이미 그랬습니다. 그것은 신이지만 가격은 옳습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top