Mic*_*rey 4 ruby command-line openssl input popen3
我已经创建了证书颁发机构,并且需要生成并签署50多个证书。我想编写这个过程的脚本。我不想手动输入密码100次以上!
这是我挂断的命令:
openssl req -newkey rsa:1024 -keyout ~/myCA/tempkey.pem -keyform PEM -out ~/myCA/tempreq.pem -outform PEM
Run Code Online (Sandbox Code Playgroud)
问题是,它要我用以下提示创建密码:
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Run Code Online (Sandbox Code Playgroud)
当系统仅要求我输入密码时,可以使用的-passin pass:mypass命令行选项openssl。但这似乎不适用于创建密码。
另外,当以后我最终将其删除时,需要输入密码似乎很奇怪:
openssl rsa < tempkey.pem > server_key.pem
Run Code Online (Sandbox Code Playgroud)
我尝试创建一个简单的Ruby脚本:
require 'open3'
Open3.popen2("openssl req -newkey rsa:1024 -keyout ~/myCA/tempkey.pem -keyform PEM -out ~/myCA/tempreq.pem -outform PEM") {|i,o,t|
i.puts "mySecretPassword"
i.puts "mySecretPassword"
}
Run Code Online (Sandbox Code Playgroud)
但这似乎也不起作用。我仍然遇到一个手动提示,要求我创建密码。
问题是大多数需要密码的实用程序确实需要交互式终端。因此,如果您尝试伪造它(就像您对 Ruby 脚本所做的那样),它将无法工作。您还可以尝试:
\n\necho -n "pass\\npass\\n" | openssl req ....\nRun Code Online (Sandbox Code Playgroud)\n\n虽然这适用于某些程序,但那些需要交互式 shell 的程序将不起作用。
\n\n您正在寻找名为expect 的工具。在 UNIX/Linux/MacOS 上安装它并查看手册页:
\n\nman expect\n...\nExpect is a program that "talks" to other interactive programs according to a script. Following the script, Expect\nknows what can be expected from a program and what the correct response should be. An interpreted language pro\xe2\x80\x90\nvides branching and high-level control structures to direct the dialogue. In addition, the user can take control\nand interact directly when desired, afterward returning control to the script.\n...\nRun Code Online (Sandbox Code Playgroud)\n\n您需要创建“期望脚本”,这实际上取决于您的环境 - 应用程序的要求。如果只是密码,应该很简单。这是更复杂的示例:http://fixunix.com/openssl/159046-expect-script-doesnt-create-newreq-pem.html
\n\n我认为这应该可行(你可能需要稍微改变一下):
\n\n#!/usr/bin/expect -f\nspawn -console openssl req blah blah blah blah\nexpect "Enter PEM pass phrase:*" {send "password\\r"}\nexpect "Verifying - Enter PEM pass phrase:*" {send "password\\r"}\nRun Code Online (Sandbox Code Playgroud)\n\n祝你好运!
\n如该答案中所述,您可以使用该-passout pass:foobar选项通过命令行设置密码。例如:
openssl req \
-newkey rsa:1024 -keyout ~/myCA/tempkey.pem -keyform PEM \
-out ~/myCA/tempreq.pem -outform PEM \
-passout pass:foobar \
-subj "/C=US/ST=Test/L=Test/O=Test/CN=localhost"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |