Menggunakan OpenSSL apa artinya "tidak dapat menulis 'keadaan acak'"?

407

Saya membuat sertifikat SSL yang ditandatangani sendiri untuk melindungi bagian admin server saya, dan saya terus mendapatkan pesan ini dari OpenSSL:

tidak dapat menulis 'keadaan acak'

Apa artinya ini?

Ini ada di server Ubuntu. Saya telah meningkatkan libssl untuk memperbaiki kerentanan keamanan baru-baru ini .

Luke Francl
sumber

Jawaban:

556

Dalam praktiknya, alasan paling umum terjadinya hal ini adalah file .rnd di direktori home Anda dimiliki oleh root daripada akun Anda. Perbaikan cepat:

sudo rm ~/.rnd

Untuk informasi lebih lanjut, inilah entri dari FAQ OpenSSL :

Terkadang utilitas baris perintah openssl tidak dibatalkan dengan pesan kesalahan "PRNG tidak diunggulkan", tetapi mengeluh bahwa itu "tidak dapat menulis 'keadaan acak'". Pesan ini merujuk ke file seeding default (lihat jawaban sebelumnya). Alasan yang mungkin adalah tidak ada nama file default yang diketahui karena RANDFILE maupun HOME tidak diatur. (Versi hingga 0,9,6 menggunakan file ".rnd" dalam direktori saat ini dalam kasus ini, tetapi ini telah berubah dengan 0.9.6a.)

Jadi saya akan memeriksa RANDFILE, HOME, dan izin untuk menulis ke tempat-tempat di filesystem.

Jika semuanya tampak beres, Anda bisa mencoba berlari dengan strace dan melihat apa yang sebenarnya terjadi.

Ville Laurikari
sumber
42
Sistem saya memberi saya masalah ini karena file ".rnd" dimiliki oleh root daripada pengguna saya. A cepat sudo chown user:user ~/.rndmembuat semuanya berhasil.
HalfBrian
1
Saya memiliki masalah yang sama dengan OP. Saya melakukan sudohal itu dan berhasil. Tetapi mengapa saya masih memiliki .rnddirektori dengan root di $ HOME saya setelah saya membuat sertifikat yang ditandatangani sendiri?
Luc M
3
Ya, jika Anda menjalankan dari server web php, pengguna adalah www-data, dan Anda harus menambahkan "ekspor" sebelum setiap openssl: shell_exec ('export RANDFILE = ". Rnd"; openssl ecparam -genkey -name secp256k1'))
diyism
2
Jika Anda menggunakan bahasa skrip seperti PHP untuk memanggil openssl sebagai www-data, Anda dapat menyelesaikannya dengan membuat /var/www/.rnddan mengolahnya www-data. (Dengan asumsi itu /var/wwwadalah www-datafolder rumah, yang ada di sebagian besar sistem. Anda dapat memeriksa www-datafolder rumah dengan cat /etc/passwd | grep www-data)
Nick
1
Saya menggunakan Windows - tentu saja, saya perlu menjalankan prompt CMD sebagai Administrator! Melakukannya, mengatasi masalah ini.
NickBeaugié
264

Saya tahu pertanyaan ini ada di Linux, tetapi di windows saya punya masalah yang sama. Ternyata Anda harus memulai command prompt dalam mode "Run As Administrator" agar bisa berfungsi. Kalau tidak, Anda mendapatkan hal yang sama: tidak dapat menulis kesalahan 'keadaan acak'.

Rumah pantai
sumber
13
Saya menjalankan pada windows sebagai administrator tetapi masih mendapatkan kesalahan
Smalcat
6
Menjadi administrator di mesin dan menggunakan "Run As Administrator" berbeda. "Run As Administrator" memaksa program untuk dijalankan sebagai Administrator, jika tidak, bahkan ketika Anda seorang administrator, prompt akan berjalan dengan izin keamanan non-administrator.
Beachhouse
67
Jika Anda menjalankan dalam mode administrator dan Anda masih menerima "Tidak dapat menulis 'keadaan acak'", solusi lain adalah set RANDFILE=.rndsebelum menjalankan openssl.
jevon
3
Dalam Powershell ini $env:RANDFILE=".rnd"bukan set RANDFILE=.rnd.
x5657
Apa downside dari TIDAK melakukan itu?
StanTastic
41

Satu masalah lain pada platform Windows, pastikan Anda menjalankan command prompt Anda sebagai Pengguna Administratif!

Saya tidak tahu berapa kali ini telah menggigit saya ...

joel
sumber
1
seperti yang lainnya sarankan untuk mengatur set ini RANDFILE = .rnd bekerja untuk saya tanpa melakukan cmd line dengan Administrator
Svetoslav Marinov
16

Rupanya, saya perlu menjalankan OpenSSL sebagai root agar dapat memiliki izin ke file seeding.

Luke Francl
sumber
16
Kemungkinan besar Anda pernah menjalankannya sebagai root di mana file .rnd di direktori home Anda dibuat dengan izin yang ditetapkan untuk root saja. Ini terjadi pada saya beberapa waktu lalu. Penghapusan .rnd memecahkan masalah.
fotNelton
13

Saya memiliki hal yang sama di server windows. Kemudian saya mencari tahu dengan mengubah vars.batyang:

set HOME=C:\Program Files (x86)\OpenVPN\easy-rsa

kemudian ulangi dari awal dan semuanya harus baik-baik saja.

Jusuf
sumber
itu dia! Terima kasih. saya membuat perubahan ini tepat di antara perintah "init-config" dan "vars", dari instruksi (di sini: openvpn.net/index.php/open-source/documentation/howto.html#pki ). pasti karena saya menginstal versi 32-bit (yang saya inginkan).
symbiont
4
Itu berhasil, dan saya tidak harus menjalankan sebagai admin. Terima kasih! Bahkan, saya hanya menggunakanset HOME=.
Synetech
6

Masalahnya bagi saya adalah saya memiliki .rnd di direktori home saya tetapi dimiliki oleh root. Menghapusnya dan menerbitkan kembali perintah openssl memperbaiki ini.

Zds
sumber
6

Anda harus mengatur variabel lingkungan $ RANDFILE dan / atau membuat file $ HOME / .rnd. ( FAQ OpenSSL ). (Tentu saja, Anda harus memiliki hak untuk file itu. Jawaban lain di sini adalah tentang itu. Tapi pertama-tama Anda harus memiliki file dan referensi untuk itu.)

Hingga versi 0.9.6 OpenSSL menulis file seeding di direktori saat ini di file ".rnd". Pada versi 0.9.6a Anda tidak memiliki file seeding default. OpenSSL 0.9.6b dan yang lebih baru akan berperilaku sama dengan 0.9.6a, tetapi akan menggunakan default "C: \" untuk HOME pada sistem Windows jika variabel lingkungan belum ditetapkan.

Jika file seeding default tidak ada atau terlalu pendek, pesan kesalahan "PRNG not seeded" dapat terjadi.

Variabel lingkungan $ RANDFILE dan $ HOME / .rnd hanya digunakan oleh alat baris perintah OpenSSL. Aplikasi yang menggunakan pustaka OpenSSL menyediakan opsi konfigurasi sendiri untuk menentukan sumber entropi, silakan lihat dokumentasi yang menyertai aplikasi tersebut.

Gangnus
sumber
2

Saya telah menemukan masalah ini hari ini di AWS Lambda. Saya membuat variabel lingkungan RANDFILE = /tmp/.random

Itu berhasil.

Guilherme Mussi
sumber