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
随机推荐
- wamp 安装redis扩展
phpredis扩展下载地址 http://windows.php.net/downloads/pecl/snaps/redis/ 1.选择redis DLL文件扩展 phpinfo 查看VC版本 ...
- jquery不能实时获取CKEDITOR值的解决方法
不用传统的获取值的方法: var ckeditor = document.getElementById("ckeditor").value; 换成: var ckeditor = ...
- c++:空构造空析构的益处之一
项目开发过程中发现一个问题,有段代码,一个动态库的cpp代码里不包含头文件中类的空构造空析构实现,就会出现编译出的动态库依赖项少了很多.而添加后则多了好几个依赖项.下面看例子: ##a.h class ...
- 179. Largest Number(INT, String)
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- PHP中的变量与PHP中算false的情况
一PHP中的变量 1.PHP中的变量,声明与使用必须用$开头 2.PHP是一种弱类型语言,变量其实并不需要声明.可以直接给变量赋任何类型的值: 3.PHP中可以使用连等同时声明多个变量, eg:num ...
- Camera插件推荐,解锁电影大师级视角控制
相机在游戏中的重要性是不言而喻的,尤其是一些MMORPG或FPS等类型的游戏,相机不仅需要跟随游戏主角进行移动,可能还要随时准备切换焦点,这就要求开发者将游戏相机管理得井井有条,能顺应游戏中可能瞬息发 ...
- Codeforces Beta Round #70 (Div. 2)
Codeforces Beta Round #70 (Div. 2) http://codeforces.com/contest/78 A #include<bits/stdc++.h> ...
- IOS是否存在32位和64位版本的区分
苹果于2013年9月推出了iPhone 5S新手机,采用的全新A7处理器其最大特色就是支持64位运算.其64位A7处理器的使用意味着iPhone性能会大有提高,性能和速度更加出色:而要到达到这样的性能 ...
- pa sslvpn使用手册
1.浏览器输入https://x.x.x.x 根据电脑操作系统及位数选择下载 2.安装 直接“下一步”,到 输入IP地址x.x.x.x 点击连接会有证书错误提示 此时点击显示证书→本地计算机→安装到 ...
- 【Linux 进程】fork函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同, ...