Openssl 以编程方式验证SSL证书

Openssl 以编程方式验证SSL证书,openssl,ssl-certificate,verification,Openssl,Ssl Certificate,Verification,我知道这将是一个巨大的职位,但我想提出一个问题,我面临的基本上给出了它的所有细节 背景 我有一个应用程序可以触发firefox获取URL数据,并在一个网页中显示所有组件的单个组件加载时间(比如Firebug)。但是,应用程序不会自动验证ssl证书(即,如果存在错误的证书,则会被卡住,因为没有用户手动接受/拒绝证书,并且都是通过编程完成的)。我需要通过在firefox进程启动之前验证站点的证书来解决这个问题 我的解决方案 我发现这段C代码在C中以编程方式验证SSL证书。我将简要介绍一下。这是mai

我知道这将是一个巨大的职位,但我想提出一个问题,我面临的基本上给出了它的所有细节

背景 我有一个应用程序可以触发firefox获取URL数据,并在一个网页中显示所有组件的单个组件加载时间(比如Firebug)。但是,应用程序不会自动验证ssl证书(即,如果存在错误的证书,则会被卡住,因为没有用户手动接受/拒绝证书,并且都是通过编程完成的)。我需要通过在firefox进程启动之前验证站点的证书来解决这个问题

我的解决方案

我发现这段C代码在C中以编程方式验证SSL证书。我将简要介绍一下。这是main()方法:

我不明白为什么会发生这种情况,因为核查应该成功。如果能得到任何帮助,我将不胜感激

更新1

我尝试使用openssl命令,并尝试从代码调用该命令,即

opensssl verify -CAfile ./ca-bundle.crt cert1...
然而,我发现它验证内部和外部证书,它似乎也验证证书(内部)实际上应该是坏的(特别是坏域证书)。如果您能对此有所了解,我将不胜感激。

您得到的信息是

20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate

the issuer certificate could not be found: this occurs if the issuer certificate of an untrusted certificate cannot be found.
尝试将gmail发行人而不是gmail证书放入certificate.pem

另外,确保你理解布鲁诺对你的问题的第一个评论

opensssl verify -CAfile ./ca-bundle.crt -untrusted cert1...
请参阅本文,但我还不知道如何通过编程实现


\

您正在尝试建立两个连接吗?先用你的应用程序验证证书,然后用Firefox验证?在这种情况下,从技术上讲,您不知道Firefox是否具有相同的证书,因此验证第一个证书没有什么意义。我不太清楚你为什么要用Firefox来获取你的页面。有很多HTTP客户端lib,支持SSL/TLS,更适合这样做。嗨,firefox部分是模拟有/没有主缓存的真实用户将看到什么。我不确定我是否理解你提出的关于不同ECRT的问题。我首先验证了这一点,如果失败了,我根本不会启动firefox。但我真正关心的是,即使在获得所需的证书之后。这失败了,我不知道为什么更新:我能够让这在内部网站上运行,尽管我无法在任何使用SSL证书的外部网站上运行,比如gmail/facebook等等。这听起来可能很愚蠢。但我不是这方面的专家。即使在放置颁发者证书之后,我也会遇到此错误。我也不知道!
20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate

the issuer certificate could not be found: this occurs if the issuer certificate of an untrusted certificate cannot be found.
opensssl verify -CAfile ./ca-bundle.crt -untrusted cert1...