auth.startssl.com里使用了密钥认证登录,需要事先向浏览器中导入私钥,然后利用这个密钥来认证。这比口令认证安全得多。web上使用这种认证方式我还是第一次见。
这种接口叫什么名字?是怎么实现的?我可以用常用的web服务器实现吗?
1
xoxo 2015-01-11 00:38:12 +08:00
SSL双向认证, 好像必须CA才可以不装控件实现
|
2
NeoAtlantis 2015-01-11 00:45:52 +08:00
就是ssl要求客户端证书的情况。你可以配置服务器启动要求客户端证书。还可以要求客户端证书是通过哪个CA颁发的,比如你颁发(给服务器配置你的CA的证书),或者一个其他的CA(比如startssl签署的电子邮件的认证)颁发的。
|
3
NeoAtlantis 2015-01-11 00:47:05 +08:00
而且我认为这种认证虽然比口令安全,但是浏览器上的私钥如果没被好好加密,并不安全。比如你导入私钥到浏览器之后,每次使用的时候要输入主密码吗?没有的话私钥就是明文放着的。我建议配合一个密码登录。
|
4
azuis 2015-01-11 01:07:28 +08:00 via Android
其实支付宝数字证书也是一个原理啊。只不过装控件的时候强行给你装了他们的CA。如果你是CA就可以签发SSL 客户端证书用来认证。
|
6
vibbow 2015-01-11 02:02:28 +08:00
@NeoAtlantis 有种东西叫U盾...
|
7
xoxo 2015-01-11 02:34:42 +08:00
@vibbow 不可能. 证书如果不受信任, 怎么添加进浏览器个人证书区. 所以CA还是有必要的,否则你无法给你自己的用户随时随地签发证书。
|
9
vibbow 2015-01-11 03:01:36 +08:00
@xoxo 如果你用硬件数字证书的话,导入证书时可以同时导入证书链,也可以选择不导入证书链。
浏览器使用一个自签名的证书给服务器,是否信任这个证书是服务器的选择。 服务器可以要求这个客户端证书必须是由可信CA颁发的,也可以选择接受任何证书。 |
11
vibbow 2015-01-11 03:09:33 +08:00
|
12
NeoAtlantis 2015-01-11 03:40:59 +08:00 via Android
@vibbow u盾是干嘛的?
|
13
vibbow 2015-01-11 03:59:22 +08:00
|
14
NeoAtlantis 2015-01-11 06:27:55 +08:00
@vibbow 也就是说使用私钥进行的操作(解密或者签名)也必须在U盾中进行了?
|
15
vibbow 2015-01-11 06:38:47 +08:00
|
16
vibbow 2015-01-11 06:49:04 +08:00
@NeoAtlantis 我对具体实现的细节不是很了解。
但是感觉上是:是的。 |
17
0okmnbvcxzx 2015-01-11 07:01:20 +08:00 via Android
@NeoAtlantis Linux怎么处理的我不知道,但Windows应该是存储在用户配置里并且用用户密码有关的密钥加密的,如果你的电脑可能被人乱动你不会不设密码吧,一般这就够了。
@vibbow 总觉得支付宝是为了以它不标准的方式完成验证…… @xoxo 只需要证书有验证客户端的属性并且在服务器上配置就行了。 |
18
0okmnbvcxzx 2015-01-11 07:05:29 +08:00 via Android
最简单的实现方式是IIS6下将客户端证书与本地用户关联
|
19
vibbow 2015-01-11 07:38:46 +08:00
@0okmnbvcxzx 支付宝那就是纯粹的耍流氓。
|
20
NeoAtlantis 2015-01-11 09:09:57 +08:00
@0okmnbvcxzx Windows怎么实现的我不知道,我印象中Windows的有关用户身份的文件可能难以访问,换句话说是权限控制。加密就不知道了。但是导入到Firefox或者Chrome的证书是导入到证书管理器,应该是浏览器自己维护的。而证书私钥在客户端里面的加密存储这个要求,我的理解是类似PIN,将使用者人的身份和密码机制绑定起来,是必要的。但是我所用过的情况,导入证书需要密码,使用不需要(在浏览器没有主密码时)。这样说来浏览器很不可能加密过证书。
@vibbow 让我看的微软的CSP是一套加密服务吧,包括对称加密什么的算法都可以从它调用,似乎类似OpenSSL的功能。但是OpenSSL据我所知没有操作智能卡的功能,GnuPG有。智能卡能否在芯片上完成签名和解密是很重要的。否则就必然要把私钥交给电脑。就算是银行的U盾,密码也在电脑上进行了输入(弹出对话框要求输入U盾密码),也是个设计的弱点(比如键盘记录器什么的)。 而且说回到浏览器,浏览器就算启用了主密码,我也不知道这个主密码是怎么加密密钥库的,因为人设定的口令一般比较弱,应该要求使用PBKDF2/bcrypt/scrypt来迭代拖延时间,避免回头用暴力破解挨个尝试(AES这种加密函数甚至比散列函数算起来还要快)。所以如果直接拿主密码加密一个密钥,也是个弱点(不光说是浏览器)。 |
21
TrustyWolf 2015-01-11 09:18:48 +08:00
要是以后所有的登陆操作都用一个U盾解决就好了,要登陆的时候直接插U盾...
|
22
yushiro 2015-01-11 09:46:54 +08:00 via iPhone
正好搭车问一下楼主,怎么在mac里面导出startssl的登录证书?我要导入到win7的chrome中。
现在遇到的问题是,私钥导出后无法导入,报错说格式不正确(文件后缀p12)公钥和email证书可以导入,但是无法登陆startssl |
23
vibbow 2015-01-11 10:05:32 +08:00
@NeoAtlantis Chrome@Windows是用Windows的证书数据库的
Firefox是自己维护了一套证书数据库的 https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil 看起来Firefox的证书/私钥库默认是非加密的,保存在 cert8.db key3.db 里 等下我看看飞天的SDK,他们在私钥解密上是怎么做的。 |
24
vibbow 2015-01-11 10:10:14 +08:00
@NeoAtlantis 飞天的SDK是提供了中间件的binary文件。
然后给了头文件,通过WINDOWS CSP API或者PCKS#11 API去操作数字证书。。。 |
25
vibbow 2015-01-11 10:28:32 +08:00 1
@NeoAtlantis 大概研究了一下。
结论如下: 目前来说,对硬件数字证书的操作,需要通过CSP API或者PCKS#11 API去操作。 应用程序没有直接去操作硬件数字证书的能力。(或者说只是不知道怎么去直接操作硬件) CSP API和PCKS#11 API的中间件由数字证书厂家制作,没有公开源代码(或者我没找到)。 所以数字证书的私钥有没有释放给windows,那就要看硬件数字证书厂家对中间件的实现了。 按照我目前的经验: 对于使用CSP API的程序,操作数字证书的session在不同程序之间是不共享的(比如说我在IE里登陆了硬件数字证书,在Outlook需要使用硬件数字证书的话需要另外登陆,不能共享IE里的session)。至于其他程序能不能通过读内存的方式获取到已有的session,这个就不知道了,不过感觉Windows应该会有相关的内存保护措施吧。 对于PCKS#11 API的程序,那就真的看程序自己的实现了。像Firefox在一段时间内不操作数字证书(这个时间很短,几分钟的样子),就会要求重新登陆硬件数字证书(说明firefox并没有在内存里保存硬件数字证书的登陆密码?)。不过我相信其他程序绝对有能力注入Firefox的进程获取到一部分信息,具体多少?我不知道。 |
26
vibbow 2015-01-11 10:31:56 +08:00
@NeoAtlantis 所以硬件数字证书的优点之一就是:用完之后就可以拔掉......
智能卡同理。 |
27
0okmnbvcxzx 2015-01-11 10:52:22 +08:00 via Android
@NeoAtlantis windows 的私钥文件是可以直接访问的,chrome用的是用户在系统中的存储区,没有独立的存储。Firefox我不了解,但估计验证时也是读取用户自己的存储区吧(内置的大概不派这用场。
如果你需要每次使用都要密码可以启用强私钥保护,可以每次使用私钥都要密码解密。 之前我说加密是想着强制重设密码后私钥会失效,现在想想理由不足,想知道一般加不加密得export一下了。 @vibbow 唉,国内的都这副德行。。还是PayPal大法好 |
28
NeoAtlantis 2015-01-11 11:11:33 +08:00 via Android
@vibbow 从你的说法看是挺像没有给操作系统。PBKS#11好像本身就是一套复杂的操作标准什么的。话说那么硬件对导入的证书、解密的密文所用的算法、签名算法有限制沒?比如什么算法,多少比特? 硬件能支持的应该有些限制?
|
29
vibbow 2015-01-11 11:14:41 +08:00
|
30
vibbow 2015-01-11 11:16:07 +08:00
@0okmnbvcxzx 我被Paypal莫名其妙封了一个账号,然后他们发邮件让我重新注册一个...
|
31
NeoAtlantis 2015-01-11 11:23:38 +08:00 via Android
@vibbow 可惜了啊,看来是不错,但是算法略旧的感觉…RSA到2048,DES和3DES也挺旧,SHA256还好。
|
32
0okmnbvcxzx 2015-01-11 18:18:42 +08:00 via Android
@vibbow 有联系过客服吗?他们怎么说……是无解了吗?
|
33
GhostFlying 2015-01-11 22:21:15 +08:00
|
34
vibbow 2015-01-11 22:24:09 +08:00
@0okmnbvcxzx 就是客服给我说让我重新申请一个账号...
|
35
vibbow 2015-01-11 22:27:40 +08:00
@NeoAtlantis 就算是目前最好的SafeNet的,也只不过是多支持了一个AES256的而已。
ftsafe的其实还支持国密算法,只不过英文页面没写而已。 |
36
vibbow 2015-01-11 23:36:20 +08:00
@GhostFlying 一个yubico卖的比U盾还贵,看得我也是醉了。
|
37
0okmnbvcxzx 2015-01-12 13:09:22 +08:00 via Android
@vibbow 真是个悲伤的故事……
国密的话除了有关部门应该很少用吧…… |