搜索
查看: 3126|回复: 4

使用openssl访问https网站

  [复制链接]

42

主题

128

帖子

926

积分

荣誉会员

Rank: 8Rank: 8

积分
926
发表于 2018-1-26 10:42:13 | 显示全部楼层 |阅读模式
本帖最后由 cad 于 2018-1-26 10:51 编辑

import wsock;
import wsock.err;

io.open()


::Openssl = ..raw.loadDll(
"ssleay32.dll","ssleay32.dll","cdecl")


if(! ..wsock.open() ){
   
error( ( ..wsock.err.lasterr() ),2 )
}

var hSocket= ..wsock.socket(0x2/*_AF_INET*/,0x1/*_SOCK_STREAM 建立流式套接口*/,6/*_IPPROTO_TCP*/ )
if( hSocket = _INVALID_SOCKET ){
    wsock.close()
//关闭wsock
    error("hSocket")
}

var service = ..wsock.sockaddr_in( "www.baidu.com",443 );
if(!service)
   
error("service")
service.sin_family = 0x2
/*_AF_INET*/

if ..wsock.connect( hSocket,service,..raw.sizeof(service)) =-1/*_SOCKET_ERROR*/ {  
   
error("connect")
}

// 初始化ssl
::Openssl.SSL_load_error_strings()              
::Openssl.SSL_library_init()                    


var sslCtx = ::Openssl.SSL_CTX_newP(  ::Openssl.SSLv23_client_methodP()  )
if !sslCtx
   
error("sslCtx")
   
var ssl = ::Openssl.SSL_newP(sslCtx)   
if !ssl
   
error("ssl")                                            

// 绑定ssl套接字
::Openssl.SSL_set_fd(ssl, hSocket)
// 建立ssl连接
::Openssl.SSL_connect(ssl)


var data = /***********
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.9
***********/

data ++=
'\r\n\r\n'

// 发送请求
::Openssl.SSL_write(ssl, data, #data)

// 读取数据
var buf = raw.buffer(200)
while( ::Openssl.SSL_read(ssl,buf,200)  ){
    io.print( buf )
}


// 释放资源
..wsock.closesocket(hSocket)
..wsock.close();
::Openssl.SSL_shutdown(ssl)
::Openssl.SSL_free(ssl)
::Openssl.SSL_CTX_free(sslCtx)


execute("pause")

回复

使用道具 举报

0

主题

1

帖子

10

积分

新手入门

Rank: 1

积分
10
发表于 2018-3-4 18:01:19 | 显示全部楼层
系统自带的 http和whttp模块,不能访问https资源吗?如果能访问,你这个应该算是其他途径了
回复

使用道具 举报

0

主题

1

帖子

9

积分

新手入门

Rank: 1

积分
9
发表于 2018-5-20 12:06:12 | 显示全部楼层
user898 发表于 2018-3-4 18:01
系统自带的 http和whttp模块,不能访问https资源吗?如果能访问,你这个应该算是其他途径了

xp win2003 不支持ssl tls 1.2  网站强行使用的话 http和whttp模块 就无法请求了 直接使用openssl能解决这个问题 不依赖系统
回复

使用道具 举报

0

主题

1

帖子

42

积分

新手入门

Rank: 1

积分
42
发表于 2018-6-11 16:26:04 | 显示全部楼层
在win7和win8下,aardio的http和whttp一样不支持tls1.2,只能用别的,没办法
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13974
发表于 2018-6-11 18:52:16 | 显示全部楼层
囚火 发表于 2018-6-11 16:26
在win7和win8下,aardio的http和whttp一样不支持tls1.2,只能用别的,没办法

遇到问题,可以先动手搜索了解一下。
aardio中的http,whttp都使用的是系统的自带网络组件,大多数桌面软件都在用,类似这样的问题,直接从操作系统这个方面去寻找答案。

Win7就已经支持TLS 1.2,只不过默认是关闭的,需要你自己开启一下,几句代码的事:
import win.reg;
var reg = win.reg("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings")
reg.setDwValue(
"SecureProtocols",2720)  
但是开启的代价是不能兼容旧的网站,当然任何东西都没办法做到万能、十全十美。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-12-12 04:56 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表