升级OSX High Sierra后curl出现LibreSSL 'no start line'错误求助
解决OSX High Sierra下curl加载PKCS#12证书的LibreSSL错误
我之前帮朋友排查过几乎一模一样的情况,根源在于OSX High Sierra把系统默认的curl后端从OpenSSL换成了LibreSSL,而LibreSSL对PKCS#12(.p12)证书的处理逻辑和OpenSSL有差异,这就导致之前正常的命令在升级后报错。Windows同事那边没问题,是因为他们的curl用的还是OpenSSL或者兼容的加密库。
下面给你两个可行的解决方案:
方案一:将.p12证书转换为PEM格式
LibreSSL对PEM格式的证书支持更稳定,我们可以先用openssl把.p12拆成证书和密钥的PEM文件:
- 导出证书部分:
openssl pkcs12 -in certificate.p12 -out certificate.pem -clcerts -nokeys
执行时会提示你输入.p12的密码,输入你原来的password即可。
- 导出密钥部分:
openssl pkcs12 -in certificate.p12 -out key.pem -nocerts -nodes
同样输入证书密码完成导出。
- 用转换后的文件调用curl:
curl -k https://server_metadata_link --cert certificate.pem --key key.pem --pass "password"
如果嫌分开文件麻烦,也可以把证书和密钥合并成一个PEM文件:
cat certificate.pem key.pem > combined.pem curl -k https://server_metadata_link --cert combined.pem --pass "password"
方案二:安装基于OpenSSL的curl
如果不想转换证书,也可以通过Homebrew安装一个用OpenSSL编译的curl版本,完全兼容之前的命令:
- 先安装Homebrew(如果还没装的话),然后执行:
brew install curl --with-openssl
- 使用brew安装的curl运行原命令:
/usr/local/bin/curl -k https://server_metadata_link --cert certificate.p12 --pass "password"
(注意:系统默认的curl路径是/usr/bin/curl,brew安装的在/usr/local/bin,要指定完整路径或者把它加到环境变量优先级更高的位置)
这两个方案都能解决你遇到的LibreSSL加载证书失败的问题,我当时给朋友用的是方案二,因为不用改证书,直接沿用原来的命令更方便。
内容的提问来源于stack exchange,提问作者Margaret S.
相关产品推荐
相关产品推荐

