Apakah mungkin untuk membuat kunci RSA tanpa frasa sandi?


84

Saya bekerja dengan Apache2 dan Penumpang untuk proyek Rails. Saya ingin membuat Sertifikat SSL yang ditandatangani sendiri untuk tujuan pengujian.

sudo openssl rsa -des3 -in server.key -out server.key.new

Ketika saya memasukkan perintah di atas, katanya

writing RSA key
Enter PEM pass phrase:

Jika saya tidak memasukkan frasa sandi, saya mendapatkan kesalahan di bawah ini

unable to write key
3079317228:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:869:Yo
u must type in 4 to 1024 characters
3079317228:error:0906406D:PEM routines:PEM_def_callback:problems getting passwor
d:pem_lib.c:111:
3079317228:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:382

Apakah mungkin untuk membuat kunci RSA tanpa memberi pass phrase, karena saya tidak yakin bagaimana /etc/init.d/httpdskrip akan memulai server HTTP tanpa campur tangan manusia (yaitu Jika saya memberikan frasa sandi 4 karakter, saya berharap untuk memberikan ini saat memulai server HTTP Apache ).


6
Baris perintah Anda memberi tahu openssluntuk mengenkripsi kunci yang ada. Kedengarannya seperti sesuatu selain yang Anda inginkan.
David Schwartz

Apache httpd dapat dikonfigurasi untuk mendapatkan frasa sandi privatekey (non-aktif); lihat dokumen untuk mod_ssl, atau dalam banyak kasus komentar dalam file konfigurasi yang disediakan / dikemas. Namun, ini biasanya tidak lebih aman daripada hanya membiarkan privatekey tidak terenkripsi, yang lebih sederhana.
dave_thompson_085

Jawaban:


88

Jika Anda membuat sertifikat yang ditandatangani sendiri, Anda dapat melakukan kunci dan sertifikat dalam satu perintah seperti:

openssl req  -nodes -new -x509  -keyout server.key -out server.cert

Oh, dan apa yang @MadHatter katakan dalam jawabannya tentang menghilangkan -des3bendera.


14
Arahan node adalah mengapa saya di sini. (Tidak ada enkripsi DES dari kunci pribadi)
jorfus

39

Tinggalkan -des3flag, yang merupakan instruksi untuk openssl untuk mengenkripsi server.key.new (yang, kebetulan, bukan kunci baru sama sekali - itu persis sama dengan server.key, hanya dengan frasa sandi diubah / dilepas) .


21

The openssl reqperintah dari jawaban dengan @ Tom H adalah benar untuk membuat sertifikat yang ditandatangani sendiri di server.certincl. kunci pribadi RSA tanpa kata sandi di server.key:

openssl req -nodes -new -x509 -keyout server.key -out server.cert

Inilah cara kerjanya. Menghilangkan -des3seperti dalam jawaban oleh @MadHatter tidak cukup dalam hal ini untuk membuat kunci pribadi tanpa frasa sandi. Hal ini cukup untuk tujuan ini di openssl rsa( "mengkonversi kunci pribadi") perintah disebut oleh @MadHatter dan openssl genrsa( "membuat kunci pribadi") perintah. Hanya bukan untuk untuk openssl reqperintah di sini. Kami juga membutuhkan -nodes("Tidak ada enkripsi DES server.keytolong!").


17

Gunakan -nodesparameter, jika opsi ini ditentukan maka kunci pribadi tidak akan dienkripsi, misalnya:

openssl \
    req \
    -nodes \
    -newkey rsa:2048 \
    -keyout www.example.com.key \
    -out www.example.com.csr \
    -subj "/C=DE/ST=NRW/L=Berlin/O=My Inc/OU=DevOps/CN=www.example.com/emailAddress=dev@www.example.com"

7

Jalankan kembali melalui openssl

pertama-tama buat kunci dengan frasa sandi

kemudian openssl rsa -in server.key -out server.key


Ini tidak berfungsi di ubuntu 16.04
sweetfa

3
Saya downvoted karena jawaban ini bukan apa yang diminta, juga perintah membutuhkan input dan tidak menghasilkan kunci.
Don

Pengguna sudah menunjukkan bahwa mereka tahu cara membuat kunci. Jawaban ini dibangun di atas pengetahuan itu, dan saya menyarankan untuk mengambil kunci yang baru dihasilkan dan meneruskannya lagi. openssl Oleh karena itu, mencapai tujuan dari apa yang diminta: menghasilkan kunci tanpa frasa sandi.
darethas

Bekerja untuk saya, opensslpada Windows 10 dari GitBash. Terima kasih atas informasinya.
Hijau

0

Gunakan perintah berikutnya untuk menghasilkan file kunci privat tanpa password tanpa enkripsi . Parameter terakhir adalah ukuran kunci pribadi.

openssl genrsa -out my-passless-private.key 4096

1
Ini BUKAN tanpa kata sandi. Ini sepenuhnya dan seluruhnya kata sandi-ful.
dave_thompson_085

Saya sedang bereksperimen dengan posisi parameter. Sekarang sudah OK. Saya mengubah tempat dari dua parameter terakhir dan menguji perintah.
nix

Sekarang ini menghasilkan file yang tidak terenkripsi . Opsi setelah argumen posisi (hanya) diabaikan. Lihat file; itu tidak dienkripsi. Ganti 4096 -des3dengan 4096 -sillywombatdan masih berfungsi dan menghasilkan format yang sama, masih tidak terenkripsi (tetapi tentu saja nilai kunci yang berbeda). Tidak ada cara untuk memiliki file privatekey terenkripsi tanpa kata sandi, dan solusi yang benar untuk file tanpa enkripsi tanpa kata sandi diberikan enam tahun lalu.
dave_thompson_085

Kamu benar. @ dave_thompson_085. Parameter terakhir tidak mempengaruhi perintah. Saya memperbarui jawaban saya. Ini tidak menghasilkan base64 terenkripsi yang dienkripsi dan bukan file kunci pribadi yang dilindungi kata sandi.
nix
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.