Web服务在短时间内自动签署证书

anchor的Python项目详细描述


锚定图片::https://img.shields.io/pypi/v/anchor.svg
:目标:https://pypi.python.org/pypi/anchor/
:alt:latest version

…图片::https://img.shields.io/pypi/pyversions/anchor.svg
:目标:https://pypi.python.org/pypi/anchor/
:alt:python版本

…图片::https://img.shields.io/pypi/format/anchor.svg
:目标:https://pypi.python.org/pypi/anchor/
:alt:format

……图片::https://img.shields.io/badge/license apache%202 blue.svg
:目标:https://git.openstack.org/cgit/openstack/anchor/plain/license
:alt:license


anchor是一种临时的pki服务,基于特定条件,
自动验证CSR并为客户端签名证书。
有效期可以在配置文件中设置,并具有小时分辨率。


不再被任何对等方信任。不幸的是,研究已经证明两种典型的撤销方法(证书撤销列表和在线证书状态协议)都存在使其不可靠的故障。尤其是在试图利用web浏览器软件之外的pki时。


通过使用短生命周期证书锚引入了"被动撤销"的概念。通过颁发使用寿命
以小时为单位的证书,可以通过不重新向客户颁发
证书来实现撤销。


使用锚而不是手动长期证书的好处是:

*快速证书撤销/旋转
*始终经过测试证书更新机制(每日使用)
*与CertMonger轻松集成以重新启动服务
*只有在验证通过时才对证书进行签名
*签名证书遵循一致的过程

安装
===


源代码,需要存在以下系统依赖项:

*python 2.7
*python(开发文件)
*libffi(开发文件)
*libssl(开发文件)

,锚可以通过以下三种方式之一安装:python虚拟环境中的本地开发实例、docker容器中的本地生产实例或测试实例。source.venv/bin/activate&;pip install.


要在生产环境中安装,请安装一个经过修改的系统包,
或在系统中全局安装:



运行服务
==它需要通过"pecan"应用服务器启动。唯一额外的参数是一个配置文件:



对于开发,可以使用一个附加的"--reload"参数。它将导致服务在每次更改源文件时重新加载,但是它需要安装一个额外的"watchdog"python模块。


在默认配置中,锚定将在本地网络接口上的端口
5016上等待Web请求。这可以在"config.py"
文件中进行调整。

准备测试环境
=======


可以执行以下操作来创建测试CA。然后可以使用测试证书对新证书进行签名。


openssl req-out ca/root-ca.crt-keyout ca/root-ca-unwrapped.key\
-newkey rsa:4096-subj"/cn=anchor test ca"-nodes-x509-days 365
chmod0400 CA/根CA未打包。密钥

下一步,可能会生成新的证书请求:

-keyout anchor test.example.com.key-newkey rsa:2048\
-subj"/cn=anchor test.example.com"

编码=pem\
-f'csr=<;anchor test.example.com.csr'


这将导致在"certs"
目录中创建签名请求。


docker test environment
======
我们提供了一个dockerfile,可以用来构建一个容器,该容器将运行anchor

说明要求读者已经安装了一个工作的docker
。Docker不应该*用于任何生产环境中的锚点服务。


假设您已经在锚点目录中,则构建一个名为"锚点"的容器来运行锚点服务,在回购协议中进行的任何本地更改


docker build-t anchor。


要在容器中启动服务并在端口5016上服务anchor:


docker run-p 5016:5016 anchor

应在端口5016上访问anchor应用程序。如果
在Linux上本机运行Docker,则在本地主机上为5016
(127.0.0.1)。如果你在微软视窗或苹果操作系统下运行Docker,它将在Docker机器上运行。要查找docker machine
IP地址,请运行:



在生产中运行锚点
======


锚点不应直接暴露在网络中。它是通过
应用服务器(pecan)运行的,并没有您通常期望的http代理提供的所有功能,例如处理
故意减慢的连接或使用多个工作线程。锚可以
但是可以在生产中使用更好的前端运行。

要使用uwsgi运行锚,可以使用以下命令:

uwsgi--http socket:5016--venv path/to/venv--pecan config.py-p 4

