Macos 如何使用OS X'为证书指定策略约束;s";安全添加受信任证书“;指挥部?(用于SSL web套接字连接)

Macos 如何使用OS X'为证书指定策略约束;s";安全添加受信任证书“;指挥部?(用于SSL web套接字连接),macos,security,ssl,https,websocket,Macos,Security,Ssl,Https,Websocket,我正在构建一个应用程序,该应用程序将通过安全web套接字(SSL)连接到用户的web浏览器。我正在使用连接到web套接字,但这不重要 短版: 我真的需要使用添加可信证书命令的帮助。。。如果你以前没有使用过,苹果的手册页真的没有任何帮助。如何将证书添加到系统密钥链,并仅将SSL和Basic选项设置为“Aways Trust” 长版本: 我正在生成自签名证书并将其传递到Websocketd,以便通过SSL连接到web套接字。Firefox和Chrome不需要进一步的步骤。。。他们只是处理这个。但是,

我正在构建一个应用程序,该应用程序将通过安全web套接字(SSL)连接到用户的web浏览器。我正在使用连接到web套接字,但这不重要

短版:

我真的需要使用
添加可信证书
命令的帮助。。。如果你以前没有使用过,苹果的手册页真的没有任何帮助。如何将证书添加到系统密钥链,并仅将SSL和Basic选项设置为“Aways Trust”

长版本:

我正在生成自签名证书并将其传递到Websocketd,以便通过SSL连接到web套接字。Firefox和Chrome不需要进一步的步骤。。。他们只是处理这个。但是,Safari不信任我的自签名证书,我必须进入密钥链访问并添加我的证书,并将信任设置更改为“使用自定义设置”,仅将SSL选项和X.509基本策略选项设置为“始终信任”。。。任何其他设置和Safari投诉。我不希望我的用户不得不摆弄证书,所以我的解决方案是使用安装后脚本将我的证书添加到系统密钥链中。像这样:

sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.Keychain" "./certificate.cert"
这将成功地将证书添加到用户的系统密钥链。。。但它将所有选项设置为“始终信任”。。。出于某种原因,Safari不喜欢这样,并且抱怨仅当SSL和X.509基本策略选项设置为“始终信任”,其余选项设置为“未指定值”时,Safari才会正常工作

好的,所以我检查了“安全添加可信证书”的选项,可以肯定的是,有一个选项,您可以传入,仅将某些选项设置为“始终信任”。。。所以我想到了这个:

sudo security add-trusted-cert -d -r trustRoot -p ssl -k "/Library/Keychains/System.Keychain" "./certificate.cert"
-p ssl
选项的结果是,现在我的证书被添加到系统密钥链中,只有ssl选项设置为始终信任。。。但基本的选择不是!如果我将ssl替换为basic,我可以将basic选项设置为Always Trust:

sudo security add-trusted-cert -d -r trustRoot -p basic -k "/Library/Keychains/System.Keychain" "./certificate.cert"
但这仍然不能解决我的问题!我需要将这两个设置为“始终信任”,并将其他选项保留为“无指定值”。。。所以我试了一下:

sudo security add-trusted-cert -d -r trustRoot -p ssl & basic -k "/Library/Keychains/System.Keychain" "./certificate.cert"
但这不起作用。我发誓我已经阅读了所有谷歌关于这个主题的文章,但我找不到一个例子来说明如何构造这个命令,使它完成我所描述的。这证实了我需要做什么,但实际上没有提供一个示例命令,这是在搜索与我相同的答案。。。但目前还没有人给出合适的答案,关于stackoverflow问题的公认答案是正确的。。。但是他们只是告诉你你需要做什么(我已经知道了),而没有告诉你怎么做

同样,我如何向系统密钥链添加证书,并仅将SSL和Basic选项设置为“Aways Trust”


谢谢大家!

在又一次令人沮丧的猜测正确命令的过程中,我终于找到了答案,我将在这里分享它,以防有人需要它:

sudo security add-trusted-cert -d -r trustRoot -p ssl -p basic -s "localhost" -k "/Library/Keychains/System.Keychain" "./certificate.cert"
请注意,解决方案是简单地添加另一个-p标志,后跟另一个约束。此外,使用-s标志指定策略字符串可能是明智的。。。在我的例子中,这只是本地主机


我希望这证明是有用的!我惊讶地发现,这样一个常规任务实际上没有任何文档,也没有关于stackoverflow的答案

非常清楚的是,这避免了为了使用您的站点,您必须指示用户选择“显示证书”,然后单击“始终信任”。。。只是让事情变得更加顺利和友好。显然,只有当您对您的用户计算机也具有管理员权限时,才有效。。。在我的例子中,我是以安装后脚本的形式运行这个命令,以sudo的形式运行。你确定这是正确的方法吗?我们在证书本身中标记证书约束。您的证书是否有可能缺少某些组件,从而导致您在挑剔的web浏览器中遇到这种麻烦?我们用
dname localhost
subjectAlternateName localhost
标记我们的证书,并且Safari没有问题。