如何将Apple KeyChain中的所有CA证书导出到单个PEM捆绑包中?

时间:2017-01-25 12:24:40

标签: macos ssl keychain

考虑到我知道系统KeyChain包含所有需要的SSL证书,我确实想要生成一个PEM包,我可以将其与其他无法与Apple keychain通信的工具一起使用。例如:Python请求库或Oracle Java。

请注意,这不是特定证书,而是我想要进行的批量操作。

一旦我有了这个包,我可以将SSL_CERT_FILE和REQUESTS_CA_BUNDLE等环境变量指向它的位置并使用它。

2 个答案:

答案 0 :(得分:3)

(部分解决方案)

security find-certificate -a -p /Library/Keychains/System.keychain > $TMP_CERT
security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> $TMP_CERT

我将此标记为不完整的解决方案,因为在使用此文件时仍无法使python请求成功。 Curl似乎加载并使用该文件没有任何问题。

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

答案 1 :(得分:0)

如果只有少数几个非系统CA,那么从“钥匙串”应用程序手动将它们全部导出并不难。

  1. 从启动板->其他->钥匙串访问中打开钥匙串应用。

  2. 在左侧面板中,选择“系统根目录”和“证书”。

  3. 在主面板中,单击第一个证书,然后一直向下滚动并按住Shift键并单击最后一个证书以将其全部选中。

Keychain Application with all System Root certificates selected

  1. 右键单击所选证书之一,然后选择“导出###项目...”。

  2. 将文件保存在一个不错的目录中。

  3. 在左侧“钥匙串”面板的顶部,选择“系统”。

  4. 找到要包含在捆绑软件中的所有自定义根CA,右键单击它们,然后将它们导出到与步骤5中相同的目录。

  5. 打开一个终端并导航到漂亮的目录。将它们与cat Certificates.pem <your custom CA>.pem <your other custom CA>.pem > bundle.pem串联在一起。