当前位置:首页 » 编程语言 » pythonhttps证书

pythonhttps证书

发布时间: 2022-07-13 06:12:47

python的httplib.HTTPSConnection会验证客户端服务器的证书吗

默认是不认证的。下面是一个https登录的代码

host = "www.user.com"
headers = {}
headers['Cookie'] = "sid=4783c845-ec9d-4ec4-a163-b67c254b8c85"
url = "/login.htm"

params = {"code":"1111",
"password":"pwd",
"username":"user"}

params = urllib.urlencode(params)
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))

req = urllib2.Request("https://" + host + url)

response = opener.open(req, params)
for item in cookie:
print item.value, item.name

⑵ 如何使用证书存储在python中的字符串变量打开ssl套接字

查看源代码,ssl.wrap_socket直接调用本地代码(openssl)函数SSL_CTX_use_cert_chain_file,它需要一个文件的路径,因此您无法做的是尝试做的。
参考:
在ssl
/
init
.py中,我们看到:
def
wrap_socket(sock,keyfile
=无,certfile
=无,
server_side
=
False,cert_reqs
=
CERT_NONE,
ssl_version
=
PROTOCOL_SSLv23,ca_certs
=
None,
do_handshake_on_connect
=
True):
return
SSLSocket
sock,keyfile
=
keyfile,certfile
=
certfile,
server_side
=
server_side,cert_reqs
=
cert_reqs,
ssl_version
=
ssl_version,ca_certs
=
ca_certs,
do_handshake_on_connect
=
do_handshake_on_connect)
将我们指向SSLSocket构造函数(它在同一个文件中),我们看到以下情况:
self._sslobj
=
_ssl2.sslwrap(self._sock,server_side,
keyfile,certfile,
cert_reqs,ssl_version,ca_certs)
_ssl2在C(_ssl2.c)中实现
查看sslwrap函数,我们看到它正在创建一个新对象:
return(PyObject
*)newPySSLObject(Sock,key_file
,cert_file,
server_side,verification_mode,
protocol,cacerts_file);
查看该对象的构造函数,我们最终会看到:
ret
=
SSL_CTX_use_certificate_chain_file(self->
ctx,
cert_file);
这个函数在openssl中定义,所以现在我们需要切换到那个代码库。
在ssl
/
ssl_rsa.c中,我们最终在函数中找到:
BIO_read_filename
in,file)
如果你深入到BIO代码(openssl的一部分)最终成为正常的fopen():
fp
=
fopen(ptr,p)
所以它看起来像它当前写的。它必须在C的fopen()可打开的文件中。
此外,由于python的ssl库很快跳转到C,我在一个解决方法中看不到一个明显的monkeypatch的地方。

⑶ 怎么解决使用python的requests获得网页时出现sslEOFError错误

  • importrequests

  • url="httplogin.html"

  • ret=requests.get(url,verify="/Test/ssl_address/qlchat.com.crt")

  • printret.status_code

  • 通过 verify 指定证书,表示相信此证书(52.77.252.184.crt 是服务器端证书);也可以用 verify=False,表示不验证服务器端的证书。

    https的证书获取:

    通过Chrome里面-设置-证书,可以导出该域名的ssl证书,然后放到指定路径,verify=证书路径。就能直接请求https了

⑷ python requests请求ssl 加密 提示[SSL: CA_MD_TOO_WEAK] ca md too weak (_ssl.c:4024)')))

服务器环境中的加密套件不支持这种加密方式。建议您升级一下加密套件版本到最新重新配置SSL。

⑸ Python如何使用https请求

是发送请求吧,要发送请求的话,可以去网上下载request库,自行调用,然后可以去csdn寻找使用方法,python内部是不支持发送网络请求包的哦QwQ。

⑹ 验证SSL使用Python的同伴问题,怎么解决

在浏览器中访问该网站时会弹出证书不受信任,但是忽略仍可继续访问
但当使用Python登录时就会抛出_ssl.c:645错误,不能读取页面。
之前在做Android开发用Jsoup访问该站时也会有问题,当时的解决办法是写一个方法直接信任所有Https的安全证书,就在想python是不是也是可以这样做。
经过一番研究发现,只要忽略就行啦
很简单
import ssl

ssl._create_default_https_context = ssl._create_unverified_context123

⑺ 如何用 Python 解析 ssl 证书文件

PyOpenSSL

OpenSSL.SSL.Connection()
get_peer_certificate()
get_peer_cert_chain()

