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

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

  •  
  •   islujw 2018-05-16 10:55:43 +08:00 3882 次点击
    这是一个创建于 2705 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    xxxxxx

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

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

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

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

    看输出的是 CA:FALSE 还是 CA:TRUE
    Hardrain
        11
    Hardrain  
       2018-05-31 17:39:12 +08:00
    如果是 DER(二进制)格式,openssl x509 后面加-inform DER
    如果是 PEM(Base64)格式,无需处理
    fairyaierl
        12
    fairyaierl  
       2018-08-01 17:29:39 +08:00
    @islujw 楼主实现了吗?碰到一样的问题了。
    islujw
        13
    islujw  
    OP
       2018-10-15 16:06:54 +08:00
    @fairyaierl 实现了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2742 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:50 PVG 19:50 LAX 04:50 JFK 07:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86