是否仍然可以通过命令行为openssl证书指定基本约束

是否仍然可以通过命令行为openssl证书指定基本约束,ssl,openssl,Ssl,Openssl,我想在我的自签名CA创建脚本中包含一个basicConstraints=CA:TRUE,pathlen:0约束,如果我不必创建配置文件和适当CA的所有文件夹结构,那么这将大大简化我的过程 我正在尝试创建一个只能签署结束证书的中间证书,而不能签署进一步的CA。我将使用bouncycastle对所有进一步的证书进行签名,我需要为适当的CA创建的文件夹结构无论如何都不会被使用。您不需要创建OpenSSL配置文件,或者任何文件夹结构,以便使用OpenSSL创建自签名证书 例如,下面是一个最小的OpenS

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


我正在尝试创建一个只能签署结束证书的中间证书,而不能签署进一步的CA。我将使用bouncycastle对所有进一步的证书进行签名,我需要为适当的CA创建的文件夹结构无论如何都不会被使用。

您不需要创建OpenSSL配置文件,或者任何文件夹结构,以便使用OpenSSL创建自签名证书

例如,下面是一个最小的OpenSSL配置文件可能包含的内容,用于根据您的要求设置基本约束扩展:

[req]
distinguished_name=dn
[ dn ]
[ ext ]
basicConstraints=CA:TRUE,pathlen:0
在这里,我使用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
CONFIG=”
[请求]
可分辨名称=dn
[dn]
[分机]
basicConstraints=CA:TRUE,路径:0
"
openssl请求-配置添加
basicConstraints
而不添加
openssl.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}"

这似乎不是软件开发的问题。此外,您没有包括当前使用的参数。通常,openssl.exe将自动在证书中包含
basicConstraints
,其中
Subject Type=CA
Path Length Constraint=None
。我尝试了
openssl-ecparam-out myCA.key-name secp384r1-genkey
openssl-req-x509-new-sha384-key myCA.key-out myCA.pem-outform pem-days 3650-subj”/C=DE/O=OK soft GmbH/OU=Research/CN=CA Authority“
。可以添加
-extensions v3_ca
以引用
v3_ca
或默认的
openssl.cfg
,但结果相同。我建议您验证
openssl.cfg
req
部分是否包含
x509_extensions=v3_ca
条目。我假设您只是以其他方式创建CA证书(不使用
openssl-req…
)这就是问题的原因。我创建CA时使用了以下内容:
openssl-genrsa-des3-out$KEYS_DIR/CA.key 4096
openssl-req-new-x509-days 36500-key$KEYS_DIR/CA.key-out$KEYS_DIR/CA.crt
我希望有一种方法可以将基本约束添加到第二行,我想不用配置文件。默认配置具有
[v3_-req]
配置和
basicConstraints=CA:false
[v3_-CA]
配置和
basicConstraints=CA:true
,我需要上面的特定约束,而不使用配置文件。抱歉,我阅读了RFC 2459的部分:“如果未显示pathLenConstraint,则证书路径的允许长度没有限制。“因此,您确实需要添加
路径长度约束=0
,以防止CA签名。它是一个文件。你就是看不到。但明确提到它是一种巴什主义值得称赞。从技术上讲,像
这样的人可以使用cacert.pem中的
openssl x509-text-检查输出,因为设置
临界值、CA:TRUE
临界值非常容易,CA:FALSE
同时在同一证书上,这可能会导致未定义的行为…OpenSSL 1.1.1中引入了
addext
选项。我认为OpenSSL 1.1.1在默认情况下添加了
CRITICAL,CA:TRUE
。。。因此,如果您使用不同的值再次添加它,则会添加两个扩展名:/What's a
-removeext
选项?我已经找到了。您需要在openssl中注释掉相应的行。cnf@PawełGościcki是哪一行?