为什么 OpenSSL 需要私钥来撤销证书?

信息安全 openssl 证书吊销
2021-08-19 08:24:51

openssl ca -revoke signed/0A.pem -config caconfig.cnf

这需要 CA 的私钥做什么?除了更新 index.txt 之外,它还有什么作用吗?

3个回答

这是 OpenSSL 的一个错误(至少在 1.0.1c 版本中);准确地说,是命令行“ca”选项处理的一个错误。如果您查看OpenSSL 源代码apps/ca.c中的源文件,您可能会看到该函数从解析命令行选项开始,然后读取配置文件,然后执行以下操作:MAIN()

    /*****************************************************************/
    /* report status of cert with serial number given on command line */
    if (ser_status)
    {
         /* some stuff */
         goto err;
    }

    /*****************************************************************/
    /* we definitely need a private key, so let's get it */

    if ((keyfile == NULL) && ((keyfile=NCONF_get_string(conf,
            section,ENV_PRIVATE_KEY)) == NULL))
            {
            lookup_fail(section,ENV_PRIVATE_KEY);
            goto err;
            }
    if (!key)
            {
            free_key = 1;
            if (!app_passwd(bio_err, passargin, NULL, &key, NULL))
                    {
                    BIO_printf(bio_err,"Error getting password\n");
                    goto err;
                    }
            }
    pkey = load_key(bio_err, keyfile, keyform, 0, key, e,
            "CA private key");

这意味着代码将识别检查证书吊销状态的特殊情况(命令行选项-status),这当然不需要CA私钥,但会坚持加载CA私钥,无论是是否真的需要。

特别是,在此工具的上下文中,吊销index.txt证书意味着在颁发证书的“数据库”中将其标记为已吊销,该“数据库”不使用 CA 私钥。使用 CA 私钥的是签署 CRL(它通知世界其他地方证书已被真正吊销),但-revoke命令行选项不会触发它(它是-gencrl暗示发行新 CRL 的选项)。

摘要:openssl ca -revoke”意味着毫无理由地读取 CA 私钥。随意从源代码中修补该工具,并可能将修补程序提交给 OpenSSL 维护者。

需要 CA 的私钥,因为撤销必须由 CA 签名。否则,撤销可能由任何实体完成。

Uwe Plonus 是对的。CA 始终提供一个吊销列表 ( CRL ),其中所有吊销的证书都按其序列号和其他信息(如 crt 吊销的日期时间)列出。

有关详细信息,请参阅http://www.openssl.org/docs/apps/crl.html#