使用http签名草案规范的安全http请求签名

httpsig的Python项目详细描述


httpsig
==


…图片::https://travis-ci.org/ahknight/httpsig.svg?branch=master
:目标:https://travis ci.org/ahknight/httpsig

…图片::https://travis-ci.org/ahknight/httpsig.svg?branch=development
:target:https://travis ci.org/ahknight/httpsig


根据ietf http签名规范(草案8)使用安全签名对http请求进行签名。这是原始模块的一个分支,完全支持rsa和hmac方案,并对这两个方案进行单元测试,以证明它们是有效的。它正在生产中使用,并正在积极开发中。

有关签名方案的详细信息,请参阅原始项目、原始python模块、原始规范和"当前ietf草稿"。

_项目:https://github.com/joyent/node http signature
…_模块:https://github.com/zzsnzmn/py http签名
…_规范:https://github.com/joyent/node-http-signature/blob/master/http-signing.md
…_`当前ietf草稿`:https://datatracker.ietf.org/doc/draft cavage http signatures/
。_`草案8`:http://tools.ietf.org/html/draft-cavage-http-signatures-08


要求
—————————————————————————————————————————————————————————————————————————————————————————————————————————————_ pycryptoDome:https://pypi.python.org/pypi/pycryptoDome
。_请求:https://pypi.python.org/pypi/requests

完成

使用
----


真正的文档即将提供,但现在您应该开始使用它了。

对于简单的原始签名:

代码::python


secret=open('rsa_private.pem','rb').read()

sig_maker.sign('hello world!')

一般用于web框架:

…代码::python


secret=b"some big secret"

signed_headers=hs.sign({"date":"tue,1月1日"2014 01:01:01 GMT,"host":"example.com"},method="get",path="/api/1/object/1")


用于请求:

……代码::python

import json
来自httpsig.requests的import请求
secret=secret)
z=requests.get('https://api.example.com/path/to/endpoint',
auth=auth,headers={'x-api-version':'~6.5'})


类初始化参数
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

请注意,键和机密应该是字节对象。将尝试转换它们,但如果转换失败,则将引发异常。

…code::python

httpsig.signer(secret,algorithm='rsa-sha256')

`` secret``对于rsa签名,是包含专用rsa pem的字符串。对于hmac,它是一个秘密密码。
``算法``是六个允许的签名之一:``rsa-sha1``、``rsa-sha256`、``rsa-sha512`、``hmac-sha1`、``hmac-sha256`、
``hmac-sha512`。



……代码::python

httpsig.requests_auth.httpsignatureauth(key_id,secret,algorithm='rsa-sha256',headers=none)

``key_id``是服务器系统知道您的rsa签名或密码的标签。
``headers``是连接并用作签名对象的http头的列表。默认情况下,它是规范的最小值,即"date"http头。
``secret``和``algorithm``如上所述。


tests
----


to run tests::


或::

tox


已知限制
----


1。不支持同一标头的多个值。同名的新标题将覆盖上一个标题。可以用电子邮件包用于邮件头的集合替换caseinsensitivedict,以克服此限制。
2。不支持带有密码的密钥文件。这方面的需求一直是零,所以如果你愿意的话,公关将是一个很好的方法,让它进入。
3。草案2增加了对ecdsa-sha256的支持。这在pycryptodome中可用,但尚未添加到httpsig。欢迎使用prs。



许可证
---



此模块和原始模块均在麻省理工学院许可证下获得许可。



----


1.3.0(2019年11月28日)
----

*放宽pycryptodome要求(pr 14 bycveilleux)
*能够提供另一个类似于签名头的签名(rbignon提供的pr 15)
*修复了2;使signer.sign()公共化
*删除了python 3.3,添加了python 3.7。

1.2.0(2018年3月28日)
----

*切换到pycryptome而不是pycrypto(pr 11 byiandouglas)
*使用草案8中的测试数据更新测试,并验证它仍然通过。
*放弃了官方的python 3.2支持(pip放弃了它,因此无法正确测试)
*清理了代码,使其更像pep8。


1.1.2(2015年2月11日)
----


*HMAC验证现在是恒定时间。

1.1.1(2015年2月11日)
----

*(拉动)


1.1.0(2014年7月24日)
----


*将"(请求行)"更改为"(请求目标)"以符合草案3。

1.0.3(2014年7月9日)将默认签名算法统一到一个设置下。设置httpsig.sign.default_sign_算法会为以后的所有实例更改它。
*更好地处理无效参数。

1.0.2(2014年7月2日)
----


*确保将头视为ascii字符串。
*处理授权头中存在方法名后的垃圾(非密钥对)。

1.0.1(2014年7月-2002年7月)
~~~~~~~~~~~~~~~~~~~~~~~

*python 3支持(2.7+3.2-3.4)
*更新tox和travis ci配置以测试受支持的python版本。
*更新了自述文件。

1.0.0(2014年7月1日)针对http://tools.ietf.org/html/draft-cavage-http-signatures-02编写的
~~~~~~~~~~~~~~~~~~~~~
*添加了"setup.py test"和tox支持。
*为所有当前支持的算法添加了签名/验证单元测试。
*headersigner和headerverifier现在共享相同的代码消息生成逻辑。
*消息中的http方法现在大小写正确。
*解决了单元测试失败。
*更新了验证程序和头服务器,以处理验证rsa和hmac sig。
*更新了版本设置。
*更新了联系人/作者信息。
*删除了杂散密钥对在test dir中。
*删除了ssh代理支持。
*删除了从磁盘读取密钥文件的支持,因为如果在drf httpsig这样的服务器框架中使用,这是一个巨大的安全漏洞。


1.0b1(2014年6月23日)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*从请求行中删除了http版本,每个规范(断开向后兼容)。
*删除了丢失日期头的自动生成(确保客户端兼容)。



----

<0.2.0(未发布)
~~~~~~~~~~~~~~~~~~~~~~~~

*更新到新规范(与以前的版本)。
*处理"请求行"元头。
*允许secret是PEM编码的字符串。
*从规范中添加测试用例

<0.1.4(2012-10-03)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*现在将ssh重新合并到paramiko的帐户:这两个包都是可以接受的(但paramiko应该是理想情况下,>;=1.8.0)

0.1.3(2012-10-02)
~~~~~~~~~~~~~~~~~~~~

*停止ENAbling默认情况下"allow_agent"
*默认情况下停止要求"ssh"包--只有当"allow_agent=true"
*ssh agent周围的逻辑发生更改时才会导入:如果有一个密钥可用,不用担心任何其他身份验证方法
*更改了密钥文件使用的逻辑:如果解密失败,则提示输入密码
*错误修复:ssh代理如果找不到正确的密钥(谢谢,petervolpe),则会导致无意义的错误
*引入versioner.py



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Android应用程序中处理新活动时出现java NullPointerException   从PSV文件读取Java   在JavaSwing中将方法从一个类传递到另一个类   带有MongoDB错误的java Vertx ClassNotFoundException:com。mongodb。联系溪流工厂   在java中替换2D数组中的数字?   java Avro方案空布尔和双整数布尔的写并集   java导入组织。neo4j无法解决?   从另一个获取变量。使用反射的java文件   Java:以格式化字符串的形式返回具有非常不同的条目长度的2D数组   java客户端应用程序正在从IBMMQ接收不同格式的消息体   java在我的主循环中的步骤有问题   java如何正确安装来自sslforfree的证书。tomcat服务器上的com   java RecyclerView变更单永久   java如何获得屏幕的精确中间位置,即使调整了大小