2008-09-18 10 views

Respuesta

459

En la práctica, la razón más común de que esto ocurra parece ser que el archivo .rnd en su directorio de inicio es propiedad de la raíz en lugar de su cuenta. La solución rápida:

sudo rm ~/.rnd 

Para obtener más información, aquí está la entrada de la OpenSSL FAQ:

veces la utilidad de línea de comando openssl no aborta con un mensaje de error "no PRNG cabeza de serie", pero se queja de que es "incapaz de escribir 'estado aleatorio'". Este mensaje se refiere al archivo inicial de siembra (ver respuesta anterior). Una posible razón es que no se conoce ningún nombre de archivo predeterminado porque no se ha configurado RANDFILE ni HOME. (versiones hasta 0.9.6 usados ​​archivo ".rnd" en el directorio actual, en este caso, pero esto ha cambiado con 0.9.6a).

Así que comprobarían RANDFILE, hogar, y permisos para escribir esos lugares en el sistema de archivos.

Si todo parece estar en orden, puede intentar ejecutar con strace y ver qué está sucediendo exactamente.

+33

Mi sistema me estaba dando este problema porque el archivo ".rnd" era propiedad de root en lugar de mi usuario. Un rápido 'sudo chown usuario: usuario ~/.rnd' hizo que todo salga bien. – HalfBrian

+1

Tuve el mismo problema que OP. Hice lo de 'sudo' y funcionó. Pero ¿por qué todavía tengo un directorio '.rnd' importado por root en mi $ HOME después de crear un certificado autofirmado? –

+2

Sí, si se ejecuta desde el servidor web php, el usuario es www-data, y debe agregar "export" antes de cada openssl: shell_exec ('export RANDFILE = ". Rnd"; openssl ecparam -genkey -name secp256k1')) – diyism

15

Aparentemente, necesitaba ejecutar OpenSSL como root para que tenga permiso para el archivo de siembra.

+15

Es más probable que una vez * lo * haya ejecutado como raíz con el que se creó el archivo .rnd en su directorio personal con los permisos establecidos solo para el directorio raíz. Esto me pasó hace un tiempo. La eliminación de .rnd resolvió el problema. – fotNelton

6

El problema para mí era que tenía .rnd en mi directorio de inicio pero era propiedad de root. Eliminarlo y volver a ejecutar el comando openssl solucionó esto.

11

Tuve el mismo problema en el servidor de Windows. Entonces me di cuenta cambiando el vars.bat que es:

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

vuelva a realizar desde el principio y todo debería estar bien.

+0

eso fue todo! Gracias. Hice este cambio justo entre los comandos "init-config" y "vars", de las instrucciones (aquí: https://openvpn.net/index.php/open-source/documentation/howto.html#pki) . debe ser porque instalé la versión de 32 bits (que prefiero). – symbiont

+3

Eso hizo el truco, y no tuve que ejecutar como administrador. ¡Gracias! De hecho, simplemente utilicé 'set HOME = .' – Synetech

206

Sé que esta pregunta es sobre Linux, pero en Windows tuve el mismo problema. Resulta que debe iniciar el símbolo del sistema en el modo "Ejecutar como administrador" para que funcione. De lo contrario, obtienes lo mismo: no se puede escribir el error de "estado aleatorio".

+12

Me estoy ejecutando en Windows como administrador pero aún recibo el error – Smalcat

+4

Ser un administrador en la máquina y usar" Ejecutar como administrador "son diferentes. "Ejecutar como administrador" obliga al programa a ejecutarse como administrador; de lo contrario, incluso cuando sea un administrador, el aviso se ejecutará con una autorización de seguridad que no sea de administrador. – Beachhouse

+47

Si está ejecutando en modo de administrador y todavía está recibiendo "No se puede escribir 'estado aleatorio'", otra solución es ['establecer RANDFILE = .rnd'] (http://stackoverflow.com/questions/2229723/how -do-i-make-openssl-write-the-randfile-on-windows-vista) antes de ejecutar 'openssl'. – jevon

35

Otro problema en la plataforma de Windows, asegúrese de que está ejecutando el símbolo del sistema como usuario administrativo.

No sé cuántas veces esto me ha mordido ...

+2

¿Cuántas veces has respondido una pregunta con otras tres respuestas que dicen lo mismo? – jww

1

Debe establecer la variable de entorno $ RANDFILE y/o crear archivo $ HOME/.rnd. (OpenSSL FAQ). (Por supuesto, debe tener derechos sobre ese archivo. Otras respuestas aquí son sobre eso. Pero primero debe tener el archivo y una referencia al mismo.)

Hasta la versión 0.9.6 OpenSSL escribió el archivo de siembra en el directorio actual en el archivo ".rnd". En la versión 0.9.6a no tiene un archivo de inicialización predeterminado. OpenSSL 0.9.6b y posteriores se comportarán de manera similar a 0.9.6a, pero usarán un valor predeterminado de "C: \" para HOME en los sistemas Windows si la variable de entorno no se ha establecido.

Si el archivo de inicialización predeterminado no existe o es demasiado corto, puede aparecer el mensaje de error "PRNG no sembrado".

La variable de entorno $ RANDFILE y $ HOME/.rnd solo son utilizados por las herramientas de línea de comandos de OpenSSL. Las aplicaciones que usan la biblioteca OpenSSL proporcionan sus propias opciones de configuración para especificar la fuente de entropía, por favor revisa la documentación que viene con la aplicación.

Cuestiones relacionadas