MS 证书服务可以成为使用 OpenSSL 创建的 CA 的从属吗

Zor*_*che 16 windows openssl ssl-certificate certificate-authority

我想为我的域设置企业证书颁发机构。所以我可以为各种目的颁发证书。我想遵循将离线 CA 作为根的最佳实践,并将我的企业 CA 设置为从属。但是,为这项任务授权 Windows 的完整副本似乎很愚蠢。

我希望能够做的是在 USB 闪存盘上安装一些实时发行版,然后安装 openssl,并在闪存驱动器上设置我的 CA。当我准备好构建根密钥/证书时,我将断开计算机与网络的连接,然后再不在网络连接的计算机上使用该 USB 磁盘。

我是否能够为 Windows 企业 CA 正确签署和创建从属 CA 证书,这将是可用的。我需要与 OpenSSL 一起使用哪些选项来构建 CA 并正确签署从属 CA 证书。

我试图在网上搜索,是我在这个主题上唯一能找到的东西。但它早于 2008 年,我不完全确定这个人是否成功。

Sha*_*den 14

是的,它工作得很好;Windows 证书颁发机构对于作为非 Windows 根目录的从属运行没有任何顾虑。

在企业模式下使用 OpenSSL 根和 Windows 2008 R2 从属进行测试。


MS CA 在 OpenSSL 配置中所期望的一些事情可以很好地发挥作用:

  • 有效的 AIA 和 CDP 位置应应用于根证书,在由自签名根部分的x509_extensions属性配置的[req]部分中。沿着这些路线的东西:

    authorityInfoAccess = caIssuers;URI:http://test-rootca.test.local/root.pem
    crlDistributionPoints = URI:http://test-rootca.test.local/root.crl
    
    Run Code Online (Sandbox Code Playgroud)
  • 默认情况下,给定的 OpenSSL 配置可能不允许从属 CA。为已签名的请求更改它(当然,确保不应该是 CA 的请求)。这将在由该部分的x509_extensions属性配置的[ca]部分中:

    basicConstraints=CA:TRUE
    certificatePolicies=2.5.29.32.0
    
    Run Code Online (Sandbox Code Playgroud)

所以,我们将做一个 CA 来测试。

让你的根:

openssl req -new -x509 -keyout /etc/ssl/private/root.key -out /etc/ssl/certs/root.pem -nodes -extensions v3_ca
Run Code Online (Sandbox Code Playgroud)

摆弄您的配置并在[ca]您的 OpenSSL 配置部分创建必要的文件和目录。

一切都准备好让微软的一面继续前进;创建一个带有手动签名的 Windows 从属 CA。

将证书请求上传到 OpenSSL 服务器。在此期间,下载根证书。将其导入受信任的根存储 - 计算机的,而不是您的用户!

颁发从属证书:

openssl ca -in test-subca.req
(you might need to specify a permissive policy manually with -policy, check your config)
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您的 CA 可能有配置问题 - 新证书目录、索引文件、串行文件等。检查错误消息。

如果去了,那就这样了。如果没有,请制作一个 CRL 并将其放入您上面配置的 CDP 中;我刚刚安装了 Apache 并将其卡在 webroot 中:

openssl ca -gencrl -out /var/www/root.crl
Run Code Online (Sandbox Code Playgroud)

并将您的证书放在 AIA 位置(如果还没有):

cp /etc/ssl/certs/root.pem /var/www/root.pem
Run Code Online (Sandbox Code Playgroud)

下载新颁发的从属证书,并使用证书颁发机构 MMC 管理单元将其安装到 CA。它会抱怨任何与信任或验证有关的问题,但它对接受它没有道德上的反对。

最终结果; 一个工作的 Windows CA,没有来自企业 PKI 管理单元的抱怨OpenSSL Generated Certificate,在属性中有一个指示。

工作-ca


dun*_*nxd 6

我明白你的意思,但我不认为 OpenSSL 是完成这项工作的工具。您可能想查看开源证书颁发机构项目,例如EJBCA,它比 OpenSSL 更关注此功能,并且有您可以使用的特定文档。

我看不出这个概念行不通的原因,因为您所做的只是签署从属 CA 的证书。如果您支付公共 CA 来为您执行此操作,则您不一定知道或关心他们使用的服务器类型。

您需要关心的是:

  • 您可以从下属生成的 CSR 中签署证书
  • 结果可以安装在从属本身上
  • 您有一个根签名证书,可以在您所针对的任何客户端上安装为受信任的证书
  • 您可以生成在某处提供的撤销列表

我不能说我已经这样做了,但我确信如果您按照文档从 Windows 框中生成 CSR,然后按照您的 CA 文档从 CSR 生成 .p7k 证书,那么您应该没问题。

顺便说一句 - 我建议您将 CA 创建为流行的虚拟机管理程序(例如 Hyper-V 或 VMware)的虚拟机,而不是引导磁盘,请确保将它非常安全地存储在您的继任者可以找到的地方,然后旋转它定期离线以确保其运行,或将其转移到新媒体/技术。一个根 CA 可能有 10 年或 20 年的寿命......