AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 970009
Accepted
Josh
Josh
Asked: 2019-06-04 16:51:59 +0800 CST2019-06-04 16:51:59 +0800 CST 2019-06-04 16:51:59 +0800 CST

如何使用我的组织内部 CA 签署新的 FreeIPA 服务器的内部 CA?

  • 772

我的组织有一个内部证书颁发机构 (CA),我们已经生成了许多内部证书并安装在机器上。

我正在设置一个FreeIPA LDAP/Kerberos 服务器,在初始安装后,它生成了它自己的内部 CA,我可以在 Web 界面中看到它。

我想与现有组织的 CA 签署 FreeIPA CA,以建立证书信任链。我正在遵循FreeIPA 手动更新外部签名 IdM CA 证书的说明,我相信这涵盖了使用外部 CA 签署 FreeIPA CA。这产生了一个 CSR,我使用现有的 CA 签署了该 CSR 以产生一个新的签署的 FreeIPA CA。

但是,我在尝试使用该ipa-cacert-manage renew --external-cert-file命令重新导入新签名的 CA + 证书链时遇到了困难。当我按照说明运行它时,我收到一个错误,即 CA 证书链不完整,因为它缺少链中的一个证书:

[root@lockandkey ~]# ipa-cacert-manage renew --external-cert-file=/tmp/LockAndKey_FreeIPA_CA.crt  --external-cert-file=/tmp/dfca.crt --external-cert-file=/tmp/jgca.crt 
Importing the renewed CA certificate, please wait
CA certificate chain in /tmp/LockAndKey_FreeIPA_CA.crt, 
/tmp/dfca.crt, /tmp/jgca.crt is incomplete: missing certificate with subject 
'[email protected],CN=ca.digitalfruition.com,OU=Internal CA,O=Digital Fruition\, LLC,L=Newland,ST=North Carolina,C=US'
The ipa-cacert-manage command failed.

但是,该证书是在其中一个--external-cert-file论点中提供的。我还尝试了一个“CA Bundle”文件(一个文件中有多个证书),结果是一样的。

进一步挖掘,问题实际上似乎来自load_external_certinstallutils.py

    trust_chain = list(reversed(nssdb.get_trust_chain(ca_nickname)))
    ca_cert_chain = []
    for nickname in trust_chain:
        cert, subject, issuer = cache[nickname]
        ca_cert_chain.append(cert)
        if subject == issuer:
            break
    else:
        raise ScriptError(
            "CA certificate chain in %s is incomplete: "
            "missing certificate with subject '%s'" %
            (", ".join(files), issuer))

在详细模式下运行ipa-cacert-manage renew表明它确实找到了链中的所有证书,但是当它到达 [艺术trust_chain形成的地方,trust_chain 仅包含 FreeIPA 证书而不包含链的其余部分。我能够通过展开命令并在终端中重放它们来重现场景。这是它崩溃的地方:

FreeIPAipa-cacert-manage renew正在使用该选项调用certutil“打印证书链” -O,如下所示:

[root@lockandkey ~]# /usr/bin/certutil -d dbm:/tmp/tmppTphXX -O -n 'CN=Certificate Authority,O=FARCRY.SITEPALETTE.COM' -f /tmp/tmppTphXX/pwdfile.txt
"CN=Certificate Authority,O=FARCRY.SITEPALETTE.COM" [CN=Certificate Authority,O=FARCRY.SITEPALETTE.COM]

但是certutil,即使证书由信任库中的另一个 CA 签名,也不会打印整个链。当我在中间 CA 上调用它时,您可以看到它certutil确实显示了正确的链:

[root@lockandkey ~]# /usr/bin/certutil -d dbm:/tmp/tmppTphXX -O -n '[email protected],CN=ca.digitalfruition.com,OU=Internal CA,O=Digital Fruition\, LLC,L=Newland,ST=North Carolina,C=US' -f /tmp/tmppTphXX/pwdfile.txt
"[email protected],CN=Joshua Gitlin,OU=ca.josh.gitlin.name,O=Personal Certificate Authority,L=Newland,ST=North Carolina,C=US" [[email protected],CN=Joshua Gitlin,OU=ca.josh.gitlin.name,O=Personal Certificate Authority,L=Newland,ST=North Carolina,C=US]

  "[email protected],CN=ca.digitalfruition.com,OU=Internal CA,O=Digital Fruition\, LLC,L=Newland,ST=North Carolina,C=US" [[email protected],CN=ca.digitalfruition.com,OU=Internal CA,O="Digital Fruition, LLC",L=Newland,ST=North Carolina,C=US]

所以我相信这是一个问题certutil,但这是我到目前为止所得到的。

进一步调试我已经决定由于某种原因certutil不喜欢我生成的证书,所以这可能是该 CSR 上的问题。其他证书验证良好...

难道我做错了什么?与另一个内部 CA 签署 FreeIPA 证书颁发机构的正确方法是什么?

openssl
  • 1 1 个回答
  • 1063 Views

1 个回答

  • Voted
  1. Best Answer
    Josh
    2019-06-16T09:13:03+08:002019-06-16T09:13:03+08:00

    我发现了问题。FreeIPA 生成的 CSR 包括设置为 FreeIPA 私钥的密钥 ID 的“X509v3 Authority Key Identifier”扩展。这导致certutil人们相信 CA 是自签名的,并且不遵循证书链。

    从 FreeIPA 签署 CSR 时,请勿复制 X509v3 授权密钥标识符扩展。然后验证将成功。

    (另外:确保签名的 CA 证书使用 UTF8 对主题名称进行编码;请参阅文档中的主题名称编码不匹配)

    • 2

相关问题

  • 如何在 Mac OS X 服务器上安装替换 SSL 证书?

  • 在 LAMPP 中升级单个库(特别是 openssl)

  • 带有基于商业 CA 的客户端证书的 ssl_error_handshake_failure_alert

  • 我可以对 *.domain.com 和 domain.com 使用相同的通配符认证吗

  • 为 apache 生成自签名 SSL 证书

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve