前端是否有办法区分证书文件是「公共证书(公钥)」和「CA 根证书」?

2018-05-16 10:55:43 +08:00
 islujw

需要用户上传证书文件。 理想场景是:上传文件,自动识别这是私钥、公钥、CA 根证书,并显示在相应的位置,且读取并将公钥的签发者显示在前端界面。

但似乎公钥、CA 根证书的文本内容都是:

-----BEGIN CERTIFICATE-----

xxxxxx

-----END CERTIFICATE-----

那么该如何用前端技术区分一个证书文件是公钥还是 CA 根证书?

3591 次点击
所在节点    SSL
13 条回复
oh
2018-05-16 11:19:43 +08:00
两个输入框……
islujw
2018-05-16 12:04:39 +08:00
@oh 分开上传是可以哒,但我们想尽可能实现一个框内自动识别。因为证书后缀名什么的还挺杂乱的,用户有可能分不清哪个是哪个。
rrfeng
2018-05-16 12:11:27 +08:00
不可能的
isCyan
2018-05-16 12:18:56 +08:00
给个思路,我个人也不了解:

https://censys.io/certificates/3111500c4a66012cdae333ec3fca1c9dde45c954440e7ee413716bff3663c074/openssl
这个是 Github 的证书,你可以看到 X509v3 扩展里面有个 CA:FALSE

https://censys.io/certificates/cbf8fb77660167e6baacd0df77cda397d0117ee2beea23b935317f8bb5b5e3b0/openssl
这个 DigiCert 的 EV 中间证书(不是根)之一,可以看到 CA:TRUE,而且 X509v3 Key Usage 包含 Certificate Sign, CRL Sign

https://censys.io/certificates/16af57a9f676b0ab126095aa5ebadef22ab31119d644ac95cd4b93dbf3f26aeb/openssl
这个 DigiCert 的根证书之一,特点当然是自签名,而且 CA:TRUE,X509v3 Key Usage 包含 Certificate Sign, CRL Sign

区别很明显了,就是不知道有没有能读取这些参数的前端库
isCyan
2018-05-16 12:23:06 +08:00
https://github.com/digitalbazaar/forge
这个库貌似可以,有个 X.509 实现,你可以看看
momocraft
2018-05-16 12:23:56 +08:00
这格式是平台无关的。你能把 x509 这些东西移植到前端就行。
islujw
2018-05-16 19:02:05 +08:00
@isCyan 非常感谢!用 forge decode 之前需要通过 HTML5 的 FileReader 把文件读出来,.pem 和 .crt 文件都没问题,但 .cer 文件读出来是乱码,decode 不了。请问这个有方法吗?
isCyan
2018-05-16 19:04:40 +08:00
@islujw #7 不知道,我没研究过,可能是证书格式问题吧。或者搜索一下
geekzu
2018-05-28 02:48:36 +08:00
@islujw 可能是 der 格式,需要转换成 base64 编码的 pem 格式,openssl 有相关操作命令,前端估计整不了
Hardrain
2018-05-31 17:38:21 +08:00
openssl x509 -noout -text -in {证书路径}|grep -Ee 'CA:'

看输出的是 CA:FALSE 还是 CA:TRUE
Hardrain
2018-05-31 17:39:12 +08:00
如果是 DER(二进制)格式,openssl x509 后面加-inform DER
如果是 PEM(Base64)格式,无需处理
fairyaierl
2018-08-01 17:29:39 +08:00
@islujw 楼主实现了吗?碰到一样的问题了。
islujw
2018-10-15 16:06:54 +08:00
@fairyaierl 实现了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/455215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX