将自签名证书添加为macOS中的受信任证书不会';我不能正常工作

将自签名证书添加为macOS中的受信任证书不会';我不能正常工作,macos,security,ssl,certificate,ssl-certificate,Macos,Security,Ssl,Certificate,Ssl Certificate,我正在尝试创建一个简单的Makefile命令,以便为Angular应用程序的本地开发安装自签名证书 当我手动执行此操作时(通过双击证书文件,然后打开证书文件的详细信息,并将所有内容设置为始终信任),它可以完美地工作。另一方面,下面的命令应该在没有任何手动操作的情况下执行相同的操作,事实上,它确实执行了(至少我在证书详细信息中找不到任何差异) security add trusted cert-d-r trustRoot-k”/Users/${USER}/Library/Keychains/log

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

当我手动执行此操作时(通过双击证书文件,然后打开证书文件的详细信息,并将所有内容设置为
始终信任
),它可以完美地工作。另一方面,下面的命令应该在没有任何手动操作的情况下执行相同的操作,事实上,它确实执行了(至少我在证书详细信息中找不到任何差异)

security add trusted cert-d-r trustRoot-k”/Users/${USER}/Library/Keychains/login.keychain“certificates/local.angular.domain.crt
我还使用sudo命令进行了尝试(使用sudo的唯一区别是它不会打开本机弹出的密码,我更喜欢这样,因为用户可以使用指纹进行身份验证)

这是我的整个Makefile命令

安装证书:
#生成证书
git克隆https://github.com/RubenVermeulen/generate-trusted-ssl-certificate.git
cd生成受信任的ssl证书&&\
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证书
mv生成受信任的ssl证书/server.key证书/local.angular.domain.key
mv生成受信任的ssl证书/server.crt证书/local.angular.domain.crt
rm-rf生成受信任的ssl证书
#将证书添加为受信任的证书
安全添加可信证书-d-r trustRoot-k“/Users/${USER}/Library/Keychains/login.keychain”证书/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”
#清除DNS缓存
sudo dscacheutil-flushcache
sudo killall-HUP MDnsrresponder

这应该相对容易复制,因为它会生成证书本身并在之后进行清理。值得一提的是angular应用程序在端口4200上运行(
https://local.angular.domain:4200
)当手动添加证书时,它可以顺利工作。当通过上述命令添加时,它显示
NET::ERR\u CERT\u AUTHORITY\u INVALID
。当我在chrome中打开两个证书的详细信息时,它们是相同的。感谢您的建议。

web服务器需要证书以及相关的私钥


但是看起来命令
security add trusted cert
没有导入私钥(
.key
文件)。你应该考虑使用<代码>安全导入< /COD> .< /P>。为了澄清,命令是有效的,但作为MaX文件的一部分运行时它不起作用吗?系统日志中是否有任何日志输出,或者该命令是否会导致日志输出?(请参阅Console.app以查看系统日志)。命令本身可以工作,它也可以在Makefile中工作,这里的区别是,即使它在使用命令时将所有内容设置为“始终信任”,但它仍然无法工作,并且权限仍然不是未知的(
NET::ERR\u CERT\u Authority\u INVALID
)。手动或使用脚本时,证书看起来完全相同。这就是我的问题所在,区别是什么?为什么即使它们看起来完全一样,它也不信任用命令签名的那一个。如果你在macOS上,你只需运行上面的命令,就可以生成/签名差异。虽然,为了测试它(看看它不工作),你需要一个服务器来使用这些密钥进行通信。我不知道,但显然我还有18个小时来奖励你。如果您有时间,如果您能告诉我如何使用
import
命令使其工作,我将非常感激并非常高兴地奖励您。非常感谢。