4

認証局を作成しましたが、50 以上の証明書を生成して署名する必要があります。このプロセスをスクリプト化したかったのです。パスワードを 100 回以上手動で入力する必要はありません。

これが私がハングアップしていたコマンドです:

openssl req -newkey rsa:1024 -keyout ~/myCA/tempkey.pem -keyform PEM -out ~/myCA/tempreq.pem -outform PEM

問題は、次のプロンプトでパスワードを作成する必要があることです。

Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

パスワードの入力を求められたときは、-passin pass:mypassコマンド ライン オプション for を使用できますopenssl。しかし、これはパスワードの作成には機能しないようです。

また、後でパスワードを削除するときにパスワードが必要になるのは奇妙に思えます:

openssl rsa < tempkey.pem > server_key.pem

簡単な 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"
}

しかし、これもうまくいかないようです。それでも、パスワードを作成するように求める手動のプロンプトが表示されます。

4

2 に答える 2

6

この回答で説明されているように、オプションを使用し-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"
于 2015-02-23T20:44:15.977 に答える
3

問題は、パスワードを必要とするほとんどのユーティリティが対話型端末を必要とすることです。したがって、(Ruby スクリプトで行ったように) 偽造しようとしても、うまくいきません。あなたも試すことができます:

echo -n "pass\npass\n" | openssl req ....

これは一部のプログラムでは機能しますが、インタラクティブ シェルを必要とするプログラムでは機能しません。

あなたはexpectというツールを探しています。UNIX/Linux/MacOS にインストールして、man ページを参照してください。

man expect
...
Expect is a program that "talks" to other interactive programs according to a script.  Following the script, Expect
knows what can be expected from a program and what the correct response should be.  An  interpreted  language  pro‐
vides  branching  and high-level control structures to direct the dialogue.  In addition, the user can take control
and interact directly when desired, afterward returning control to the script.
...

「expect スクリプト」を作成する必要があります。これは、環境 (アプリケーションが何を求めているか) によって異なります。パスワードのみの場合は、シンプルにする必要があります。より複雑な例を次に示します: http://fixunix.com/openssl/159046-expect-script-doesnt-create-newreq-pem.html

これでうまくいくはずです(少し変更する必要があるかもしれません):

#!/usr/bin/expect -f
spawn -console openssl req blah blah blah blah
expect "Enter PEM pass phrase:*" {send "password\r"}
expect "Verifying - Enter PEM pass phrase:*" {send "password\r"}

幸運を!

于 2013-03-13T09:58:33.917 に答える