gpt4 book ai didi

python - Django : Fetch XML, 中的 urllib2/pycurl 检查 HTTP 状态,检查 HTTPS 连接

转载 作者:行者123 更新时间:2023-11-30 23:47:05 29 4
gpt4 key购买 nike

我需要在 Django 中进行 API 调用(某种形式),作为我们所需的自定义身份验证系统的一部分。用户名和密码通过 SSL 发送到特定 URL(对这些参数使用 GET),响应应该是 HTTP 200“OK”响应,其正文包含带有用户信息的 XML。

如果身份验证不成功,它将返回 HTTP 401“未经授权”响应。

出于安全原因,我需要检查:

  1. 请求是通过 HTTPS 连接发送的
  2. 服务器证书的公钥与预期值匹配(我使用“证书固定”来防御损坏的 CA)

在 python/django 中使用 pycurl/urllib2 或任何其他方法可以实现这一点吗?

最佳答案

使用M2Crypto :

from M2Crypto import SSL
ctx = SSL.Context('sslv3')
ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth=9)
if ctx.load_verify_locations('ca.pem') != 1:
raise Exception('No CA certs')

c = SSL.Connection(ctx)
c.connect(('www.google.com', 443)) # automatically checks cert matches host
c.send('GET / \n')
c.close()

使用urllib2_ssl (不言而喻,但要明确:使用它需要您自担风险):

import urllib2, urllib2_ssl

opener = urllib2.build_opener(urllib2_ssl.HTTPSHandler(ca_certs='ca.pem'))
xml = opener.open('https://example.com/').read()

相关:Making HTTPS Requests secure in Python .

使用pycurl :

c = pycurl.Curl()
c.setopt(pycurl.URL, "https://example.com?param1=val1&param2=val2")
c.setopt(pycurl.HTTPGET, 1)
c.setopt(pycurl.CAINFO, 'ca.pem')
c.setopt(pycurl.SSL_VERIFYPEER, 1)
c.setopt(pycurl.SSL_VERIFYHOST, 2)
c.setopt(pycurl.SSLVERSION, 3)
c.setopt(pycurl.NOBODY, 1)
c.setopt(pycurl.NOSIGNAL, 1)
c.perform()
c.close()

要实现“证书固定”,请为不同的域提供不同的'ca.pem'

关于python - Django : Fetch XML, 中的 urllib2/pycurl 检查 HTTP 状态,检查 HTTPS 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8497079/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com