2

我的目标是测试某个根证书颁发机构是否受到活动用户的信任。我目前有一个可行的解决方案,我设法使用其他几个答案12拼凑起来,但这对我来说似乎很复杂,所以我要求那些(不像我)的人提供替代(或至少简化)建议知道他们在做什么。

我假设这将由非特权用户(即无法安装新软件包的用户)执行,所以我想使用可能与大多数 unix/linux 发行版捆绑在一起的实用程序(不像 eg certutil)。出于这个原因,当前的解决方案使用awk,grepopenssl,这似乎很普遍。

我应该注意的另一件事是,我不关心以我的方式测试证书可能产生的安全隐患。

这是我当前的代码:

awk -v cmd='openssl x509 -noout -issuer' '/BEGIN/{close(cmd)};{print | cmd}'
   < /etc/ssl/certs/ca-certificates.crt 
   | grep -F 'issuer=C = US, O = company, CN = localhost, OU = engineering'

awk与 结合使用openssl来遍历所有现有证书,输出它们Issuer,然后通过管道将其 grep用于测试所需的行是否存在。

在肯定匹配的情况下,我得到的输出是我正在寻找的字符串,即使我只需要一个二进制答案(true/ falseyes/ no1/ 0,...)。

关于如何以更简单和/或更通用的方式实现我的目标的任何建议?

4

1 回答 1

2

您可以通过单独awk使用处理所有证书来节省调用。openssl根据Server Fault 上的这个答案,以下将使用中间转换来提供相同数量的信息(即输入文件中每个证书的颁发者),这些信息可以针对您要查找的数据进行过滤:

openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt \
   | openssl pkcs7 -print_certs -noout \
   | grep '^issuer=/C=US/O=company/CN=localhost/OU=engineering'

我发现这是一个改进,因为它不使用大量调用awk(这也将是另一个依赖项),并且输出pkcs7似乎比x509.

请注意,您可以使用上述grep调用的返回值来判断给定的根 CA 是否可信:

openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt \
   | openssl pkcs7 -print_certs -noout \
   | grep -q '^issuer=/C=US/O=company/CN=localhost/OU=engineering' && echo 'Certificate found!'
于 2018-07-28T16:13:31.967 回答