在macOS中将自签名证书添加为受信任证书无法正常工作

时间:2019-11-29 21:54:31

标签: macos security ssl certificate ssl-certificate

我正在尝试创建一个简单的Makefile命令,以安装用于Angular应用程序本地开发的自签名证书。

当我手动执行此操作时(通过双击证书文件,然后打开它的详细信息并将所有内容设置为Always Trust),它会完美地工作。另一方面,以下命令无需任何手动操作即可执行相同操作,事实上,它确实可以这样做(至少我在证书详细信息上找不到任何区别)。

security add-trusted-cert -d -r trustRoot -k "/Users/${USER}/Library/Keychains/login.keychain" certificates/local.angular.domain.crt

我也使用sudo命令进行了尝试(使用sudo时的唯一区别是它不会打开本机弹出式密码窗口,我更喜欢这样,因为用户可以使用指纹进行身份验证)。

这是我的整个Makefile命令

install-certificate:
    # generate certificate
    git clone https://github.com/RubenVermeulen/generate-trusted-ssl-certificate.git
    cd generate-trusted-ssl-certificate && \
        sed -i.backup 's/CN.*/CN = local\.angular\.domain/g' ./openssl-custom.cnf && \
        sed -i.backup 's/DNS\.1.*/DNS\.1 = \*\.local\.angular\.domain/g' ./openssl-custom.cnf && \
        sed -i.backup 's/DNS\.2.*/DNS\.2 = local\.angular\.domain/g' ./openssl-custom.cnf && \
        bash generate.sh
    mkdir -p certificates
    mv generate-trusted-ssl-certificate/server.key certificates/local.angular.domain.key
    mv generate-trusted-ssl-certificate/server.crt certificates/local.angular.domain.crt
    rm -rf generate-trusted-ssl-certificate

    # add certificate as trusted
    security add-trusted-cert -d -r trustRoot -k "/Users/${USER}/Library/Keychains/login.keychain" certificates/local.angular.domain.crt
    grep -qxF '127.0.0.1 local.angular.domain' /etc/hosts || sudo -- sh -c "echo '127.0.0.1 local.angular.domain' >> /etc/hosts"

    # clear DNS cache
    sudo dscacheutil -flushcache
    sudo killall -HUP mDNSResponder

这应该相对容易复制,因为它会自己生成证书并随后进行清理。值得一提的是,角度应用程序在端口4200(https://local.angular.domain:4200)上运行,当手动添加证书时,该应用程序可以正常运行。由上述命令添加时,它显示NET::ERR_CERT_AUTHORITY_INVALID。当我在Chrome中打开两个证书的详细信息时,它们是相同的。谢谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

Web服务器需要证书以及关联的私钥。

但是看起来命令security add-trusted-cert没有导入私钥(.key文件)。您应该考虑使用security import