資源簡介
Windows下用SSL實現(xiàn)加密通訊Demo。內(nèi)含win32 realease版本的openssl-1.1.0f靜態(tài)庫,及用其生成的加密數(shù)字證書文件。可參見:http://blog.csdn.net/ljttianqin/article/details/73498453
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#pragma?comment(lib?“WS2_32.lib“)
#define?MAXBUF?1024
void?ShowCerts(SSL?*?ssl)
{
X509?*cert;
char?*line;
cert?=?SSL_get_peer_certificate(ssl);
if?(cert?!=?NULL)?{
printf(“數(shù)字證書信息:\n“);
line?=?X509_NAME_oneline(X509_get_subject_name(cert)?0?0);
printf(“證書:?%s\n“?line);
free(line);
line?=?X509_NAME_oneline(X509_get_issuer_name(cert)?0?0);
printf(“頒發(fā)者:?%s\n“?line);
free(line);
X509_free(cert);
}
else
printf(“無證書信息!\n“);
}
int?main(int?argc?char?**argv)
{
int?sockfd?len;
struct?sockaddr_in?dest;
char?buffer[MAXBUF?+?1]?=?{?0?};
SSL_CTX?*ctx;
SSL?*ssl;
/*?SSL?庫初始化,參看?ssl-server.c?代碼?*/
SSL_library_init();
OpenSSL_add_all_algorithms();
SSL_load_error_strings();
ctx?=?SSL_CTX_new(SSLv23_client_method());
if?(ctx?==?NULL)?{
ERR_print_errors_fp(stdout);
exit(1);
}
/*?創(chuàng)建一個?socket?用于?tcp?通信?*/
WORD?wVersionRequested;
WSADATA?wsaData;
int?err;
wVersionRequested?=?MAKEWORD(2?2);
err?=?WSAStartup(wVersionRequested?&wsaData);
if?(err?!=?0)//返回0表示成功
{
return?0;
}
if?(LOBYTE(wsaData.wVersion)?!=?2?||?HIBYTE(wsaData.wVersion)?!=?2)
{
WSACleanup();
return?0;
}
if?((sockfd?=?socket(AF_INET?SOCK_STREAM?0))?0)?{
perror(“Socket“);
exit(errno);
}
printf(“socket?created\n“);
/*?初始化服務(wù)器端(對方)的地址和端口信息?*/
dest.sin_family?=?AF_INET;
dest.sin_addr.s_addr?=?inet_addr(“127.0.0.1“);
dest.sin_port?=?htons(60005);
printf(“address?created\n“);
/*?連接服務(wù)器?*/
if?(connect(sockfd?(struct?sockaddr?*)?&dest?sizeof(dest))?!=?0)?{
perror(“Connect?“);
exit(errno);
}
printf(“server?connected\n“);
/*?基于?ctx?產(chǎn)生一個新的?SSL?*/
ssl?=?SSL_new(ctx);
SSL_set_fd(ssl?sockfd);
/*?建立?SSL?連接?*/
if?(SSL_connect(ssl)?==?-1)
ERR_print_errors_fp(stderr);
else?{
printf(“Connected?with?%s?encryption\n“?SSL_get_cipher(ssl));
ShowCerts(ssl);
}
/*?接收對方發(fā)過來的消息,最多接收?MAXBUF?個字節(jié)?*/
//bzero(buffer?MAXBUF?+?1);
/*?接收服務(wù)器來的消息?*/
len?=?SSL_read(ssl?buffer?MAXBUF);
if?(len?>?0)
printf(“接收消息成功:‘%s‘,共%d個字節(jié)的數(shù)據(jù)\n“
buffer?len);
else?{
printf
(“消息接收失敗!錯誤代碼是%d,錯誤信息是‘%s‘\n“
errno?strerror(errno));
goto?finish;
}
//bzero(buffer?MAXBUF?+?1);
memset(buffer?0?MAXBUF);
strcpy(buffer?“from?client->server“);
/*?發(fā)消息給服務(wù)器?*/
len?=?SSL_write(ssl?buffer?strlen(buffer));
if?(len?0)
printf
(“消息‘%s‘發(fā)送失敗!錯誤代碼是%d,錯誤信息是‘%s‘\n“
buffer?errno?strerror(errno));
else
printf(“消息‘%s‘發(fā)送成功,共發(fā)送了%d個字節(jié)!\n“
buffer?len);
finish:
/*?關(guān)閉連接?*/
SSL_shutdown(ssl);
SSL_free(ssl);
closesocket(sockfd);
SSL_CTX_free(ctx);
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????30720??2017-06-20?15:25??SSL\.vs\SSL\v14\.suo
?????文件???????1024??2017-06-11?15:52??SSL\Openssl_Libs\win32-release\bin\.rnd
?????文件???????1434??2017-06-11?15:51??SSL\Openssl_Libs\win32-release\bin\ca.crt
?????文件???????1884??2017-06-11?15:50??SSL\Openssl_Libs\win32-release\bin\ca.key
?????文件???????3926??2017-06-11?15:52??SSL\Openssl_Libs\win32-release\bin\client.crt
?????文件????????778??2017-06-11?15:46??SSL\Openssl_Libs\win32-release\bin\client.csr
?????文件????????981??2017-06-11?15:45??SSL\Openssl_Libs\win32-release\bin\client.key
?????文件???????6474??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\bin\c_rehash.pl
?????文件????????224??2017-06-11?15:52??SSL\Openssl_Libs\win32-release\bin\demoCA\index.txt
?????文件?????????22??2017-06-11?15:52??SSL\Openssl_Libs\win32-release\bin\demoCA\index.txt.attr
?????文件?????????22??2017-06-11?15:51??SSL\Openssl_Libs\win32-release\bin\demoCA\index.txt.attr.old
?????文件????????112??2017-06-11?15:51??SSL\Openssl_Libs\win32-release\bin\demoCA\index.txt.old
?????文件???????3926??2017-06-11?15:51??SSL\Openssl_Libs\win32-release\bin\demoCA\newcerts\01.pem
?????文件???????3926??2017-06-11?15:52??SSL\Openssl_Libs\win32-release\bin\demoCA\newcerts\02.pem
?????文件??????????4??2017-06-11?15:52??SSL\Openssl_Libs\win32-release\bin\demoCA\serial
?????文件??????????4??2017-06-11?15:51??SSL\Openssl_Libs\win32-release\bin\demoCA\serial.old
?????文件????1933312??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\bin\openssl.exe
?????文件???????3926??2017-06-11?15:51??SSL\Openssl_Libs\win32-release\bin\server.crt
?????文件????????778??2017-06-11?15:44??SSL\Openssl_Libs\win32-release\bin\server.csr
?????文件????????981??2017-06-11?15:42??SSL\Openssl_Libs\win32-release\bin\server.key
?????文件???????8331??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\asn1parse.html
?????文件???????8939??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\blake2b.html
?????文件???????8939??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\blake2s.html
?????文件??????29952??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\ca.html
?????文件???????9725??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\CA.pl.html
?????文件??????33540??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\ciphers.html
?????文件??????30881??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\cms.html
?????文件???????4895??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\crl.html
?????文件???????4308??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\crl2pkcs7.html
?????文件???????5650??2017-06-08?10:08??SSL\Openssl_Libs\win32-release\html\man1\c_rehash.html
............此處省略3322個文件信息
評論
共有 條評論