资源简介
Windows下用SSL实现加密通讯Demo。内含win32 realease版本的openssl-1.1.0f静态库,及用其生成的加密数字证书文件。可参见: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(“数字证书信息:\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(“颁发者: %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);
}
/* 创建一个 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“);
/* 初始化服务器端(对方)的地址和端口信息 */
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“);
/* 连接服务器 */
if (connect(sockfd (struct sockaddr *) &dest sizeof(dest)) != 0) {
perror(“Connect “);
exit(errno);
}
printf(“server connected\n“);
/* 基于 ctx 产生一个新的 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);
}
/* 接收对方发过来的消息,最多接收 MAXBUF 个字节 */
//bzero(buffer MAXBUF + 1);
/* 接收服务器来的消息 */
len = SSL_read(ssl buffer MAXBUF);
if (len > 0)
printf(“接收消息成功:‘%s‘,共%d个字节的数据\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“);
/* 发消息给服务器 */
len = SSL_write(ssl buffer strlen(buffer));
if (len < 0)
printf
(“消息‘%s‘发送失败!错误代码是%d,错误信息是‘%s‘\n“
buffer errno strerror(errno));
else
printf(“消息‘%s‘发送成功,共发送了%d个字节!\n“
buffer len);
finish:
/* 关闭连接 */
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个文件信息
相关资源
- ippicv_windows_20141027.zip
- iNode 7.3 PCE0524
- Windows网络编程第二版真正的高清带书
- windows动态磁盘无损转基本磁盘方法(
-
Ghostsc
ript_Windows_9.15_win32_win64 - Redis-windows版4.0.2.2
- 支持国密SSL通信协议的TOMCAT7.0.96,大
- 韩立刚,windows server 2008 视频教程,活
- FreeFileSyncWindows文件同步工具
- Windows PowerShell高级编程.pdf
- zookeeper-3.4.10 64位 Windows服务版
- Windows.Server.2003用户管理指南
- mqtt.fx-1.7.1-windows版本,绿色安装简单
- Git-2.23.0-64-bit--Windows安装包.zip
- 韩立刚,windows server 2008 视频教程,活
- zbar Windows32和64的库
- 《Windows网络编程技术》高清PDF版+随书
- Microsoft.Windows.Cortana_cw5n1h2txyewy.zip
- Windows IoT应用开发指南
- zw_WINDOWSAPI程序设计参考大全.zip
- DellR720通过U盘安装windows2008R2
- 绘制哆啦A梦.zip
- Windows CE 7.0中文版ARM
- Windows命令行详解手册(第2版)
- pandoc-2.8-windows-x86_64.msi
- WINDOWS API程序设计参考大全.pdf
- Inside Windows Debugging.pdf
- WINDOWS PE.GHO
- Windows Server 2012 R2 安装NetFx3。镜像文件
- Windows网络编程第二版 中文、英文版(
评论
共有 条评论