OpenSSL을 사용하면 " '무작위 상태'를 쓸 수 없습니다"는 무엇을 의미합니까?


407

서버의 관리자 섹션을 보호하기 위해 자체 서명 된 SSL 인증서를 생성하고 있으며 OpenSSL에서이 메시지를 계속받습니다.

'무작위 상태'를 쓸 수 없습니다

이것은 무엇을 의미 하는가?

이것은 우분투 서버에 있습니다. 최근의 보안 취약점을 해결하기 위해 libssl을 업그레이드했습니다 .

답변:


555

실제로,이 문제가 발생하는 가장 일반적인 이유는 홈 디렉토리의 .rnd 파일이 계정이 아닌 루트가 소유하고 있기 때문입니다. 빠른 수정 사항 :

sudo rm ~/.rnd

자세한 내용은 OpenSSL FAQ 의 항목입니다 .

때때로 openssl 명령 행 유틸리티가 "PRNG not seeded"오류 메시지와 함께 중단되지 않지만 "random state"를 쓸 수 없음을 불평합니다. 이 메시지는 기본 시드 파일을 나타냅니다 (이전 답변 참조). 가능한 이유는 RANDFILE이나 HOME이 설정되어 있지 않기 때문에 기본 파일 이름이 알려져 있지 않기 때문입니다. (이 경우 최대 0.9.6 버전은 현재 디렉토리에서 ".rnd"파일을 사용했지만 0.9.6a로 변경되었습니다.)

따라서 RANDFILE, HOME 및 파일 시스템의 해당 위치에 쓸 수있는 권한을 확인합니다.

모든 것이 정상인 것처럼 보이는 경우 strace로 실행하여 정확히 무슨 일이 일어나고 있는지 볼 수 있습니다.


42
".rnd"파일이 내 사용자가 아닌 루트에 의해 소유 되었기 때문에 시스템에서이 문제가 발생했습니다. 빨리 sudo chown user:user ~/.rnd모든 것이 해결되었습니다.
HalfBrian

1
OP와 같은 문제가있었습니다. 나는 그 sudo일을했고 효과가있었습니다. 그러나 .rnd자체 서명 된 인증서를 작성한 후에도 $ HOME에 루트 가 소유 한 디렉토리 가 여전히있는 이유는 무엇입니까?
Luc M

3
예, PHP 웹 서버에서 실행하는 경우 사용자는 www-data이며 모든 openssl 앞에 "내보내기"를 추가해야합니다. shell_exec ( 'export RANDFILE = ". rnd"; openssl ecparam -genkey -name secp256k1'))
diyism

2
PHP와 같은 스크립팅 언어를 사용하여 openssl을 www-data로 호출하는 경우이를 생성 /var/www/.rnd하고 이를 통해 해결할 수 있습니다 www-data. ( /var/wwwwww-data폴더는 대부분의 시스템에있는 홈 폴더 라고 가정합니다 .로 www-data홈 폴더를 확인할 수 있습니다 cat /etc/passwd | grep www-data)
Nick

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 설정 제안으로 = 관리자로 cmd를 온라인을하지 않고 나를 위해 일한 .rnd
베토 슬라 프 Marinov을

16

분명히 시드 파일에 대한 권한을 갖기 위해 OpenSSL을 루트로 실행해야했습니다.


16
루트로 한 번 실행 한 경우 홈 디렉토리의 .rnd 파일이 루트 전용 권한으로 작성된 것입니다. 이것은 얼마 전에 나에게 일어났다. .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 비트 버전을 설치했기 때문입니다 (원하는대로).
symbiont

4
그것은 속임수를 쓰고 관리자로 실행할 필요가 없었습니다. 감사! 사실, 나는 간단하게 사용했습니다set HOME=.
Synetech

6

내 문제는 내 홈 디렉토리에 .rnd가 있지만 루트가 소유하고 있다는 것입니다. 그것을 삭제하고 openssl 명령을 다시 발행하면이 문제가 해결되었습니다.


5

$ RANDFILE 환경 변수를 설정하거나 $ HOME / .rnd 파일을 작성해야합니다. ( OpenSSL FAQ ). (물론, 당신은 그 파일에 대한 권리를 가져야합니다. 다른 사람들의 대답은 그것에 관한 것입니다. 그러나 먼저 파일과 그에 대한 참조가 있어야합니다.)

버전 0.9.6까지 OpenSSL은 ".rnd"파일의 현재 디렉토리에 시드 파일을 썼습니다. 버전 0.9.6a에는 기본 시딩 파일이 없습니다. OpenSSL 0.9.6b 이상은 0.9.6a와 유사하게 작동하지만 환경 변수가 설정되지 않은 경우 Windows 시스템에서 HOME에 기본값 "C : \"를 사용합니다.

기본 시딩 파일이 없거나 너무 짧은 경우 "PRNG not seeded"오류 메시지가 발생할 수 있습니다.

$ RANDFILE 환경 변수 및 $ HOME / .rnd는 OpenSSL 명령 행 도구에서만 사용됩니다. OpenSSL 라이브러리를 사용하는 응용 프로그램은 엔트로피 소스를 지정하기위한 자체 구성 옵션을 제공합니다. 응용 프로그램과 함께 제공되는 설명서를 확인하십시오.


1

오늘 AWS Lambda에서이 문제에 직면했습니다. 환경 변수 RANDFILE = /tmp/.random을 만들었습니다.

그 트릭을했다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.