⑻ 如何实现python接口,的https

今天写代码时碰到一个问题,花了几个小时的时间google,基本上把google搜索的前几页内容都一一看了下,问题最终是解决了,不过过程挺曲折的,所以把这个过程记下来以便以后参考之。
原因是以下一段代码引起的:
?

12

import urllib2urllib2.urlopen('https://xxxx.com')

本来这段代码很简单的,就是请求一个https的连接,可是报以下错误:
?

1

urllib2.URLError:

第一反应是https证书问题产生的,如是以'python ssl' 为关键字google后,看到大家都在用'requests'这个python组件做http请求客户端,就像java里面的httpclient组件一样,如果安装完request包后,改成如下代码:
?

12

import requestsrequests.get('https://xxx.com')

还是报以下错误:
?

1

requests.exceptions.SSLError:
[Errno 1] _ssl.c:504: error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)

可以看出来,用requests和urllib2报的错误信息是一样,可见它们都是基于相同的底层api操作的,比如基于TLS的socket连接。到这里的时候我怀疑这个问题不是python代码写的有问题,可能是操作系统级别的设置错了。如下直接在shell客户端运行如下测试脚本
?

1

wget
https://xxx.com

果然报如下错误:
?

12

OpenSSL:
error:140773E8:SSL routines:SSL23_GET_SERVER_HELLO:reason(1000)无法建立
SSL 连接。

到这里我怀疑是openssl安装有问题,更新到最新版本后还是一样,然后在浏览器里访问是可以的,所以应该不是openssl有问题。继续google.......,就发现有人也遇到过这种问题,说是连接SSL服务器时SSL的版本不对,如是用如下代码测试不同的SSL版本,看是不是这个问题:
?

12345

curl
-1 https://xxx.com curl
-2 https://xxx.com curl
-3 https://xxx.com

分别用上面的三句脚本去测试连接情况,发现第三种可以连接正常(-1,2,3,数字分别代码tlsv1,sslv2,sslv3三个不同的SSL版本)。说明这个https连接所在的服务器是基于SSLV3版本的。找到的问题,就很容易知道怎么改写python代码了。
?

123456789

class MyAdapter(HTTPAdapter): def init_poolmanager(self,
connections, maxsize): self.poolmanager= PoolManager(num_pools=connections, maxsize=maxsize, ssl_version=ssl.PROTOCOL_SSLv3) s= requests.Session()s.mount('https://',
MyAdapter())#所有的https连接都用ssl.PROTOCOL_SSLV3去连接s.get('https://xxx.com')

urllib2实现:
?#
custom HTTPS opener, banner's oracle 10g server supports SSLv3 onlyimport httplib,
ssl, urllib2, socketclass HTTPSConnectionV3(httplib.HTTPSConnection): def __init__(self,*args,**kwargs): httplib.HTTPSConnection.__init__(self,*args,**kwargs) def connect(self): sock= socket.create_connection((self.host,self.port),self.timeout) if self._tunnel_host: self.sock= sock self._tunnel() try: self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv3) except ssl.SSLError,
e: print("Trying
SSLv3.") self.sock= ssl.wrap_socket(sock,self.key_file,self.cert_file,
ssl_version=ssl.PROTOCOL_SSLv23) class HTTPSHandlerV3(urllib2.HTTPSHandler): def https_open(self,
req): return self.do_open(HTTPSConnectionV3,
req)#
install openerurllib2.install_opener(urllib2.build_opener(HTTPSHandlerV3())) if __name__== "__main__": r= urllib2.urlopen("htANPROD1/bwskfcls.P_GetCrse") print(r.read())

可以看到这两种方案的原理都是一样,就是自定义连接处理器,改变连接时ssl的版本号。

⑼ 如何验证在Python SSL证书

最简单的方式是使用python调用openssl命令来验证

import os

os.system('openssl verify -CAfile ../ca-cert.pem bob.cert')
如果解决了您的问题请采纳!
如果未解决请继续追问!

⑽ Python爬取登录界面,SSL 证书错误,如图,这个这怎么解决,请给出具体解决方案,谢谢

SSL证书,通常原因:使用非信任证书或非安全机构签发的证书,证书没有CA根服务不被信任,解决办法登陆签发机构办法信任证书,重新安装或者替换之前的证书就可以了:网页链接

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:431
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:536
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:146
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:232
java驼峰 发布:2025-02-02 09:13:26 浏览:651
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:532
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726