คำตอบ:
ในทางปฏิบัติสาเหตุที่พบบ่อยที่สุดสำหรับเหตุการณ์นี้ดูเหมือนว่าไฟล์. rnd ในโฮมไดเร็กตอรี่ของคุณเป็นเจ้าของโดยรูทมากกว่าบัญชีของคุณ การแก้ไขอย่างรวดเร็ว:
sudo rm ~/.rnd
สำหรับข้อมูลเพิ่มเติมนี่คือรายการจากคำถามที่พบบ่อย OpenSSL :
บางครั้งยูทิลิตีบรรทัดคำสั่ง openssl จะไม่ยกเลิกด้วยข้อความแสดงข้อผิดพลาด "PRNG ไม่ได้ถูก seeded" แต่บ่นว่ามันเป็น "ไม่สามารถเขียน 'random state'" ข้อความนี้อ้างถึงไฟล์การเริ่มต้นที่เป็นค่าเริ่มต้น (ดูคำตอบก่อนหน้า) สาเหตุที่เป็นไปได้คือไม่รู้จักชื่อไฟล์เริ่มต้นเนื่องจากไม่ได้ตั้งค่าไฟล์ RANDFILE หรือ HOME (เวอร์ชันสูงสุด 0.9.6 ไฟล์ที่ใช้ ".rnd" ในไดเรกทอรีปัจจุบันในกรณีนี้ แต่กรณีนี้เปลี่ยนด้วย 0.9.6a)
ดังนั้นฉันจะตรวจสอบ RANDFILE, HOME และสิทธิ์ในการเขียนไปยังสถานที่เหล่านั้นในระบบไฟล์
หากทุกอย่างดูเหมือนจะเป็นระเบียบคุณสามารถลองวิ่งด้วยstraceและดูว่าเกิดอะไรขึ้น
sudo
สิ่งนั้นและใช้งานได้ แต่ทำไมฉันยังคงมี.rnd
ไดเรกทอรีที่ฉันเป็นเจ้าของโดยรูทใน $ HOME ของฉันหลังจากที่ฉันสร้างใบรับรองแบบลงนามด้วยตนเอง
/var/www/.rnd
และ Chowning www-data
มัน (สมมติว่า/var/www
เป็นwww-data
โฟลเดอร์บ้านซึ่งอยู่ในระบบส่วนใหญ่คุณสามารถตรวจสอบwww-data
โฟลเดอร์บ้านด้วยcat /etc/passwd | grep www-data
)
ฉันรู้ว่าคำถามนี้อยู่บน Linux แต่บน windows ฉันมีปัญหาเดียวกัน ปรากฎว่าคุณต้องเริ่มต้นพร้อมรับคำสั่งในโหมด "Run As Administrator" เพื่อให้ทำงานได้ มิฉะนั้นคุณจะได้รับเหมือนกัน: ไม่สามารถเขียนข้อผิดพลาด 'สถานะสุ่ม'
set RANDFILE=.rnd
openssl
$env:RANDFILE=".rnd"
set RANDFILE=.rnd
อีกปัญหาหนึ่งบนแพลตฟอร์ม Windows ตรวจสอบให้แน่ใจว่าคุณกำลังเรียกใช้พรอมต์คำสั่งในฐานะผู้ใช้ที่เป็นผู้ดูแลระบบ!
ฉันไม่รู้ว่ามันจะกัดฉันกี่ครั้ง ...
เห็นได้ชัดว่าฉันจำเป็นต้องเรียกใช้ OpenSSL เป็นรูทเพื่อให้ได้รับอนุญาตไปยังไฟล์การเพาะ
ฉันมีสิ่งเดียวกันบนเซิร์ฟเวอร์ windows จากนั้นฉันก็หาวิธีโดยการเปลี่ยนค่าvars.bat
ซึ่งคือ:
set HOME=C:\Program Files (x86)\OpenVPN\easy-rsa
จากนั้นทำซ้ำตั้งแต่ต้นและทุกอย่างควรจะดี
set HOME=.
ปัญหาสำหรับฉันคือฉันมี. rnd ในโฮมไดเร็กตอรี่ของฉัน แต่มันเป็นของ root การลบและออกใหม่คำสั่ง openssl แก้ไขสิ่งนี้
คุณควรตั้งค่าตัวแปรสภาพแวดล้อม $ RANDFILE และ / หรือสร้างไฟล์ $ HOME / .rnd ( คำถามที่พบบ่อย OpenSSL ) (แน่นอนคุณควรมีสิทธิ์ในไฟล์นั้น ๆ คำตอบอื่น ๆ เกี่ยวกับเรื่องนี้ แต่ก่อนอื่นคุณควรมีไฟล์และการอ้างอิงถึง)
สูงถึงเวอร์ชัน 0.9.6 OpenSSL เขียนไฟล์การเพาะในไดเรกทอรีปัจจุบันในไฟล์ ".rnd" ที่รุ่น 0.9.6a คุณไม่มีไฟล์เริ่มต้น OpenSSL 0.9.6b และใหม่กว่าจะทำงานคล้ายกับ 0.9.6a แต่จะใช้ค่าเริ่มต้นเป็น "C: \" สำหรับ HOME บนระบบ Windows หากไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม
หากไฟล์การเริ่มต้นเริ่มต้นไม่มีอยู่หรือสั้นเกินไปอาจเกิดข้อความแสดงข้อผิดพลาด "PRNG ที่ไม่ได้หยอด"
ตัวแปรสภาพแวดล้อม $ RANDFILE และ $ HOME / .rnd ถูกใช้โดยเครื่องมือบรรทัดคำสั่ง OpenSSL เท่านั้น แอปพลิเคชันที่ใช้ไลบรารี OpenSSL มีตัวเลือกการกำหนดค่าเพื่อระบุแหล่งที่มาของเอนโทรปีโปรดตรวจสอบเอกสารที่มาพร้อมกับแอปพลิเคชัน
ฉันได้พบปัญหานี้ในวันนี้ที่ AWS Lambda ฉันสร้างตัวแปรสภาพแวดล้อม RANDFILE = /tmp/.random
นั่นเป็นกลอุบาย
sudo chown user:user ~/.rnd
ทำทุกอย่างได้อย่างรวดเร็ว