amazon-archives-certlint的安装、配置与使用(Ubuntu虚拟机,github.com/amazon-archives/certlint)

GitHub - amazon-archives/certlint: X.509 certificate lint

  • bin    修复没有的UTF-8字符串的匹配问题
  • data    更新数据文件
  • ext    再生源
  • lib    在名称比较路程上添加注释
  • spec    Gemize
  • .gitignore    Gemize
  • .rubocop.yml    引入证书错误检查工具
  • CODE_OF_CONDUCT.md    Gemize
  • Gemfile    Gemize
  • LICENSE    初始提交
  • README.md    添加提供者
  • Rakefile    Gemize
  • certlint.gemspec    添加版本
  • make-names.rb    更新数据
  • update-data.sh    通过HTTPS请求所有数据的URL

1. README.md:证书目录说明

说明:.md全程markdown,是一种标记语言,可以用记事本、EditPlus等等文本编辑器打开

2. LICENSE:Apache-2.0 License(阿帕奇许可证)

3. .rubocop.yml:

Metrics/LineLength:      #----auto-correct
  Enabled: false

说明:

1)YAML是一种较为人性化的数据序列化语言,可以配合目前大多数编程语言使用

2)YAML的语法比较简洁直观,特点是使用空格来表达层次结构,其最大的优势在于数据结构方面的表达,所以YAML更多应用于编写配置文件,其文件一般以.yml为后缀

3)语法部分见:一文看懂 YAML | 菜鸟小栈 (chenpipi.cn)

4)搞定Ruby中的bug:Rubocop是一个代码分析器。它有很多的“Cops",每个”Cops"都是一种不同的检测,都能在代码中体现出来。Cops能够被添加和配置。管理所有选项的最佳方法是使用.rubocop.yml配置文件,即上述框中的代码。它可以集成到你喜欢的编辑器中,有许多的编辑器插件,类似SublimeText。

4.make-names.rb:

 1 #!/usr/bin/ruby
 2 
 3 # Prefill with the CA/B Forum attributes
 4 attrs = {
 5 '1.3.6.1.4.1.311.60.2.1.1' => 'jurisdictionLocalityName',
 6 '1.3.6.1.4.1.311.60.2.1.2' => 'jurisdictionStateOrProvinceName',
 7 '1.3.6.1.4.1.311.60.2.1.3' => 'jurisdictionCountryName'
 8 }
 9 
10 IO.foreach(ARGV[0]) do |line|
11   p = line.strip.split(',')
12   next unless p[1] == 'A' && p[2] =~ /^[0-2]/
13   oid = p[2].strip.split('.').map(&:strip).join('.')
14   name = p[0]
15   if !attrs.key? oid
16     attrs[oid] = name
17   elsif attrs[oid].length < name.length
18     attrs[oid] = name
19   end
20 end
21 
22 def sort_oid(ao, bo)
23   a = ao.split('.').map(&:to_i)
24   b = bo.split('.').map(&:to_i)
25   p = 0
26   a.each do |seg|
27     return 1 if b[p].nil?
28     return 1 if seg > b[p]
29     return -1 if seg < b[p]
30     p += 1
31   end
32   if !b[p].nil?
33     return -1
34   end
35   0
36 end
37   
38 
39 attrs.keys.sort{|a,b|sort_oid(a,b)}.each do |oid|
40   puts "'#{oid}' => '#{attrs[oid]}',"
41 end

说明:

1).rb是一个包含Ruby程序/脚本源代码的文本文件

2)

说明:

1)Ruby环境在Linux中的安装 :https://blog.csdn.net/qq_41690477/article/details/82750530

2)Ruby在Linux中的运行:https://jingyan.baidu.com/article/3065b3b6b32d83becef8a442.html

 

 

Add installation and usage example:

1.Update your system:(更新系统)

    sudo apt-get update    //下载源里面得metadata,包括这个源里面有什么包,每个包有什么版本之类的

    sudo apt-get dist-upgrade    //聪明的解决相依性得问题,如果有相依性得问题,需要安装/移除新的Package,就会试着去安装/移除它

