キーのパスワードプロンプトとDN情報のプロンプトを避ける


90

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

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. 国名、組織などのプロンプトを回避するにはどうすればよいですか。コマンドプロンプトでそれらを提供できることを願っています(manページにはOpenSSLのトップレベルオプションのみが表示されます)

回答:


150

編集:これは間違いなく私の最も人気のある答えであり、それは数年前になったので、私は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 req


具体的に質問に対処し、どのオプションが有効であるかをより明確にするために:

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

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


3
「-subj」を介したものの読み取りは非常にうまくいきますが、私にとっては-OPENSSL_CONFが設定されていない場合のみです。IOW:OPENSSL_CONFが設定されている場合、OpenSSLはそこから読み取りを試み、「-subj」コマンドライン引数を無視します。しばらく理解してくれました。
oberstet

oberstet:はい、それは本当です。
バハマ

サブジェクトキー自体をstdinから渡すことはできますか?「-key stdin」、「-key fd:1」、「-key-」を試してみましたが、運がありません。
-oberstet

1
@JeremyBaker:いいえ、そのためには2段階のプロセスが必要です。省略-x509して-days、あなたの通常のCA署名方式を使用し、代わりに証明書のCSRを生成します。
バハマ

1
@jww-その時が来ました。Chrome v58以降、セキュリティで保護されたページを読み込もうとしたが、証明書に一致するsubjectAltNameが含まれていない場合、エラーメッセージ「NET :: ERR_CERT_COMMON_NAME_INVALID」を含むプライバシーエラーページが表示されます。[詳細設定]ボタンをクリックすると、「そのセキュリティ証明書は、[missing_subjectAltName]からです...」というメッセージを示す
不眠症ソフトウェア

11

しない-passinオプションはあなたのためにトリックを行いますか?

file:pathnameフォームあなたは、そのファイルのパーミッション600と非常に安全であることができます。


manページでオプションを見た。プロンプトなしでパスフレーズをそのまま使用できるようです。ありがとう!

そして-passin 'pass:YOUR_PASSWORD'?-ドキュメント:openssl.org/docs/man1.0.2/apps/...
andras.tim

5

受け入れられた答えには、いくつかの小さな修正が必要です。ECライン:

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

する必要があります:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

MacOS-brew経由でインストールされたOpenSSL 1.0.2fは、以下に説明するように、受け入れられた回答を検証しました

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

    $ 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
    

これは受け入れられた答えとどう違うのですか?
ラムハウンド

1
唯一の重要な違いは、pemファイルを生成するステップを明示的にリストしていることです。受け入れられた答えには2つの\文字がなく、コマンドが間違っていると思いました。
アンドレイスラ

1
あなたはその事実に言及したいかもしれません。受け入れられた回答が実際に不完全で、文字が欠落している場合、違いを強調し、回答に重要な重要な情報がどのように含まれるかを強調することが重要です。
ラムハウンド

3

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

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

スキップ部分は次のとおり-passout pass:fooです。


2

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

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

で使用openssl 1.0.1e-fipsしていましたCentOS 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

最後の行は次で終わるべきではありませんserver.crtか?
ᴠɪɴᴄᴇɴᴛ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.