web-dev-qa-db-ja.com

パスワードを避けるキーの入力を要求し、DN情報の入力を要求する

キーを生成するために次のコードを使用しています。

apt-get -qq -y install openssl;
mkdir -p /etc/Apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/Apache2/ssl/cert.pem;
mv server.key  /etc/Apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

2つ質問があります。

  1. パスフレーズの入力をスキップする方法を教えてください。私がそうすることは合理的に安全でしょうか? (誰かが証明書をハッキングすることができるべきであるようにそれで実に愚かであるべきではない)

  2. 国名や組織名などの入力を促さないようにするにはどうすればよいですか?プロンプトでコマンドを入力できるようにしてください(OpenSSLの最上位オプションのみがマニュアルページに表示されます)。

88
JP19

編集:これは私の最も一般的な答えで、今から数年経ちましたので、私はECDSAの亜種を追加しました。あなたがECDSAを使うことができるならば、あなたはそうするべきです。


あなたはコマンドラインでその情報の全てを供給することができます。

ワンステップ自己署名パスワードなしの証明書生成

RSAのバージョン

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

ECDSAバージョン

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

すべてのopensslサブコマンドに独自のmanページがあります。 man reqを参照してください。


具体的にあなたの質問に対処し、どのオプションが有効であるかについてより明確にします。

  1. -nodesフラグはキーを暗号化しないように通知するので、パスワードは不要です。 -passout argフラグを使うこともできます。引数のフォーマット方法については、openssl(1)のmanページのPASS PHRASE ARGUMENTSを参照してください。

  2. -subjフラグを使用して件名を指定できます(例は上にあります)。

147
bahamat

-passinオプションはあなたのためのトリックをしませんか?

file:pathnameフォームを使えば、そのファイルに対するパーミッション600を使用しても安全です。

10
9000

受け入れられた答えはいくつかの小さな修正を必要とします。 ECライン:

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

する必要があります:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

MacOS上で - OpenSSL 1.0.2fをbrew経由でインストールした私は下記のように受け入れられた答えを検証しました

  • 利用可能な楕円曲線をリストするには:

    $ openssl ecparam -list_curves
    
  • キーファイルを生成するには

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
    
  • パスワードなしで証明書を生成するには

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
    
  • 証明書を表示するには

    $ openssl x509 -noout -text -in server.crt
    
4
Andrei Sura

次のコマンドを試してください。

openssl genrsa -des3 -out user.key -passout pass:foo 1024

スキップ部分は-passout pass:fooです。

2
kenorb

@bahamatは素晴らしい答えを持っています。残念ながら、opensslの一部のバージョンでは、1つのコマンドでECDSA証明書を作成しようとするとエラーが発生します。エラーは次のようになります。

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

私はopenssl 1.0.1e-fipsCentOS 7を使っていました。

次の3つのコマンドで証明書を作成することはうまくいくようです。

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem
1
jxmallett