实现TLS身份验证-包含简单客户端证书CA

tlsauth的Python项目详细描述


*tlsauth

这是一个简单的示例,如何为您的在线服务设置tls证书身份验证。该示例基于nginx和wsgi,但
也应该与php的fcgi后端一起工作。


使用tlsauth,您可以基于证书而不是密码对用户进行身份验证。实际上,您不必存储
用户名、电子邮件地址和nick,它们都包含在由
用户存储和提供的客户端证书中。您可以确定,除非您的签名密钥被泄露,否则除了您之外,没有人可以创建有效的证书。这样就不需要
记住密码,并且禁止使用密码暴力。使用
nginx,您甚至可以显示完全不同的内容,这取决于
请求是否经过身份验证,例如将未经身份验证的用户路由到
静态html,而经过身份验证的用户可以访问
一些动态内容。

它提供了所有必要的基本工具,使这个麻烦免费。您的
用户只需办理注册手续,即可享受您所有服务的无缝单点登录,再也不需要
密码。

**ca和https服务安装
**sh
./tlsauth.py sub ca createca http://localhost/client-crl.pem"hostname client ca"email@example.com根ca
server.key
相信这把钥匙的人。您需要在1年内使用此密钥,当您需要
续订客户端CA证书时(默认情况下,此密钥仅在
一年内有效!)
+begin_src sh
mv root ca/private/root.key<;private and save location>;
+end_src
**设置nginx以提供
+begin_src sh
服务器{
侦听443;
ssl on;
服务器名localhost;

ssl_u证书<;路径>;/tlsauth/server.cert;
ssl_certificate_key<;pathto>;/tlsauth/server.key;
ssl_client_certificate<;pathto>;/tlsauth/sub-ca/public/root.pem;
ssl_verify_client可选;

location/{
包括uwsgi参数;
uwsgi param verified$ssl_client_verify;
uwsgi param dn$ssl_client_dn;
($ssl_client戋u verify="success"){
uwsgi戋pass 127.0.0.1:8080;
}
}
"dn"
相应地设置变量。
**webserver demo
有一个捆绑的demo,试一试:
***设置uwsgi
;+begin _src-sh
编辑flask demo/tlsdmo-wsgi.py
;+end _src
***安装python依赖项
;+begin src-sh
virtualenv--distribute env
source-env/bin/activat
pip安装flask-uwsgi
/>;+end _src
****运行flask应用程序
*运行flask>+开始sh
basedir=$pwd
env/bin/uwsgi--socket 127.0.0.1:8080--chdir$basedir/flask demo-p p$basedir-w tlsdemo_wsgi-p 1--virtualenv$basedir/env
r客户端证书。
***创建一个客户端证书
在这种情况下,您和您都是,但在正常情况下,此步骤是由在注册过程中将此CSR文件发送到
站点的任意
用户完成的。

store user.key away something safe offline,稍后您将再次需要它。
**ca向用户签名cert signing request
作为
便利功能,根ca证书也应发送给
用户,所以他也可以在他的ca存储中导入这个文件。
**create pkcs 12 cert for your browser
使用从ca返回的证书,我们将其与
密钥部分一起转换为pkcs 12
begin_src sh
./tlsauth.py root ca p12 joe.key<;joe.cert>;joe.p12
使用菜单打开"首选项"对话框。
2.选择高级工具栏图标
3。单击"查看证书"按钮
4。在"权限"选项卡上,单击导入按钮并导入根ca证书(这必须由ca提供给您)。
5。在"Your certificates"(您的证书)选项卡上,单击"Import"(导入)按钮并加载文件"user.cert.p12"


如果一切正常,则新证书应显示在
"Your certificates"(您的证书)选项卡下
**安全密钥
将私钥再次与pkcs12一起存储在joe.key中地点(可能是你的后援?),如果
重新安装浏览器,则要将user.cert.p12重新导入该浏览器。


如果现在使用此Firefox浏览https://localhost,则Flask
应用程序应报告您的可分辨名称。如果您使用另一个缺少此
证书的浏览器浏览到此位置,您可能会看到默认的nginx安装
html页面。
**python用法
请参阅test.py
**更改
**v0.4
修复了危险暴露的根ca密钥,通过引入一个子ca
仅用于对客户端身份验证密钥进行签名,从而在根ca
受损的情况下消除了mitm攻击的机会。

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

推荐PyPI第三方库


热门话题
当使用RequestDispatcher时,servlets Java最终没有被调用   java生成对具有可变参数数的方法的调用   java如何使用select子句中的参数化列映射iBATIS的查询?   java无法创建类型为org的插件。阿帕奇。登录中。log4j。果心阿佩德。元素RollingFile的RollingFileAppender   java当子实体和父实体之间存在OneTONE JPA关系时,是否可以将其与父实体一起持久化?   Android上的java Facebook集成fbconnect断开链接   获取方法调用方的java机制   从列表创建Oracle阵列时出现java问题   添加和检索元素的ArrayList的java ArrayList   在java中从字符串中删除无效的XML字符   java如何构建完整生成的maven模块   java如何准确地改变播放所有分辨率midi文件的速度?   shell javac:无效标志:/src/中位_度。ubuntu中的java   java使用从其他类的方法检索到的信息