无论如何都要通过命令行为openssl cert指定basicConstraints

Lev*_*sov 11 ssl openssl

我想basicConstraints=CA:TRUE,pathlen:0在我自己签名的CA创建脚本中包含一个约束,如果我不必创建配置文件和适当CA的所有文件夹结构,那么简化我的过程将会有很长的路要走.

我正在尝试创建一个只能签署最终证书的中间证书,而不是其他CA. 我将使用bouncycastle签署所有进一步的证书,无论如何我将不需要为正确的CA创建的文件夹结构.

Jim*_*ood 12

不是需要在所有创建的OpenSSL的配置文件,或文件夹结构,创建使用OpenSSL自签名的证书.

例如,以下是最小的OpenSSL配置文件可能包含的内容,用于设置基本约束扩展,如下所示:

[req]
distinguished_name=dn
[ dn ]
[ ext ]
basicConstraints=CA:TRUE,pathlen:0
Run Code Online (Sandbox Code Playgroud)

在这里,我使用OpenSSL从Bash shell创建一个自签名证书,只有这个"配置文件",它不是文件 - 它是一个shell变量:

CONFIG="
[req]
distinguished_name=dn
[ dn ]
[ ext ]
basicConstraints=CA:TRUE,pathlen:0
"

openssl req -config <(echo "$CONFIG") -new -newkey rsa:2048 -nodes \
  -subj "/CN=Hello" -x509 -extensions ext -keyout key.pem -out crt.pem
Run Code Online (Sandbox Code Playgroud)

祝好运!

  • 它是一个文件。你只是没有看到。但是,明确提到它是一种 bashism 值得称赞。 (4认同)

And*_*las 8

添加basicConstraintsopenssl.cnf

我看不到如何避免完全使用它,但是使用默认配置并注释掉命令行设置的内容似乎足够有效。

利用-addext可多次使用

给定一个已经存在privkey.pem的警告,例如 /etc/ssl/openssl.cnf没有相互矛盾的说明,以下内容似乎可以在没有bashism的情况下完成

DAYS='240'
SUBJECT='/CN=example.com/O=Example Co./OU=Engineering/L=Boston/ST=MA/C=US'
SERIAL='0x1001'

openssl req \
    -addext basicConstraints=critical,CA:TRUE,pathlen:1 \
    -outform pem -out cacert.pem \
    -key privkey.pem -new -x509 \
    -days "${DAYS}" \
    -subj "${SUBJECT}" \
    -set_serial "${SERIAL}"
Run Code Online (Sandbox Code Playgroud)

  • 我相信 OpenSSL 1.1.1 默认添加了 `CRITICAL,CA:TRUE`...所以如果您再次添加它,并使用不同的值,您将剩下两个添加的扩展:/是否有一个 `-removeext` 选项? (5认同)
  • OpenSSL 1.1.1中引入了“ addext”选项。 (4认同)
  • 弄清楚了。您需要注释掉 openssl.cnf 中的相应行 (4认同)
  • 使用例如 `openssl x509 -text -in cacert.pem` 检查输出,因为在同一证书上同时设置 `CRITICAL,CA:TRUE` 和 `CRITICAL,CA:FALSE` 相当容易 - 代表可能导致未定义行为的原因...... (2认同)