Skip to content
This repository has been archived by the owner on Jan 29, 2019. It is now read-only.

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

Open
microcai opened this issue Nov 6, 2014 · 21 comments
Open

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

microcai opened this issue Nov 6, 2014 · 21 comments
Assignees

Comments

@microcai
Copy link
Member

microcai commented Nov 6, 2014

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

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

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

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

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

@lovey599
Copy link
Member

lovey599 commented Nov 6, 2014

我建议用html5相关的技术

  • 用bootstarp做框架。
  • 用nojs来编写前端js代码
  • 通过websocket与后端c++程序通信

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

@lovey599
Copy link
Member

lovey599 commented Nov 6, 2014

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

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

@peterfuture
Copy link

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

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

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

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

@lovey599
Copy link
Member

lovey599 commented Nov 6, 2014

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

@peterfuture
Copy link

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

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

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

@peterfuture
Copy link

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

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

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

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

@peterfuture
Copy link

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

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

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

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

@whyb
Copy link
Member

whyb commented Nov 6, 2014

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

@peterfuture
Copy link

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

@whyb
Copy link
Member

whyb commented Nov 6, 2014

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

@peterfuture
Copy link

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

@whyb
Copy link
Member

whyb commented Nov 6, 2014

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

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

@microcai
Copy link
Member Author

microcai commented Nov 6, 2014

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

@mrshelly
Copy link

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants