islujw
V2EX  ›  SSL

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

  •  
  •   islujw · May 16, 2018 · 4293 views
    This topic created in 2987 days ago, the information mentioned may be changed or developed.

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

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

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

    xxxxxx

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

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

    13 replies    2018-10-15 16:06:54 +08:00
    oh
        1
    oh  
       May 16, 2018 via iPhone
    两个输入框……
    islujw
        2
    islujw  
    OP
       May 16, 2018
    @oh 分开上传是可以哒,但我们想尽可能实现一个框内自动识别。因为证书后缀名什么的还挺杂乱的,用户有可能分不清哪个是哪个。
    rrfeng
        3
    rrfeng  
       May 16, 2018 via Android
    不可能的
    isCyan
        4
    isCyan  
       May 16, 2018   ❤️ 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  
       May 16, 2018   ❤️ 1
    https://github.com/digitalbazaar/forge
    这个库貌似可以,有个 X.509 实现,你可以看看
    momocraft
        6
    momocraft  
       May 16, 2018
    这格式是平台无关的。你能把 x509 这些东西移植到前端就行。
    islujw
        7
    islujw  
    OP
       May 16, 2018
    @isCyan 非常感谢!用 forge decode 之前需要通过 HTML5 的 FileReader 把文件读出来,.pem 和 .crt 文件都没问题,但 .cer 文件读出来是乱码,decode 不了。请问这个有方法吗?
    isCyan
        8
    isCyan  
       May 16, 2018
    @islujw #7 不知道,我没研究过,可能是证书格式问题吧。或者搜索一下
    geekzu
        9
    geekzu  
       May 28, 2018 via Android
    @islujw 可能是 der 格式,需要转换成 base64 编码的 pem 格式,openssl 有相关操作命令,前端估计整不了
    Hardrain
        10
    Hardrain  
       May 31, 2018
    openssl x509 -noout -text -in {证书路径}|grep -Ee 'CA:'

    看输出的是 CA:FALSE 还是 CA:TRUE
    Hardrain
        11
    Hardrain  
       May 31, 2018
    如果是 DER(二进制)格式,openssl x509 后面加-inform DER
    如果是 PEM(Base64)格式,无需处理
    fairyaierl
        12
    fairyaierl  
       Aug 1, 2018
    @islujw 楼主实现了吗?碰到一样的问题了。
    islujw
        13
    islujw  
    OP
       Oct 15, 2018
    @fairyaierl 实现了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2788 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 15:26 · PVG 23:26 · LAX 08:26 · JFK 11:26
    ♥ Do have faith in what you're doing.