要处理自定义头、速率限制或源过滤,可能需要一个完整的http代理,比如nginx。但是,这超出了
锚定项目的范围。您可以在
[pecan文档](http://pecan.readthedocs.org/en/latest/deployment.html)中阅读有关生产部署的更多信息。使用apparmor配置文件作为锚是一个好主意,可以防止利用锚使用的本地库(例如openssl)进行攻击。这可以通过示例配置文件完成,您可以在"tools/apparmor.anchor"文件中找到这些配置文件。根据部署位置的不同,需要使用正确的路径来检查和更新使用的文件。



它们是在
`config.json'中配置的,示例配置包括其中的一些。


每个验证器都有一个选项字典,提供特定的匹配条件。


当前可用的验证器是:

*`common\u name`确保cn与"允许的"域中的名称或"允许的"网络中的


*"替代名称"确保替代名称与"允许的"域中的一个名称匹配


*"替代名称"确保替代名称与"允许的"域中的一个名称或IP范围匹配`允许的"网络"

*"黑名单"名称确保cn和备选名称不包含任何已配置的"域"的

*"服务器组"确保请求者包含在
"组前缀"中的组

*"扩展"确保只有"允许的扩展"存在于
请求中

*`key_usage`确保仅为
证书请求'allowed_usage'。/>
*`ca_status`确保请求不需要ca标志

*`source_cidrs`确保请求来自
`cidrs`


验证器的配置项可能与
示例配置中的配置项类似:

"密钥用法":{
"允许使用":[
"数字签名"、
"密钥加密"、
"不可抵赖"
]
}


authentication
==


anchor可以使用以下身份验证模块之一:static,
keystone,ldap.

静态:用户名和密码出现在"config.json"中。此模式
应仅用于开发和测试。

"auth":{
"static":{
"secret":"simplepassword",
"user":"myusername"
}
}


keystone:username被忽略,但是密码是在
配置的密钥库位置有效的令牌。

"auth":{
"keystone":{
"url":"https://keystone.example.com"
}
}
}

ldap:用户名和密码用于绑定到
配置域中的ldap用户。"server-group"过滤器的用户组是从"memberof"属性中检索的,用于搜索
`(samaccountname=username@domain)。搜索在配置的
基中完成。

"auth":{
"ldap":{
"host":"ldap.example.com",
"base":"ou=users,dc=example,dc=com",
"domain":"example.com"
"port":636,
"ssl":true
}
}



signing backends
==

anchor允许使用可配置的签名后端。目前它提供了两个
实现:一个基于cryptography.io("anchor"),另一个使用pkcs 11
库("pkcs11")。第一个在示例配置中使用。其他后端
可能有额外的依赖项:pkcs11需要pykcs11模块,默认情况下
锚不需要该模块。


如果将"output_path"设置为任何字符串,则生成的证书将存储在本地。这不取决于配置的后端。


后端可以指定自己的选项-有关特定列表,请参阅后端
文档。默认后端采用
以下选项:

*`cert_path`:可以找到本地CA证书的路径

*`key_path`:该证书的密钥路径

*`signing_hash`:生成签名时要使用的哈希方法

*`valid_hours`:签名证书对默认后端的示例配置有效的小时数:


"ca":{
"backend":"anchor"
"cert路径":"ca/root-ca.crt",
"key路径":"ca/root-ca unwrapped.key",
"output路径":"certs",
"signing_hash":"sha256",
"valid_hours":24
}


也可以创建其他后端。有关详细信息,请参阅
文档。


fixups
==


Anchor可以修改提交的CSR,以便强制执行某些规则,
删除不推荐的元素,或者只添加信息。提交的CSR可能会被修改或完全重做。修复程序是从"anchor.fixups"
命名空间加载的,可以采用与验证器一样的参数。


报告错误和参与错误和参与错误报告和参与错误报告和参与错误报告,请检查参与错误报告和参与错误的.rst
文件。

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

推荐PyPI第三方库


热门话题
java依赖组织。缺少json:json:jar   从命令行Linux vs Windows调用Java   java“(BluetoothManager)”周围的这对括号是做什么的?   java在Spring中使用哪种传播?   java如何检查一个数字是否以任何顺序包含自身?   java如何在yotaphone上锁定背面屏幕?   无作用域bean的JavaCDI注入   angularjs我希望构建实时数据,将客户端传递到服务器,而不使用JAVA中的WebSocket   不显示对象的java动态JPanel   java在Flex中动态更改列系列显示名称   java Arduino未正确发送整数   测试服务器中的java Apache CXF客户端错误,需要服务器名称指示(SNI)   在GUI中按下按钮的java显示字符串方法   java如何在JSON反序列化期间将引用转换为实例   java类型安全:未选中的从对象强制转换   pac4j(多个提供商)的java SSO身份验证令牌吊销问题   java使用sbt文件指定主类的路径并包含库   运行应用程序时发生java UnsatifiedPendencyException异常