Was bedeutet es unter Verwendung von OpenSSL, dass der Zufallsstatus nicht geschrieben werden kann?

407

Ich generiere ein selbstsigniertes SSL-Zertifikat, um den Administratorbereich meines Servers zu schützen, und erhalte weiterhin die folgende Nachricht von OpenSSL:

'zufälliger Zustand' kann nicht geschrieben werden

Was bedeutet das?

Dies ist auf einem Ubuntu-Server. Ich habe libssl aktualisiert, um die jüngste Sicherheitslücke zu beheben .

Luke Francl
quelle

Antworten:

555

In der Praxis scheint der häufigste Grund dafür zu sein, dass die .rnd-Datei in Ihrem Home-Verzeichnis eher root als Ihrem Konto gehört. Die schnelle Lösung:

sudo rm ~/.rnd

Weitere Informationen finden Sie im Eintrag aus den OpenSSL-FAQ :

Manchmal bricht das Befehlszeilenprogramm openssl nicht mit der Fehlermeldung "PRNG not seeded" ab, sondern beschwert sich darüber, dass es nicht in der Lage ist, einen "zufälligen Status" zu schreiben. Diese Nachricht bezieht sich auf die Standard-Seeding-Datei (siehe vorherige Antwort). Ein möglicher Grund ist, dass kein Standarddateiname bekannt ist, da weder RANDFILE noch HOME festgelegt sind. (In Versionen bis 0.9.6 wurde in diesem Fall die Datei ".rnd" im aktuellen Verzeichnis verwendet, dies hat sich jedoch mit 0.9.6a geändert.)

Also würde ich RANDFILE, HOME und die Berechtigungen zum Schreiben an diese Stellen im Dateisystem überprüfen.

Wenn alles in Ordnung zu sein scheint, können Sie versuchen, mit Strace zu laufen und zu sehen, was genau los ist.

Ville Laurikari
quelle
42
Mein System gab mir dieses Problem, weil die ".rnd" -Datei eher root als meinem Benutzer gehörte. Ein schnelles sudo chown user:user ~/.rndhat alles geklappt.
HalfBrian
1
Ich hatte das gleiche Problem wie OP. Ich habe das sudoDing gemacht und es hat funktioniert. Aber warum habe ich .rndnach dem Erstellen eines selbstsignierten Zertifikats immer noch ein Verzeichnis, das von root in meinem $ HOME erstellt wurde?
Luc M
3
Ja, wenn Sie von einem PHP-Webserver ausgeführt werden, ist der Benutzer www-data, und Sie sollten vor jedem openssl Folgendes hinzufügen: "shell_exec" ('export RANDFILE = ". Rnd"; openssl ecparam -genkey -name secp256k1'))
Diyismus
2
Wenn Sie eine Skriptsprache wie PHP verwenden, um openssl als www-Daten aufzurufen, können Sie dies lösen, indem Sie sie erstellen /var/www/.rndund in chowning umwandeln www-data. (Angenommen, dies /var/wwwist www-datader Home-Ordner, den es auf den meisten Systemen gibt. Sie können www-dataden Home-Ordner mit überprüfen cat /etc/passwd | grep www-data)
Nick
1
Ich habe Windows verwendet - natürlich musste ich die CMD-Eingabeaufforderung als Administrator ausführen! Damit habe ich dieses Problem umgangen.
NickBeaugié
264

Ich weiß, dass diese Frage unter Linux gestellt wird, aber unter Windows hatte ich das gleiche Problem. Es stellt sich heraus, dass Sie die Eingabeaufforderung im Modus "Als Administrator ausführen" starten müssen, damit sie funktioniert. Andernfalls erhalten Sie das gleiche: Es kann kein Fehler "Zufallsstatus" geschrieben werden.

