Що використовує OpenSSL, що означає "не в змозі записати" випадковий стан "?


407

Я генерую самопідписаний сертифікат SSL для захисту адміністратора розділу мого сервера, і я продовжую отримувати це повідомлення від OpenSSL:

не в змозі написати "випадковий стан"

Що це означає?

Це на сервері Ubuntu. Я оновив libssl, щоб виправити недавню вразливість безпеки .

Відповіді:


555

На практиці, найпоширенішою причиною цього явища, здається, є те, що файл .rnd у вашому домашньому каталозі належить root, а не ваш обліковий запис. Швидке виправлення:

sudo rm ~/.rnd

Для отримання додаткової інформації, ось запис із FAQ FAQ :

Іноді утиліта командного рядка openssl не перериває повідомлення про помилку "PRNG not seeded", але скаржиться, що "не в змозі написати" випадковий стан "". Це повідомлення стосується файлу висіву за замовчуванням (див. Попередню відповідь). Можлива причина полягає в тому, що невідоме ім’я файлу за замовчуванням не відомо, оскільки не встановлено ні RANDFILE, ні HOME. (Версії до 0.9.6 використовували файл ".rnd" у поточному каталозі в цьому випадку, але це змінилося з 0.9.6a.)

Тож я би перевірив RANDFILE, HOME та дозволи на запис у ті місця файлової системи.

Якщо все здається в порядку, ви можете спробувати бігати з напругою і подивитися, що саме відбувається.


42
Моя система давала мені цю проблему, оскільки файл ".rnd" належав root, а не мій користувач. Швидкий sudo chown user:user ~/.rndзмусив все вийти.
HalfBrian

1
У мене була така ж проблема, як у ОП. Я зробив цю sudoсправу, і це спрацювало. Але чому я все-таки маю .rndкаталог, відібраний коренем, у своєму $ HOME після створення сертифіката, який підписав самостійно?
Люк М

3
Так, якщо ви працюєте з веб-сервера php, користувач використовує www-data, і вам слід додати "експортувати" перед кожним opensl: shell_exec ('експортувати RANDFILE = ". Rnd"; openssl ecparam -genkey -name secp256k1'))
диїзм

2
Якщо ви використовуєте мову сценаріїв на зразок PHP для виклику openssl як www-даних, ви можете вирішити це, створивши /var/www/.rndта замовчуючи його www-data. (Припустимо, що /var/wwwце www-dataдомашня папка, яка є в більшості систем. Ви можете перевірити www-dataдомашню папку cat /etc/passwd | grep www-data)
Нік

1
Я використовував Windows - звичайно, мені потрібно було запустити підказку CMD як адміністратор! Тим самим вирішив цю проблему.
NickBeaugié

264

Я знаю, що це питання є в Linux, але в Windows у мене була та сама проблема. Виявляється, вам потрібно запустити командний рядок в режимі "Запустити як адміністратор", щоб він працював. Інакше ви отримуєте те саме: не можете написати помилку "випадкового стану".


13
Я працюю на Windows як адміністратор, але все ж отримую помилку
Smalcat

6
Бути адміністратором на машині та використовувати "Запустити як адміністратор" відрізняються. "Запустити як адміністратор" змушує програму запускатись як адміністратор, інакше навіть якщо ви адміністратор, підказка буде працювати з дозволом безпеки не адміністратора.
Beachhouse

66
Якщо ви працюєте в режимі адміністратора, і ви все ще отримуєте "Неможливо записати" випадковий стан "", set RANDFILE=.rndперед виконанням іншого рішення openssl.
jevon

3
У Powershell це $env:RANDFILE=".rnd"скоріше set RANDFILE=.rnd.
x5657

Який мінус НЕ робити цього?
StanTastic

41

Ще одна проблема на платформі Windows, переконайтеся, що ви запускаєте командний рядок як адміністративний користувач!

Я не знаю, скільки разів мене це вкусило ...


як інші запропонували встановити цей набір RANDFILE = .rnd працював на мене, не виконуючи cmd-рядок з адміністратором
Светослав Маринов

16

Мабуть, мені потрібно було запустити OpenSSL як root, щоб він мав дозвіл на файл висіву.


16
Більш ймовірно, що ви один раз запустили його як root, після чого файл .rnd у вашому домашньому каталозі був створений з дозволами, встановленими лише для root. Це сталося зі мною назад. Видалення .rnd вирішило проблему.
fotNelton

12

У мене те саме було на сервері Windows. Тоді я зрозумів, змінивши те, vars.batщо є:

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

потім повторіть з початку і все повинно бути добре.


це було все! Дякую. Я вніс цю зміну прямо між командами "init-config" та "vars" з інструкцій (тут: openvpn.net/index.php/open-source/documentation/howto.html#pki ). повинно бути, тому що я встановив 32-бітну версію (яку я віддаю перевагу).
симбіонт

4
Це зробило трюк, і мені не довелося працювати адміністратором. Дякую! Насправді я просто використовувавset HOME=.
Synetech

6

Проблема для мене полягала в тому, що я мав .rnd у своєму домашньому каталозі, але він був власником root. Видалення та повторне видання команди openssl виправили це.


5

Вам слід встановити змінну середовища $ RANDFILE та / або створити файл $ HOME / .rnd. ( FAQ FAQ ).(Звичайно, ви повинні мати права на цей файл. Інші відповіді тут про це. Але спочатку ви повинні мати файл та посилання на нього.)

До версії 0.9.6 OpenSSL записав файл висіву у поточний каталог у файл ".rnd". У версії 0.9.6a у вас немає файлу висіву за замовчуванням. OpenSSL 0.9.6b і пізніші версії будуть поводитись аналогічно 0.9.6a, але використовуватимуть за замовчуванням "C: \" для HOME у системах Windows, якщо змінна середовища не була встановлена.

Якщо файл висіву за замовчуванням не існує або занадто короткий, може з’явитися повідомлення про помилку «PRNG не засіяно».

Змінна середовища $ RANDFILE та $ HOME / .rnd використовуються лише інструментами командного рядка OpenSSL. Програми, що використовують бібліотеку OpenSSL, надають власні параметри конфігурації для визначення джерела ентропії, будь ласка, ознайомтеся з документацією, що постачається разом із додатком.


1

Я сьогодні зіткнувся з цією проблемою на AWS Lambda. Я створив змінну середовища RANDFILE = /tmp/.random

Це зробило трюк.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.