Pertama - apa yang terjadi jika saya tidak memberikan frasa sandi? Apakah semacam frase pseudo random digunakan? Saya hanya mencari sesuatu yang "cukup baik" untuk mencegah peretas biasa.
Kedua - bagaimana cara membuat pasangan kunci dari baris perintah, memberikan frasa sandi pada baris perintah?
Saya akhirnya membuatnya berfungsi menggunakan perintah ini, menggunakan exec () yang umumnya dianggap tidak aman untuk digunakan, lebih baik memberikan PassPhrase dalam sebuah file. Saya dapat menerima risiko ini karena saya yakin bahwa PHP hanya akan dijalankan di PC saya (yang menjalankan windows & tidak memiliki perintah PS).
openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub
Banyak terima kasih kepada @caf, yang tanpanya hal ini tidak akan mungkin terjadi.
Hanya satu penyesalan - bahwa, tidak peduli berapa banyak saya Google, tidak ada yang bisa openssl_pkey_new()
bekerja dengan Xampp di Windows (yang merupakan cara yang tepat untuk menghasilkan pasangan kunci)
openssl_pkey_new()
... cara yang "tepat" untuk menghasilkan pasangan kunci?ps
tetapi sejak Vista memilikiwmic process get commandline
Jawaban:
Jika Anda tidak menggunakan frasa sandi, maka kunci privat tidak dienkripsi dengan penyandian simetris apa pun - keluarannya sama sekali tidak terlindungi.
Anda dapat membuat pasangan kunci, memberikan kata sandi pada baris perintah menggunakan permintaan seperti (dalam hal ini, kata sandinya adalah
foobar
):Namun, perhatikan bahwa frasa sandi ini dapat diambil oleh proses lain yang berjalan di mesin pada saat itu, karena argumen baris perintah umumnya terlihat oleh semua proses.
Alternatif yang lebih baik adalah menulis frasa sandi ke dalam file sementara yang dilindungi dengan izin file, dan menentukan bahwa:
Atau berikan frasa sandi pada input standar:
Anda juga dapat menggunakan pipa bernama dengan
file:
opsi, atau deskriptor file.Untuk kemudian mendapatkan kunci publik yang cocok, Anda perlu menggunakan
openssl rsa
, memberikan frasa sandi yang sama dengan-passin
parameter seperti yang digunakan untuk mengenkripsi kunci pribadi:(Ini mengharapkan kunci pribadi terenkripsi pada input standar - sebagai gantinya Anda dapat membacanya dari file menggunakan
-in <file>
).Contoh pembuatan pasangan kunci pribadi dan publik 3072-bit dalam file, dengan pasangan kunci pribadi yang dienkripsi dengan kata sandi
foobar
:sumber
openssl
Perintah Anda mengeluarkan kunci publik yang sesuai dengan kunci pribadi yang disediakan - kunci publik tidak dienkripsi (bukan rahasia), jadi penggunaan-passout
tidak masuk akal. Anda mungkin ingin menggunakannya di-passin
sana, untuk memberikan frasa sandi yang digunakan untuk mengenkripsi kunci privat pada langkah pertama. Saya juga menambahkan sesuatu ke jawabannya.openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pem
tidak melakukannya. Bisakah Anda memberi saya dua perintah - satu untuk membuat kunci pribadi menjadi file dan yang kedua untuk membuat kunci publik (juga dalam file)? Maaf mengganggu, tapi saya telah bermain-main dengannya & tidak bisa membuatnya bekerja :-(-out
parameter muncul setelah2048
- sungguh, itu seharusnya menjadi hal terakhir pada baris perintah (saya telah memperbarui jawaban saya seperti itu). Lihat contoh terakhir, saya pikir itu yang Anda inginkan. Adapun AES-128, seseorang yang saya percayai dalam masalah ini merekomendasikannya melalui AES-256.genrsa
telah diganti olehgenpkey
& ketika dijalankan secara manual di terminal, ia akan meminta kata sandi:Namun ketika dijalankan dari skrip, perintah tidak akan meminta kata sandi sehingga untuk menghindari kata sandi dapat dilihat sebagai proses gunakan fungsi dalam
shell
skrip:sumber