Buat sertifikat SSL non-interaktif [ditutup]

28

Saya ingin secara diam-diam, tidak interaktif, membuat sertifikat SSL. Yaitu, tanpa diminta data apa pun.

Cara normal saya membuat sertifikat adalah:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 \
    -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 

Saya mencoba yang berikut ini:

openssl genrsa -out server.key 2048
touch openssl.cnf

cat >> openssl.cnf <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = GB
ST = Test State
L = Test Locality
O = Org Name
OU = Org Unit Name
CN = Common Name
emailAddress = test@email.com
EOF

openssl req -x509 -config openssl.cnf -nodes -days 7300 \
    -signkey server.key -out /etc/ssl/private/pure-ftpd.pem 

Tapi saya masih mendapatkan prompt untuk data.

TheNiceGuy
sumber
1
Bisakah Anda memberikan penjelasan atau keluaran tentang apa yang terjadi alih-alih hasil yang diinginkan?
Patrick
Saya mendapatkan bantuan sebagai output- Apa pun yang salah dengan parameter di sini:openssl req -x509 -config openssl.cnf -nodes -days 7300 -signkey server.key -out /etc/ssl/private/pure-ftpd.pem
TheNiceGuy
Yang terbaik adalah memberikan output kesalahan ketika Anda mengalami masalah. Saya menduga masalah Anda karena -signkey. Ini bukan openssl reqopsi yang valid di sistem saya. Pesan kesalahan akan memiliki ini sebagai baris pertama:unknown option -signkey
Patrick
Nah, tanda kunci itu harus memberi tahu SSL untuk menggunakan kunci yang disediakan seperti yang saya tahu?
TheNiceGuy
"Cara normal Anda untuk membuat sertifikat" tidak meminta data apa pun. Apakah Anda tidak ingin itu menghasilkan sesuatu? Kemudian gunakan 2> /dev/null.
wingedsubmariner

Jawaban:

51

Hal yang Anda lewatkan adalah untuk menyertakan subjek sertifikat di -subjbendera. Saya lebih suka ini daripada membuat file konfigurasi karena lebih mudah untuk diintegrasikan ke dalam alur kerja dan tidak perlu dibersihkan sesudahnya.

Satu langkah kunci dan generasi csr:

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

Satu langkah pembuatan sertifikat tanpa kata sandi yang ditandatangani sendiri:

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

Tidak satu pun dari perintah ini akan meminta data apa pun.

Lihat jawaban saya untuk pertanyaan yang hampir identik pada Pengguna Super ini.

bahamat
sumber
O, itu solusi yang bagus. Membuat kode jauh lebih kecil. Terima kasih: D
TheNiceGuy
1
Saya tidak mengubah file konfigurasi aslinya, karena saya pikir itu mungkin standin untuk sertifikat yang lebih rumit. Beberapa konfigurasi yang tidak dapat direpresentasikan dengan -subjparameter, terutama ketika Anda masuk ke ekstensi v3 dan parameter subjectAltName.
robbat2
1
Anda juga dapat menggunakan -batch(mode non-interaktif)
Eran H.
Perhatikan bahwa perintah pertama tampaknya memerlukan kunci untuk ada sebelum dapat dieksekusi di mana perintah kedua membuat kunci dan sertifikat mereka secara otomatis karena -subjini adalah CSR in-line dasar yang valid.
dragon788
@ dragon788 Terima kasih telah menunjukkan itu. Aku telah memperbaikinya.
bahamat
1

Perintah yang Anda cari adalah:

openssl req -new -x509 -config openssl.cnf -nodes -days 7300 -key server.key -out /etc/ssl/private/pure-ftpd.pem

Perubahan dari versi Anda:

  • -new diperlukan untuk menghasilkan apa pun
  • -key digunakan sebagai pengganti -signkey
robbat2
sumber