我正在尝试创建一个简单的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中打开两个证书的详细信息时,它们是相同的。谢谢您的任何建议。
答案 0 :(得分:1)
Web服务器需要证书以及关联的私钥。
但是看起来命令security add-trusted-cert
没有导入私钥(.key
文件)。您应该考虑使用security import
。