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
随机推荐
- asp.net之发送邮件1
/// <summary> ///发邮件给用户 /// </summary> /// <param name="userEmail">用户的邮件 ...
- 665. Non-decreasing Array
Given an array with n integers, your task is to check if it could become non-decreasing by modifying ...
- logic:iterate(转)
logic:iterate struts标签<logic:iterate>的用法 StrutsBeanJSPWeb脚本 <logic:iterate>主要用来处理在页面上输出 ...
- 简单的jQ代码
简单的jQ代码 /* * Lazy Load - jQuery plugin for lazy loading images * * Copyright (c) 2007-2012 Mika Tuup ...
- 二叉树中和为某一值的路径(python)
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- WAS 手动删除server
有时候WPS Server上的应用会一直start不起来,尝试卸载也会失败.在这种情况下,我们可以手动删除这个文件. 步骤如下: 1. Stop server 2. 进入$Profile_instal ...
- python网络爬虫《http和https协议》
一.HTTP协议 1.官方概念: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文 ...
- 三个<li>元素放一行
<ul><li style="float:left;display:inline;">0</li><li style="floa ...
- Sigar--系统性能监测
Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API.可以收集的信息包括: 1, CPU信息,包括基本信 ...
- TZOJ 3295 括号序列(区间DP)
描述 给定一串字符串,只由 “[”.“]” .“(”.“)”四个字符构成.现在让你尽量少的添加括号,得到一个规则的序列. 例如:“()”.“[]”.“(())”.“([])”.“()[]”.“()[( ...