キーを生成するために次のコードを使用しています。
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つ質問があります。
パスフレーズの入力をスキップする方法を教えてください。私がそうすることは合理的に安全でしょうか? (誰かが証明書をハッキングすることができるべきであるようにそれで実に愚かであるべきではない)
国名や組織名などの入力を促さないようにするにはどうすればよいですか?プロンプトでコマンドを入力できるようにしてください(OpenSSLの最上位オプションのみがマニュアルページに表示されます)。
編集:これは私の最も一般的な答えで、今から数年経ちましたので、私は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
を参照してください。
具体的にあなたの質問に対処し、どのオプションが有効であるかについてより明確にします。
-nodes
フラグはキーを暗号化しないように通知するので、パスワードは不要です。 -passout arg
フラグを使うこともできます。引数のフォーマット方法については、openssl(1)
のmanページのPASS PHRASE ARGUMENTS
を参照してください。
-subj
フラグを使用して件名を指定できます(例は上にあります)。
-passin
オプションはあなたのためのトリックをしませんか?
file:pathname
フォームを使えば、そのファイルに対するパーミッション600を使用しても安全です。
受け入れられた答えはいくつかの小さな修正を必要とします。 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
次のコマンドを試してください。
openssl genrsa -des3 -out user.key -passout pass:foo 1024
スキップ部分は-passout pass:foo
です。
@bahamatは素晴らしい答えを持っています。残念ながら、opensslの一部のバージョンでは、1つのコマンドでECDSA証明書を作成しようとするとエラーが発生します。エラーは次のようになります。
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