执行acme而不是转储客户机的基本python服务器

acme-mgmtserver的Python项目详细描述


Acme管理服务器[生成状态](https://img.shields.io/travis/mswart/acme-mgmtserver/master.svg)(https://travis-ci.org/mswart/acme-mgmtserver)[![构建状态](https://img.shields.io/pypi/v/acme mgmtserver.svg)](https://pypi.python.org/pypi/acme-mgmtserver)[![python版本](https://img.shields.io/pypi/pyversions/acme mgmtserver.svg)(https://pypi.python.org/pypi/acme-mgmtserver)[![pypi status](https://img.shields.io/pypi/status/acme mgmtserver.svg)](https://pypi.python.org/pypi/acme mgmtserver)



[letsencrypt](https://letsencrypt.org)支持通过acme通信颁发免费证书-自动证书管理评估协议。

此工具是另一个acme客户端…但作为客户机/服务器模型。



\限制受损系统安全风险的网段。
***只有服务器需要所有acme依赖项**:客户端只需要像openssl这样的ssl工具和像wget或curl这样的http客户端,没有python,没有构建工具。带有python acme及其依赖项(pyopenssl,pyasn.1,…)的python只需要用于服务器。
***支持分布式web服务器**:所有`.这使得在以分布式或故障转移方式使用多个Web服务器时,通过转发所有"众所周知的/Acme挑战"请求,可以很容易地验证域。
***只有服务器需要Acme帐户信息**:这与安全无关,但只有acme管理服务器需要访问acme服务器(如letsencrypt)的帐户信息/密钥。
**caching csr signs**:将缓存csr返回的签名证书,直到证书接近过期(默认为两周)。如果两台机器都手动共享一个密钥和CSR,并且它们都重用这两台机器,它们将从ACmems获得相同的证书。



\http01


Acme管理服务器-这是一个先决条件,此工具不会检查/强制/配置此服务器。



}
服务器{

要在所有上游服务器上支持多个acme管理服务器检查质询:
proxy_next_upstream error timeout http_404;
}

}
`````

这将所有acme质询传递给管理服务器。` proxy_next_upstream http_404;`可用于支持多个acme管理服务器并在所有服务器上搜索响应。

几乎没有什么遗漏。如果您有此挑战类型的使用方法,请随时打开PR或与我联系。


\dns01

acmems可以为DNS服务器提供所需的"txt"记录,以便通过"dns01"挑战验证域名。DNS服务器将根据DNS更新进行更新。当前没有实现的更新的安全性。我们希望由名称服务器管理的区域名是二级域名(如"example.org")。




` python acme和pyopenssl在2015年第4季度的新版本中是必需的。时间到了备份所有需要的依赖项。因此,我目前只在自己的[ppa]中维护ubuntu 16.04lts-xenial的软件包(https://launchpad.net/~malte.swart/+archive/ubuntu/acme)。依赖项被后端口到"jessie backports",因此ppa也应该与"jessie backports"一起使用。

要使用"dns01"challenge"python acme">;=0.9是必需的。ppa包含一个后端口版本。

关键支持。主要部分是用于定义帐户目录、侦听http接口信息以及允许客户端为哪些域请求证书的配置的块;建议首先对acme服务器进行测试登台系统
acme server=https://acme staging.api.letsencrypt.org/directory
account dir;包含
account.pem-根据acme服务器识别的私钥
registration.json-作为json转储的注册资源
dir=/etc/acmems/account/

[mgmt]
客户端需要与此对话
mgmt=192.0.2.13:1313
csr的最大大小(字节)
max size=4k
验证块
[验证"http"]
必须首先定义挑战类型!
type=http01
监听http质询检查请求(例如来自nginx的请求)
listener=192.0.2.80:1380
listener=198.51.100.80:1380
listener=[fe80::80%eth0]:1380

[验证"dns"]
质询类型必须首先定义!
type=dns01 dns update
现在需要更新哪个名称服务器
dns server=192.0.2.53
存储
类型=无

[存储"文件"]
磁盘缓存,必须为守护进程写入目录
type=file
directory=/etc/acmems/storage
CSR必须满足所有列出的身份验证方法,并且必须
仅包含列出的域(检查全局)
[验证"邮件"]
TCP连接必须来自其中一个IP
IP=192.0.2.0/24
IP=198.51.100.21
domain=mail.example.org
domain=mail.example.com

附加的身份验证块
[auth"ext"]
ip=198.51.100.128/28
domain=*.test.example.org

=文件
ip=198.51.100.21
hmac_type=sha256
hmac_key=a1yp67armnf3cbrecyjhdb035
domain=mail?.example.org
domain=mail.example.com
```



\registration

>可执行的"acme register"支持在acme服务器上注册。这不会自动完成,您必须在首次使用服务器之前手动调用它。

bin/acme register--gen key--register--email test@example.org configs/integration.ini
生成私钥…完成
初始化acme客户端…完成
注册…完成
您需要在http://127.0.0.1:4001/terms/v1接受服务条款
>;bin/acme register--accept-terms-of-service=http://127.0.0.1:4001/terms/v1-configs/integration.ini
加载私钥…完成
初始化acme客户端…已完成刷新当前注册…完成
您需要在http://127.0.0.1:4001/terms/v1接受服务条款
在http://127.0.0.1:4001/terms/v1接受TOS…完成
``




openssl genrsa 4096>;domain.key

domain-201512.csr

openssl req-new-sha256-key domain.key-subj"/cn=example.org"-requexts san-config<;(cat/etc/ssl/openssl.cnf<;(printf"[san]\nsubjectaltname=dns:example.org,dns:www.example.org")>;域-201512.csr

#上传CSR,不带符号
wget--post file=domain-201512.csr http://acmese:1313/sign>;domain-201512.pem
````



http interface


` content length` header是必需的,当前不计算'content type'。

可能看起来像:

````
post/sign http/1.1
主机:127.0.0.1:4005
内容长度:1586
身份验证:hmac name=sha256,散列=47D5066525A214C759300D884BDD19D8F461A AD24A2A0B7B705CAEE6C912228

----开始证书请求书——
Miiewjcccakicacacacaqaftembega1eawwkz28uzhhhh0dc5kzztccaiwqyjkozihvcn
aqebbqgadipadccagcagaggibaowxle7/deo7l/h9o14w14w2ndsokmzphxcfosznk
qqhuz
awctamqqqqqqhuzxdl41ccqqwwwjqqqwwwjqqqqqqwwwwjcccacacaggggggggggggggqibaowxle7/deo7l/deo7l/h7l/h9o14w14w2酒杯
ktgrx4工作地点:6号F/P8WuyozossN5/XuOXCQ44AEJCFEV6JHQZL4BDV3EDQ
新罕甘地6e0ov/WXHXQXKRMSP7In99SCVTWCoi8kuf28/穆ebsdruci
FHCCSGU+2+99QAN70FL7O+VMZWBGr3GJ5+QH92OH6UXSS+AAMYYLPP1V
3Cri1B2B1B2B2B2B2746QCMMMMMMMMMMmNXXM49WWWW497MMMMMMMMMmXM49KWWWW6KW6KW6KW6KW6KWE4LVGJ4JL2NFFYGY
低IIIuOvrotevJLMD2RIGWZ85MDXGHKFBMGMGBMBMSUOLM1AD4YY7WBSVTPT
AOSJBUG6NGA77YJBZ8EAF0FEFH1+3PPSHSHSHSHSHEZZZZ8BQQ8BQQ8BQQ8BQ8BYBYBYBYBYBZ8BYBYBYBZ6NGG6NGA6NGBJJYDYDJYD+KTMBH9OCSEMQ8SQ8S74GRPDV0L/WLFROII2BYMDNRYBY22 RJMPSQSIA
3KGZZZKKW3KWGZKWZKZKZKZKZKZKWZKZKZKWZKWZKWZ8BYBHKIG9W0BaqsfaaoCageAOK5SQ1DTR8SX酒店B/B/HZ bhabhaib+B/HZ
F80 xyPMBLRLPFFOFOFOFOBLLW0A9M3VQAHN+IPVTKWGR9C2HI+E3VFLTH39I+ML1
U6I2KTiN1YB5/ARPQXCMT/29C31LPPVR3FFDKKJoa78国际+3BB7QWWW7QW3C5QJRZ
ZKJXMF5C7IQTWHP18IS0ZW2JN9I0JW2JW9I0I0YYYUYUYUYUURPU2VLWLLQ
xbr/>XM0WPJ1WWWWZLXLXLXLXLXNXgmniwgsdkvn8inurfdzcpy1dulrzxmoeris
23xu5d0DTFIPAMFT1YZACF45NZLCCBNYUBLK21+tabNWWallM2UZ1RGZUK8H94X
kehjununfVTMQ7DB/Y7Y7KJYG20ROVUNIV/RuzTC8PXCS3SV8H93ISRKJ1ELMO/br/>HVJ45TyryJC1HL4YB30YJGN32TD48MIG5SLOC+V60CGWWSxFXC4ZV9
CXZPBR5AEOLJWBUJWWJWBUJV30Y30/MQJJJJJJGN32TD48 MITGGGYGYGYK55SLOC+V60CGWWWWSSxFXC4ZRC4Zrud9

JTC+Fnojbcxddw+SJPI3HI/BZV3QABMJS2wcyvgin//sx5iuow5r6fjecffqhcdze
3fyid2wh6n4xcff41bove7ga+tjmshzswwzqpswwu4brribercbwwbgk/t9vvvvv8
a3ilv6ys/4soahratla=
----端证书申请——
````







//
//;服务器响应




>
**200**:csr/>200:csr/>200已签名。响应体包含PEM格式的证书和中间证书。
**403**:签名被拒绝,请查看您的身份验证块/身份验证方法;是否缺少"authentication""头"?
**413**:CSR请求太长。您可以增加"最大大小"设置。
**415**:无法分析CSR。
**500**:内部异常-查看日志并报告错误。




运行测试需要"py.test"。

标记为"boulder"的测试需要本地acme服务器监听"127.0.0.1:4000",将所有http01测试挑战发送到"127.0.0.1:5002"。要安装boulder,请查看[boulder自述文件](https://github.com/letsencrypt/boulder)和/或准备travis安装boulder的脚本(`tests/scripts`)。




分叉
2.创建您的功能分支(git checkout-b my new feature)
3。为您的功能添加测试。
4.添加您的功能。
5.提交更改(git commit-am'add some feature')
6.推到分支(git push origin我的新功能)
7。创建新的拉取请求

\license



copyright(c)2015-2016,Malte Swart

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

推荐PyPI第三方库


热门话题
打开OrientDB数据库时发生java错误   java Hibernate合并函数偶尔会导致主键冲突   java如何在SourceTransferndexit将msg放入MQ   JavaEclipse不正确地导入项目   Java中的数据结构,带有删除节点后所有节点的操作   java创建zip存档时,什么构成重复条目   java如何计算所有值并比较每个对象?   java Threadflipbegin在Google Pixel 3上被阻止55秒   java Eclipse Hibernate:未找到适合jdbc的驱动程序:mysql://localhost:3306/hibernatedb   java Quartz计划程序未运行   java如何从junit扩展向@Test返回值?   java忽略搜索字段中的大小写   java如何从图库中选取图像,裁剪并保存在数据分区中   java CST/CDT时区更改问题   url从Java读取Twitter页面   java是否要在每个列表项中打开WebView单击?   比较输入值的Java布尔逻辑初学者   如何在服务器端使用java从客户端的HTTP POST请求接收和解析JSON对象   javascript在一个get请求中,如何启动程序,然后使用另一个get请求停止它?