2.Install 'ruby':(安装Ruby)

    sudo apt-get install ruby ruby-dev    //Ubuntu下安装Ruby一定要注意执行apt-get install时需要安装ruby-dev,因为好多gems都是依赖ruby-dev的库编译运行的,缺少ruby-dev,gem安装时经常报错[color=red]ERROR: Faild to build gem native extension[/color]

3.Install required gems:(安装需要的gems包)

    sudo gem install public_suffix    //public_suffix是基于Ruby的域名解析器

     sudo apt-get install g++    //先安装一个c++的编译器才能执行下面的代码

    sudo gem install simpleidn    //

4.Install 'git' and clone 'certlint' repository into local directory:

    sudo apt-get install git    //安装git,在Linux中必须使用git来链接GitHub,git是一种版本管理工具,而GitHub是一个远程仓库

    git clone https://github.com/awslabs/certlint.git    //将存储库克隆到新的目录中

5.Build 'asn1validator' extension:(建立’asn1validator‘拓展程序)

    cd certlint/ext/    //

    ruby extconf.rb    //执行这个ruby文件,根据用户的需求和系统属性定制文件

    make    //运行make文件时,创建的拓展程序将会被编译(也可能被安装到某个地方)

    cd ..    

6.Download PEM certificate:

    wget https://letsencrypt.org/certs/isrgrootx1.pem.txt

7.Convert PEM encoded certificate to DER encoded certificate:

    openssl x509 -inform PEM -in isrgrootx1.pem.txt -outform DER -out isrgrootx1.der 

8.Run 'certlint' on DER encoded certificate:

    ruby -I lib:ext bin/certlint ./isrgrootx1.der 

9.Run 'cablint' on DER encoded certificate:

    ruby -I lib:ext bin/certlint ./isrgrootx1.der 

 10.输出格式说明:

B:您的证书具有certlint未处理的功能

I:这些纯粹是提供信息;不需要任何操作

N:这些是已知会导致证书处理的一种或多种实施出现问题的项目,但根据标准不是错误

W:这些是标准建议不同但标准使用“应该”或“可以”之类的术语问题

E:这些是证书不符合标准的问题

F:这些错误对检查来说是致命的,并且会阻止执行大多数进一步的检查。这些都是非常糟糕的错误

 

Issues

1.

According to briansmith/webpki#90, certlint doesn't indicate when the X509v3 extension field is missing, nor does it indicate when the subjectAltName is missing. Especially since web browsers and other software now routinely reject certificates without these fields, it would be good for certlint to point out when they are missing.

根据 briansmith/webpki#90,certlint 不指示何时缺少 X509v3 扩展字段,也不指示何时缺少 subjectAltName。 尤其是由于 Web 浏览器和其他软件现在通常会拒绝没有这些字段的证书,因此 certlint 最好指出它们何时丢失。

 

规则:

1.EV证书必须包含主题中的本地名,只有当stateOrProvinceName不存在时才正确(E: EV certificates must include localityName in subject - only true if stateOrProvinceName is absent · Issue #65 · amazon-archives/certlint (github.com)

 2. .onion certs一定要有2.23.140.1.31extension(Other output formats? · Issue #63 · amazon-archives/certlint (github.com)

3.CAs 应生成大于零 (0) 的非序列证书序列号,其中包含至少 64 位来自 CSPRNG 的输出(返回 2016 年 9 月 30 日之后签发的序列号低于 64 位熵的证书的"错误" •问题 #56 »亚马逊档案/证书 (github.com)

4.EV证书的最大有效期是825天,而不是27个月(Issues · amazon-archives/certlint (github.com)

5.签名算法识别器的解析器(可能还有其他算法识别器用途)无法区分算法识别器的有效编码和无效编码。(Missing NULL parameters for AlgorithmIdentifiers in signatures that require NULL are not reported · Issue #70 · amazon-archives/certlint (github.com))

6.

posted @ 2021-09-05 19:23  bonel  阅读(113)  评论(0编辑  收藏  举报