avplayer / avim

IM for avplayer
http://avplayer.org/avim
29 stars 17 forks source link

CA 和证书管理的网站开发 #5

Open microcai opened 9 years ago

microcai commented 9 years ago

avim 需要使用证书认证用户,所以注册用户其实就是让我们的 CA 颁发证书。

那么我们的 CA 肯定需要有一个易用的 WEB 来和那么多用户沟通。

用户需要在页面上填写 个人信息和生成的公钥(可以让 avim 客户端生成,也可以用 openssl) 然后用户提交申请。

管理员审核后,签发客户端证书。

另外还需要验证电子邮件, 有必要的话要上传证件照片之类的。。。

lovey599 commented 9 years ago

我建议用html5相关的技术

microcai commented 9 years ago

后端是啥? 这个网站好像没有后端吧?

lovey599 commented 9 years ago

就是服务吕d端的处理程序啊,比如php脚本

microcai commented 9 years ago

服务器端就是个脚本吧,调用 openssl 签名一下。不过这样自动操作会不会导致 CA 太烂签发了?

peterfuture commented 9 years ago

本身申请签发证书是需要做的事情有(最基本的流程): 1 用户帐号申请 用户可以自由的设置自己的账户(格式: user@domain), 但需要到web上去审核,因为之前可能已经有其他用户先注册了这个账户

2 用户自己生成证书申请文件csr web上要有个用户指导手册, 方便制作

3 将csr文件以及用户名上传 等待avim root ca签发

因此, 由于用户不需要提供自己的私钥, 因此对用户是安全的, 由于公钥是可以公开的,因此服务器会保存一份证书,方便用户切换client端的时候可以再次下载。

lovey599 commented 9 years ago

服务端还是需要一些东西来处理的,不会只有个脚本

peterfuture commented 9 years ago

用啥技术制作网站 这个不需要在这里讨论吧 把要做什么讨论好就行了

microcai commented 9 years ago

我觉得 CA 也得分等级。可能我们不得不放弃 openssl 的签名机制。

openssl 可以用多个 CA 对同一个证书签名么?

peterfuture commented 9 years ago

csr首先是只有一个 ca签名应该都是针对 csr文件的, 这样多个ca签名会生成多个crt证书文件 我们的web只需要提供我们自己的证书就好吧 ,你觉得有啥隐患吗?

microcai commented 9 years ago

我希望就是有账户信任等级机制。 就是有的帐号只是电子邮件被验证了, 而有的帐号啊, CA 进行了实名认证。 这样就需要有2个 CA, 一个 ca 只签发普通证书,另一个签发实名认证的。类似 web ssl 里 EV 证书。

但是我希望用户是可以平滑升级,也就是不需要更改密钥。

microcai commented 9 years ago

还有,除了 CA , 用户也应该可以对其他用户的证书进行分布式的签名认证。 这样就需要一个证书可以附带多个 ca 的签名

peterfuture commented 9 years ago

对于账户信用升级的问题, 是没有问题的 比如按照如下分级: level1 : 只验证了邮箱 level2: 实名验证 这里需要有个level区分,举例来讲 比如level1 我们给的证书有效期是100天 而level2的有效期是 1095(三年) 那么由于本身网站是保存这用户当时提供的csr的,那么在用户实名并发起请求后,重新帮其生成一个level2的证书

这样要求client端可以链接我们的服务端进行证书的升级工作, 这样用户做的工作是比较少的 第一步: 实名认证 第二步: 发送level2证书申请 第三步: 收到 web确认后 可在client端更新证书

至于你说的第二个问题,你的问题是希望这一个证书可以作为多个网站的登录凭证对吧, 一个证书携带多个ca的签名, 这个具体能否实现以及如何实现需确认

microcai commented 9 years ago

似乎 openssl 生成的证书确实不能携带多个 ca 签名

whyb commented 9 years ago

@microcai @peterfuture @mrshelly @lovey599 那v0.1的网站主要目标应该就是: 1、一个介绍avim的静态页面,可能包含编译它或者使用它的简单介绍;后者内容暂时可以随便写,之后各个平台UI确定了再细写都行。 2、提供申请账户的页面(可以是邀请码模式或者是直接申请模式) a.需要用户提供E-mail b.提供用户名(用于验证username@avplayer.org,避免账户重复) c.聊天工具UI显示名称(昵称) d.用户的public key 暂时不做 e.实名验证暂时也不做 3、申请完毕后,看是由 管理员手动发信 还是 系统自动发信 到用户E-mail通知账户申请成功?

peterfuture commented 9 years ago

whyb, 基本是这样的 做的时候有个基本顺序, 静态页面发布后, 我们就出v0.1 后面你们直接进入CA部分的开发,不必等待client端 因为是独立的。还有就是上面的描述: Email就是用户名, 当然可以有昵称, 但Email就是domain的模式。 没必要搞两个,否则Email的重复性也要验证。

whyb commented 9 years ago

@microcai @peterfuture 不对呀,开始不是说,我们的router如果是avplayer.org的话,用户名如果是whyb,他的avim地址就应该是whyb@avplayer.org,而他的E-mail可能是gmail邮箱地址,这并不冲突?他依然可以选择使用whyb来登录或者是邮箱来登录? 你所说的:Email就是用户名, 当然可以有昵称, 但Email就是domain的模式。意思是说 如果我申请下来 ,我的avim地址就应该是像这样 whyb382@gmail.com@avplayer.org ?

peterfuture commented 9 years ago

whyb, 依据之前的讨论, Email与av地址是一一对应而又独立的。Email进行ca验证,而账户是AV地址来界定的。 希望能说清楚了。

whyb commented 9 years ago

@microcai @peterfuture @Jackarain @mrshelly @lovey599 因为服务器需要将用户的 pub key、Email、avim地址 一一对应,这样才能准确的登录,网站是提供用户新增数据源,而router server是需要读取这个数据库的user表。 网站的数据库 和 avim的router需要访问的数据库必须是同一个,所以我想这一块需要选择一天 大家讨论一下才行。

microcai commented 9 years ago

router 不读取 user 表,只要证书对,他就承认这个用户,无需读取数据库

microcai commented 9 years ago

这里强调一下。 avim 里,用户管理是 CA 的任务。而且 avrouter 是完全不会接触用户数据的。它只承认证书,只要证书对,就接受。 这个和通常意义的 IM 里,负责通信的服务器需要访问数据库以授权用户相比,先进的多。而且数据库不会成为线上服务器的通信瓶颈。因此 avrouer 是自成一体的,和 CA 之间的沟通渠道就是一张证书。

mrshelly commented 9 years ago

对,CA管理应该是独立于项目外的。好像有开源的CA中心管理系统