使用openssl 正确的加载公钥私钥,并建立ssl通信(客户端)
2010-01-04 20:42
381 查看
stdafx.h 文件
在连接中加入 wsock32.lib libeay32.lib ssleay32.lib 这些库文件
openssl 相关的参考资料
http://www.ibm.com/developerworks/cn/linux/l-openssl.html
http://www.openssl.org/docs/crypto/BIO_f_ssl.html
http://www.ctm.com.cn/Article/ShowArticle.asp?ArticleID=18
参考用书 精通pki 网络安全认证技术与编程实现 人民邮电出版社
#pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> #include <stdlib.h> #include <memory.h> #include <winsock.h> #include <windows.h> #include <openssl/evp.h> #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/err.h> #define CHK_NULL(x) if ((x)==NULL) exit (1) #define CHK_ERR(err,s) if ((err)==-1) { perror(s); exit(1); } #define CHK_SSL(err) if ((err)==-1) { ERR_print_errors_fp(stderr); exit(2); }
// ssl1.cpp : Defines the entry point for the console application. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int err ; int sd; struct sockaddr_in sa; SSL_CTX* ctx; SSL* ssl; X509* server_cert; char* str; char buf[4096]; SSL_METHOD *meth; WSADATA wsaData; //初始化 windows socket 环境 printf("初始化 windows socket 环境/n"); if (WSAStartup(MAKEWORD(1,1),&wsaData)) { return 0; } //初始化 openssl 环境 printf("初始化 openssl 环境/n"); SSL_load_error_strings(); SSLeay_add_ssl_algorithms(); SSL_library_init(); //ssl协议版本,v2,v3 自适应 printf("ssl协议版本,v2,v3 自适应/n"); meth=SSLv23_client_method(); ctx=SSL_CTX_new(meth); if (!SSL_CTX_use_certificate_file(ctx,"/pik/ccgong.pem",SSL_FILETYPE_PEM) || !SSL_CTX_use_PrivateKey_file(ctx,"/pik/cchl02kw-ras.key",SSL_FILETYPE_PEM) || !SSL_CTX_check_private_key(ctx)) { printf("Error setting up SSL_CTX/n"); return 0; } CHK_NULL(ctx); //CHK_SSL(err); //以常规的socket 编程的方式创建socket 并链接到服务器 printf("以常规的socket 编程的方式创建socket 并链接到服务器/n"); sd=socket(AF_INET,SOCK_STREAM,0); CHK_ERR(sd,"socket"); memset(&sa,'/0',sizeof(sa)); sa.sin_family=AF_INET; sa.sin_addr.s_addr=inet_addr("服务器ip"); sa.sin_port=htons(4000); //链接服务器 printf("链接服务器/n"); err=connect(sd,(struct sockaddr*)&sa,sizeof(sa)); CHK_ERR(err,"connect"); //使用现有的tcp链接开启ssl 协议 printf("使用现有的tcp链接开启ssl 协议/n"); ssl=SSL_new(ctx); CHK_NULL(ssl); //启动SSL链接 printf("启动SSL链接/n"); SSL_set_fd (ssl, sd); err = SSL_connect (ssl); CHK_SSL(err); //打印ssl 链接的算法 printf("打印ssl 链接的算法/n"); printf("SSL connection using %s/n",SSL_get_cipher(ssl)); //获得服务器证书 getchar(); server_cert=SSL_get_peer_certificate(ssl); CHK_NULL(server_cert); printf("Server certificate:/n"); //获得服务器证书名称 str=X509_NAME_oneline(X509_get_subject_name(server_cert),0,0); CHK_NULL(str); printf("/t subject:%s/n",str); OPENSSL_free(str); //获得服务器证书发者的名称; str=X509_NAME_oneline(X509_get_issuer_name(server_cert),0,0); CHK_NULL(str); printf("/t issuer: %s/n",str); OPENSSL_free(str); X509_free(server_cert); //发送消息 到服务器端 err=SSL_write(ssl,"Hello World",strlen("Hello World")); CHK_SSL(err); //读取服务器端信息 err=SSL_read(ssl,buf,sizeof(buf)-1); CHK_SSL(err); buf[err]='/0'; printf("Got %d chars:'%s'/n",err,buf); getchar(); SSL_shutdown(ssl); closesocket(sd); SSL_free(ssl); SSL_CTX_free(ctx); return 0; }
在连接中加入 wsock32.lib libeay32.lib ssleay32.lib 这些库文件
openssl 相关的参考资料
http://www.ibm.com/developerworks/cn/linux/l-openssl.html
http://www.openssl.org/docs/crypto/BIO_f_ssl.html
http://www.ctm.com.cn/Article/ShowArticle.asp?ArticleID=18
参考用书 精通pki 网络安全认证技术与编程实现 人民邮电出版社
相关文章推荐
- OpenSSL编程初探1 --- 使用OpenSSL API建立SSL通信的一般流程简介
- 使用OpenSSL API 建立SSL安全通信的一般流程
- 使用OpenSSL API 建立SSL安全通信的一般流程
- Mac 下Nodejs 使用 https 的过程以及使用openssl生成私钥、公钥和证书
- 利用OpenSSL建立SSL安全通信(C/S)
- 利用OpenSSL建立SSL安全通信(C/S)
- Mac 使用OpenSSL生成 RSA公钥与私钥
- 利用OpenSSL建立SSL安全通信(C/S)(一)
- 如何使用openssl生成RSA公钥和私钥对
- MAC下使用OpenSSL生成私钥和公钥
- tcp通讯的方式并使用socket建立客户端与服务器的通信的过程
- MAC OS下使用OpenSSL生成私钥和公钥的方法
- 在tomcat中测试ssl的时候使用openssl,需要生成一个客户端证书
- linux学习之路之使用openssl创建私钥CA及使用CA为客户端颁发证书
- 使用OpenSSL生成RSA公钥和私钥
- 使用openssl生成公钥私钥
- 如何使用openssl生成RSA公钥和私钥对
- 利用OpenSSL建立SSL安全通信 (C/S)
- 利用OpenSSL建立SSL安全通信(C/S)(二)
- MAC OS下使用OpenSSL生成私钥和公钥的方法