Click here to Skip to main content
Click here to Skip to main content

CSslSocket - SSL/TLS enabled CSocket

By , 24 Nov 2001
 

Motivation

Having seen SSL samples from Platform SDK (WebServer and WebClient) I found, it would be useful to benefit from SSL/TLS functionality built in Windows. However, these samples are not very user friendly - you can learn from them how SSL/TLS works in Windows, but adapt it to different applications is not easy.

Description of solution

I am sure everybody knows CSocket from MFC and has seen samples CHATTER / CHATSRVR - that's place where I started - my idea was to derive CSslSocket from CSocket and extend it with SSL functionality.

It means that CSslSocket works in the same way as CSocket and there are several small differences in the declarations of Create() and Listen() methods:

BOOL Create(
	UINT nSocketPort = 443,
	LPCTSTR lpszSocketAddress = NULL,
	const TCHAR *szCertName = NULL,
	BOOL bMachineStore = FALSE,
	DWORD dwProtocol = 0);
BOOL Listen(
	int nConnectionBacklog = 5,
	BOOL bAuthClient = FALSE);

Parameters nSocketPort, lpszSocketAddress are the same parameters as CSocket has. SSL/TLS are a stream based protocols, therefore you cannot specify SOCK_DGRAM in this method as it is possible for CSocket. However, you can specify name of certificate (you must have certificate for server side), certificate store  and preferred protocol (see SCHANNEL_CRED). Client certificate is not required, but you can force SSL engine to require it. In this case set bAuthClient to TRUE in call to Listen() method.

You can find more information about SSL/TLS and Schannel at locations specified at the begging of the article.

Usage

You can use CSslSocket exactly as you are using CSocket, use it directly, or derive your new class from CSslSocket and overwrite required method. See modified samples provided with this article.

Demo program(s)

There are modified samples from Microsoft CHATTER / CHATSRVR for demonstration of CSslSocket usage and work in the zipped file. Modifications are small - just CSocket is replaced with CSslSocekt and there is code to pass proper parameters to the CSslSocket class. You need one or two certificates to test my class. Simplest way is to install Certificate services from Microsoft and request certificates for client and server identification by web forms provided by Certificate services (you need Windows NT/2000 server), or you can use OpenSSL as well. Then just specify server certificate name for CHATSRVR  in the first dialog window and user certificate name for CHATTER.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Martin Ziacek
Software Developer (Senior)
United Kingdom United Kingdom
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionLicensemembertalbot4 Jul '11 - 0:21 
QuestionHow to enable TLS?memberStefanKittel13 Dec '09 - 11:29 
AnswerRe: How to enable TLS?memberArt Joyce3 Feb '12 - 4:04 
QuestionDoes Schannel support DTLS protocol?memberD L Deepthi7 Dec '08 - 19:37 
QuestionDecryptMessage fails with SEC_E_DECRYPT_FAILURE (0x80090330L) errormemberdeepthi_dl23 Sep '08 - 4:16 
GeneralLarge message will hangs the servermemberpip.chan6 May '08 - 21:20 
GeneralRe: Large message will hangs the servermemberpip.chan6 May '08 - 22:43 
GeneralRe: Large message will hangs the servermemberpip.chan7 May '08 - 0:09 
QuestionServer requests client cert problem ?memberMichael Chourdakis24 Nov '07 - 5:56 
QuestionServer-auth-only with exportable public cert. & .PVK filememberBritannicAndy2 Aug '07 - 1:45 
Questionerror 0x80090304memberdpfairchild4 May '07 - 11:19 
AnswerRe: error 0x80090304memberisapiyan16 May '07 - 15:53 
Generalerror in CSslSocket::ClientHandshakeLoop.memberMazhar Nazeer22 Nov '06 - 2:04 
GeneralSchannel offline decryptionmemberabhalve28 Sep '06 - 21:11 
Questionalways return find not foundmembertin nguyen trung24 Sep '06 - 6:27 
QuestionHow to implement on windows 2003membertin nguyen trung23 Sep '06 - 5:02 
GeneralStack CorruptionmemberI.C.Wiener19 Mar '06 - 11:32 
GeneralRe: Stack Corruptionmemberncranger6 Apr '06 - 22:50 
QuestionMartin - You Still Around?membermjxnjx21 Mar '05 - 12:35 
GeneralLDAP TLS connectionmembermeghan20 Jan '05 - 0:50 
GeneralRoot CA certificatememberstanr14 Sep '04 - 3:49 
GeneralBug in extra data handlighmemberIrek Zielinski24 Jul '04 - 22:38 
GeneralRe: Bug in extra data handlighmemberDarkstructures4 Apr '05 - 22:01 
GeneralRe: Bug in extra data handlighmemberI.C.Wiener19 Mar '06 - 18:14 
GeneralCrashes when sending multiple packetsmemberGNZ4 May '04 - 8:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 25 Nov 2001
Article Copyright 2001 by Martin Ziacek
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid