islujw
V2EX  ›  SSL

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

  •  
  •   islujw · May 16, 2018 · 4595 views
    This topic created in 3093 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
    oh
    May 16, 2018 via iPhone
    1
    两个输入框……
    islujw
    islujw
    OP
    May 16, 2018
    2
    @oh 分开上传是可以哒,但我们想尽可能实现一个框内自动识别。因为证书后缀名什么的还挺杂乱的,用户有可能分不清哪个是哪个。
    rrfeng
    rrfeng
    May 16, 2018 via Android
    3
    不可能的
    isCyan
    isCyan
    May 16, 2018❤️1
    4
    给个思路,我个人也不了解:

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

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