Strandhaus
quelle
13
Ich
laufe unter
6
Ein Administrator auf dem Computer zu sein und "Als Administrator ausführen" zu verwenden, ist unterschiedlich. "Als Administrator ausführen" erzwingt die Ausführung des Programms als Administrator. Andernfalls wird die Eingabeaufforderung auch als Administrator mit einer Sicherheitsfreigabe ausgeführt, die kein Administrator ist.
Beachhouse
66
Wenn Sie im Administratormodus ausgeführt werden und weiterhin die Meldung "Zufälliger Status kann nicht geschrieben werden" erhalten, sollten Sie set RANDFILE=.rndvor der Ausführung eine andere Lösung wählen openssl.
Jevon
3
In Powershell ist dies $env:RANDFILE=".rnd"eher als set RANDFILE=.rnd.
x5657
Was ist der Nachteil, das NICHT zu tun?
StanTastic
41

Ein weiteres Problem auf der Windows-Plattform: Stellen Sie sicher, dass Sie Ihre Eingabeaufforderung als Administrator ausführen.

Ich weiß nicht, wie oft mich das gebissen hat ...

Joel
quelle
wie andere vorgeschlagen haben, diese Menge zu setzen RANDFILE = .rnd arbeitete für mich ohne cmd Linie mit Administrator
Svetoslav Marinov
16

Anscheinend musste ich OpenSSL als root ausführen, damit es die Berechtigung für die Seeding-Datei hatte.

Luke Francl
quelle
16
Es ist wahrscheinlicher , dass Sie einmal lief es als root woraufhin die .rnd Datei in Ihrem Home-Verzeichnis mit Berechtigungen für Stammsatz erstellt wurde nur. Das ist mir vor einiger Zeit passiert. Durch Löschen von .rnd wurde das Problem behoben.
fotNelton
12

Ich hatte das gleiche auf Windows Server. Dann habe ich herausgefunden, indem ich Folgendes geändert habe vars.bat:

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

dann von Anfang an wiederholen und alles sollte in Ordnung sein.

Jusuf
quelle
Das war's! Vielen Dank. Ich habe diese Änderung direkt zwischen den Befehlen "init-config" und "vars" aus den Anweisungen vorgenommen (hier: openvpn.net/index.php/open-source/documentation/howto.html#pki ). muss sein, weil ich die 32-Bit-Version installiert habe (was ich bevorzuge).
Symbiont
4
Das hat den Trick gemacht und ich musste nicht als Administrator laufen. Vielen Dank! Tatsächlich habe ich einfachset HOME=.
Synetech
6

Das Problem für mich war, dass ich .rnd in meinem Home-Verzeichnis hatte, aber es gehörte root. Das Löschen und erneute Ausgeben des Befehls openssl hat dies behoben.

Zds
quelle
5

Sie sollten die Umgebungsvariable $ RANDFILE festlegen und / oder die Datei $ HOME / .rnd erstellen. ( OpenSSL FAQ ). (Natürlich sollten Sie Rechte an dieser Datei haben. Andere Antworten hier beziehen sich darauf. Aber zuerst sollten Sie die Datei und einen Verweis darauf haben.)

Bis zur Version 0.9.6 hat OpenSSL die Seeding-Datei in das aktuelle Verzeichnis in der Datei ".rnd" geschrieben. In Version 0.9.6a haben Sie keine Standard-Seeding-Datei. OpenSSL 0.9.6b und höher verhält sich ähnlich wie 0.9.6a, verwendet jedoch auf Windows-Systemen den Standardwert "C: \" für HOME, wenn die Umgebungsvariable nicht festgelegt wurde.

Wenn die Standard-Seeding-Datei nicht vorhanden oder zu kurz ist, kann die Fehlermeldung "PRNG nicht gesät" auftreten.

Die Umgebungsvariablen $ RANDFILE und $ HOME / .rnd werden nur von den OpenSSL-Befehlszeilentools verwendet. Anwendungen, die die OpenSSL-Bibliothek verwenden, bieten ihre eigenen Konfigurationsoptionen zur Angabe der Entropiequelle. Weitere Informationen finden Sie in der Dokumentation, die mit der Anwendung geliefert wird.

Gangnus
quelle
1

Ich bin heute auf AWS Lambda auf dieses Problem gestoßen. Ich habe eine Umgebungsvariable RANDFILE = /tmp/.random erstellt

Das hat funktioniert.

Guilherme Mussi
quelle