非交互式创建SSL证书请求


15

是否可以通过在初始命令上指定所有必需的参数来创建SSL证书请求的方法?我写一个基于CLI的Web服务器的控制面板和我想避免使用预期执行时,openssl如果可能的话。

这是创建证书请求的典型方法:

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr
Generating a 2048 bit RSA private key
.................................................+++
........................................+++
writing new private key to 'foobar.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New Sweden
Locality Name (eg, city) []:Stockholm
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Scandanavian Ventures, Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:foobar.com
Email Address []:gustav@foobar.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:FooBar

我希望看到这样的内容:( 不起作用的示例)

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr \
-Country US \
-State "New Sweden" \
-Locality Stockholm \
-Organization "Scandanavian Ventures, Inc." \
-CommonName  foobar.com \
-EmailAddress gustav@foobar.com \
-Company FooBar

精美的手册页对此无话可说,我也无法通过Google找到任何东西。SSL证书请求生成必须是交互式过程,还是有某种方法可以在单个命令中指定所有参数?

这是在Debian衍生的Linux发行版上运行的openssl 1.0.1



@ceejayoz:很好,谢谢。א)这些openssl标志在哪里记录?ב)您在Google上找到了什么?谢谢!
dotancohen 2014年

1
我用Google搜索“ CSR生成脚本”。该-subj参数在openssl.org/docs/apps/req.html上有详细记录(不是很详细)。
ceejayoz 2014年

也可以创建一个通常称为的配置文件openssl.cnf
sebix

Answers:


16

您缺少两部分:

主题行,可以称为

-subj "/C=US/ST=New Sweden/L=Stockholm /O=.../OU=.../CN=.../emailAddress=..."
  • 替换...与值,X=作为X509代码(ø rganisation / ö rganisation ü尼特/等...)

密码值,可以称为

-passout pass:client11
-passin  pass:client11
  • 给出输出/输入密码

我要求新钥匙的样子

openssl genrsa -aes256 -out lib/client1.key -passout pass:client11 1024
openssl rsa -in lib/client1.key -passin pass:client11 -out lib/client1-nokey.key

openssl req -new -key lib/client1.key -subj req -new \
    -passin pass:client11 -out lib/client1.csr \
    -subj "/C=US/ST=New Sweden/L=Stockholm/O=.../OU=.../CN=.../emailAddress=..."

(现在我看到了,有两个-new……)


2

-batch按照官方文档中所述检查选项。


2
谢谢。我看到存在批处理选项,但是似乎没有关于如何使用它的解释。
dotancohen 2014年

为什么这个答案不好?批量解决问题是否可行?从名字上看,听起来可能就是这样。
dotancohen 2014年

绝对是使用-batch选项执行此操作的唯一方法,为什么我对此一无所知。由于“ -batch”选项,陈述“关于此事无话可说”的陈述是错误的。
弹出

赞成提及批处理,即使我未在解决方案中使用它,也可能在将来派上用场。
dotancohen 2014年

-1

我附加到我的常规openssl命令中:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/key.pem -out /etc/ssl/private/cert.pem

这行:

-subj "/C=PE/ST=Lima/L=Lima/O=Acme Inc. /OU=IT Department/CN=acme.com"

描述:

  • 国家/地区名称(2个字母代码)[AU]:PE
  • 州或省名称(全名)[Some-State]:利马
  • 地点名称(例如城市)[]:利马
  • 组织名称(例如公司)[Internet Widgits Pty Ltd]:Acme Inc.
  • 组织单位名称(例如,科)[]:IT部门
  • 通用名称(例如服务器FQDN或您的姓名)[]:acme.com

像分隔符一样使用“ /”。


1
似乎已接受的答案已包含此信息。否则,谢谢。
dotancohen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.