V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
islujw
V2EX  ›  SSL

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

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

    需要用户上传证书文件。 理想场景是:上传文件,自动识别这是私钥、公钥、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   ·   实用小工具   ·   2727 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:55 · PVG 22:55 · LAX 06:55 · JFK 09:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.