检查系统上是否信任某个根CA

时间:2018-07-28 14:52:04

标签: shell unix ssl-certificate matching limited-user

我的目标是测试活动用户是否信任某个根证书颁发机构。我目前有一个可行的解决方案,可以通过使用其他几个答案 12 组合在一起,但是对我来说似乎很麻烦,所以我要求替代方案(或至少简化)来自(与我不同)知道他们在做什么的人的建议。

我假设这将由非特权用户(即无法安装新软件包的用户)执行,因此我想使用大多数Unix / Linux捆绑了 的实用程序发行版(与certutil不同)。因此,当前的解决方案使用awkgrepopenssl,它们似乎很通用。

我还要注意的另一件事是,我不关心以这种方式测试证书可能引起的安全隐患。

这是我当前的代码:

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'

它将awkopenssl结合使用以遍历所有现有证书,输出它们的Issuer,然后将其管道传输到grep以测试所需的行是否存在。

在正匹配的情况下,我得到的输出是我要查找的字符串,即使我需要的只是一个二进制答案(true / false,{{1 }} / yesno / 1,...)。

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

1 个答案:

答案 0 :(得分:2)

您可以通过仅使用ESP8266WiFi.h处理所有证书来节省对awk的呼叫。根据{{​​3}},以下内容将使用中间转换来提供相同数量的信息(即输入文件中每个证书的颁发者),并可以针对您要查找的数据进行过滤:

openssl

我发现这是一个改进,因为它不使用对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调用的返回值来判断给定的根CA是否受信任:

grep