openssl 连接 https(nginx)
参考源码路径 demos\ssl
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Winsock2.h> #include <openssl/crypto.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/err.h> #pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib") #define HTTP_REQUEST "GET /index.html HTTP/1.1\r\nHost: 172.28.250.184:1443\r\nUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:30.0) Gecko/20100101 Firefox/30.0\r\n\r\n" int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); SSL_CTX* ctx;
SSL* ssl;
X509* server_cert;
const SSL_METHOD *meth; int ret;
char *info; SSLeay_add_ssl_algorithms();//初始化
SSL_load_error_strings();//错误信息初始化
//meth = SSLv2_client_method(); 用这个协议连接nginx的时候 SSL_connect 返回 -1 并且没有任何错误打印出来。
meth = TLSv1_client_method();//指定协议 ctx = SSL_CTX_new (meth); err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
} if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return 0;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("172.28.250.184");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(1443);
ret=connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); ssl = SSL_new (ctx);
ret = SSL_set_fd (ssl, sockClient);
ret = SSL_connect (ssl);
if(ret == -1){
ERR_print_errors_fp(stderr);
return -1;
}
//成功连接后的服务器证书信息
printf ("使用的加密算法 %s\n", SSL_get_cipher (ssl));
server_cert = SSL_get_peer_certificate (ssl);
info = X509_NAME_oneline (X509_get_subject_name (server_cert),0,0);
printf ("Server certificate: subject: %s\n", info);
if(!info) free(info);
info = X509_NAME_oneline (X509_get_issuer_name (server_cert),0,0);
printf ("Server certificate: issuer: %s\n", info);
if(!info) free(info);
X509_free (server_cert); //数据传输
ret = SSL_write (ssl, HTTP_REQUEST, strlen(HTTP_REQUEST));
char buf[1500];
memset(buf,0,sizeof(buf));
ret = SSL_read (ssl, buf, 1500);
printf("%s",buf);
SSL_shutdown (ssl);
shutdown (sockClient,2);
SSL_free (ssl);
SSL_CTX_free (ctx); closesocket(sockClient);
WSACleanup();
return 0;
}
openssl 连接 https(nginx)的更多相关文章
- 基于OpenSSL的HTTPS通信C++实现
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL.Nebula是一个为开发者提供一个快速开发 ...
- php soap连接https的wsdl报错SOAP-ERROR: Parsing WSDL:Couldn't load from
转发:https://blog.csdn.net/keyunq/article/details/51804728 SOAP-ERROR: Parsing WSDL:Couldn’t load from ...
- 搭建https+nginx服务器
搭建https+nginx的服务器,主要是安装ngnix和使用openssl生成自签证书,并在nginx中配置的过程 一.安装环境 1.安装opnssl(ssl支持) https://www.op ...
- Nginx安装配置|Nginx反向代理|Nginx支持HTTPS|Nginx重定向
Nginx安装配置 可以直接看到最下面的HTTPS. Nginx安装 我的系统如下: No LSB modules are available. Distributor ID: Ubuntu Desc ...
- 阿里云openssl升级,实现nginx主动推送,nginx主动推送能够有效减少不必要的报文传输,减少用户请求次数,以达到更快访问速度
现有版本检查 [root@node3 ~]# openssl version #这个版本是无法支持http2.0主动推送功能.需要升级为2019版本. OpenSSL 1. ...
- nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务
nginx 为什么要反向代理 影藏后端 高效连接(给nginx,他自己返回) 端口冲突解决 多个服务 单机使用反向代理可以根据不同url匹配到不同站点 rsync 的工作原理和应用实例 ...
- 记Outlook插件与Web页面交互的各种坑 (含c# HttpWebRequest 连接https 的完美解决方法)
1) 方案一, 使用Web Service 基础功能没问题, 只是在连接https (ssh) 网站时, 需要针对https进行开发 (即http 和https 生成两套接口, 不太容易统一 ). ...
- openssl生成https证书
openssl生成https证书 分类: 其它2009-09-03 16:20 452人阅读 评论(0) 收藏 举报 includemoduleaccessapachessl服务器 openssl生成 ...
- https://nginx.org/en/docs/http/request_processing.html
https://nginx.org/en/docs/http/request_processing.html
随机推荐
- IDEA2017-破解方法
@方法一 第一步:下载jar 包 地址:https://github.com/locationbai/registerIDEA_2017.3.2_jar 第二部:将下载好的jar放在idea安装目录下 ...
- leetcode 167 two sum II
167. Two Sum II - Input array is sorted Given an array of integers that is already sorted in ascendi ...
- 健壮的网络编程IO函数-RIO包
RIO包 简介 Rio包即为Robust io函数包.包中函数是对Linux基本I/O函数的封装,使其更加健壮.高效,更适用于网络编程. 分析 Rio包由rio_t结构体和系列函数组成. 首先是两个不 ...
- HttpSession 和 HttpSession
说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.
- 两种创建Observable的方法(转)
转自:http://blog.csdn.net/nicolelili1/article/details/52038211 Observable.create() create()方法使开发者有能力从头 ...
- http协议与常见状态码
什么是http: http是属于应用层(基于tcp的连接方式)的面向对象的协议,是计算机通过网络通信的规则,使得浏览器向web服务器请求信息和服务 http协议特点: http是一种无状态协议(对食物 ...
- centos 7.2 安装域名服务器(bind9.9 集群--主从架构),私有域名服务器+缓存
1.安装组件 yum install bind bind-utils -y 2.启动域名服务 service named start chkconfig named on ss -unlt |grep ...
- awk技巧 nginx access.log
1.1 介绍 awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK 的确拥有自己的语言: AWK ...
- POJ-1321.棋盘问题.(回溯)
做完题之后看了网上的一些题解但是发现他们的解释大部分都是错误的,所以就自己写了一下,笔者能力也有限,有错误之处大家多多指正. 第一次看题的时候以为就是简单的八皇后,但是写了之后发现存在很多问题,比如需 ...
- js数组排序实用方法集锦
前言: 据说程序员三个月就能忘记自己写的代码,所以最好是在有空的时候及时做些总结,记录下来,这样后边遇到类似问题的话,就可以直接先查看自己的博客了.写技术博客,对自己是一种总结,对别人,是一种参考. ...