2008-09-18 36 views
328

tôi là tạo ra một chứng chỉ SSL tự ký để bảo vệ phần admin máy chủ của tôi, và tôi tiếp tục nhận được thông báo này từ OpenSSL:Sử dụng OpenSSL "không thể ghi" trạng thái ngẫu nhiên "có nghĩa là gì?

không thể viết 'trạng thái ngẫu nhiên'

gì thực hiện điều này nghĩa là?

Đây là trên máy chủ Ubuntu. Tôi đã nâng cấp libssl để sửa lỗi the recent security vulnerability.

Trả lời

459

Trong thực tế, lý do phổ biến nhất cho điều này xảy ra có vẻ là tệp .rnd trong thư mục chính của bạn được sở hữu bởi thư mục gốc thay vì tài khoản của bạn. Việc sửa chữa nhanh chóng:

sudo rm ~/.rnd 

Để biết thêm thông tin, đây là sự xâm nhập từ OpenSSL FAQ:

Đôi khi openssl tiện ích dòng lệnh không hủy bỏ với một thông báo lỗi "PRNG không hạt", nhưng phàn nàn rằng nó là "không thể viết 'trạng thái ngẫu nhiên'". Thông báo này đề cập đến tệp giống mặc định (xem câu trả lời trước). Một lý do có thể là không có tên tập tin mặc định được biết bởi vì cả RANDFILE lẫn HOME đều không được thiết lập. (Phiên bản lên đến 0.9.6 đã sử dụng tệp ".rnd" trong thư mục hiện tại trong trường hợp này, nhưng điều này đã thay đổi với 0.9.6a.)

Vì vậy, tôi sẽ kiểm tra RANDFILE, HOME và quyền ghi vào những nơi trong hệ thống tập tin.

Nếu mọi thứ dường như theo thứ tự, bạn có thể thử chạy với strace và xem chính xác những gì đang diễn ra.

+33

Hệ thống của tôi đã cho tôi vấn đề này vì tệp ".rnd" được sở hữu bởi người chủ chứ không phải người dùng của tôi. Một người dùng 'sudo chown nhanh: người dùng ~/.rnd' đã làm mọi thứ hoạt động. – HalfBrian

+1

Tôi gặp vấn đề tương tự như OP. Tôi đã làm điều 'sudo' và nó hoạt động. Nhưng tại sao tôi vẫn có thư mục '.rnd' được nhúng bởi root trong $ HOME sau khi tạo chứng chỉ tự ký? –

+2

Có, nếu bạn chạy từ máy chủ web php, người dùng là www-data, và bạn nên thêm "export" trước mỗi openssl: shell_exec ('export RANDFILE = ". Rnd"; openssl ecparam -genkey -name secp256k1')) – diyism

15

Rõ ràng, tôi cần chạy OpenSSL làm thư mục gốc để nó có quyền cho tệp giống.

+15

Nó có nhiều khả năng là bạn một lần * chạy * nó như là người chủ nơi mà các tập tin .rnd trong thư mục nhà của bạn đã được tạo ra với quyền thiết lập cho root chỉ. Điều này xảy ra với tôi một lúc trở lại. Xóa .rnd đã giải quyết được vấn đề. – fotNelton

6

Vấn đề đối với tôi là tôi đã có trong thư mục chính của tôi nhưng nó được sở hữu bởi root. Xóa nó và tái phát lệnh openssl đã sửa lỗi này.

11

Tôi có cùng một thứ trên máy chủ Windows. Sau đó, tôi đã tìm ra bằng cách thay đổi số vars.bat là:

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

sau đó làm lại từ đầu và mọi thứ sẽ ổn.

+0

đó là nó! cảm ơn. tôi đã thực hiện thay đổi này ngay giữa các lệnh "init-config" và "vars", từ hướng dẫn (tại đây: https://openvpn.net/index.php/open-source/documentation/howto.html#pki) . phải vì tôi đã cài đặt phiên bản 32 bit (mà tôi thích). – symbiont

+3

Điều đó đã làm các trick, và tôi đã không phải chạy như admin. Cảm ơn! Trong thực tế, tôi chỉ đơn giản sử dụng 'set HOME = .' – Synetech

206

Tôi biết câu hỏi này là trên Linux, nhưng trên các cửa sổ, tôi có cùng một vấn đề. Hóa ra bạn phải khởi động dấu nhắc lệnh trong chế độ "Run As Administrator" để nó hoạt động. Nếu không, bạn sẽ nhận được như vậy: không thể ghi lỗi 'trạng thái ngẫu nhiên'.

+12

Tôi đang chạy trên windows với tư cách quản trị viên nhưng vẫn gặp lỗi – Smalcat

+4

Là quản trị viên trên máy và sử dụng" Chạy với tư cách quản trị viên "khác nhau. "Run As Administrator" buộc chương trình chạy với tư cách Quản trị viên, nếu không, ngay cả khi bạn là quản trị viên, lời nhắc sẽ chạy với thông tin bảo mật không phải của quản trị viên. – Beachhouse

+47

Nếu bạn đang chạy trong chế độ quản trị viên và bạn đang _still_ nhận được "Không thể ghi" trạng thái ngẫu nhiên '", một giải pháp khác là [' đặt RANDFILE = .rnd'] (http://stackoverflow.com/questions/2229723/how -do-i-make-openssl-write-the-randfile-on-windows-vista) trước khi thực thi 'openssl'. – jevon

35

Một vấn đề khác trên nền tảng Windows, đảm bảo bạn đang chạy lời nhắc lệnh của mình với tư cách là Người dùng quản trị!

tôi không biết bao nhiêu lần này đã cắn tôi ...

+2

Đã bao nhiêu lần bạn trả lời lại một câu hỏi với ba câu trả lời khác giống nhau? – jww

1

Bạn nên đặt biến môi trường $ RANDFILE và/hoặc tạo $ HOME/file .rnd. (OpenSSL FAQ). (Tất nhiên, bạn nên có quyền đối với tệp đó. Các câu trả lời khác ở đây là về điều đó. Nhưng trước tiên bạn nên có tệp và tham chiếu đến nó.)

Tối đa 0.9.6 OpenSSL đã viết tệp seeding trong thư mục hiện tại trong tệp ".rnd". Ở phiên bản 0.9.6a bạn không có tệp tạo giống mặc định. OpenSSL 0.9.6b và sau đó sẽ hoạt động tương tự như 0.9.6a, nhưng sẽ sử dụng mặc định "C: \" cho HOME trên hệ thống Windows nếu biến môi trường chưa được đặt.

Nếu tệp gốc mặc định không tồn tại hoặc quá ngắn, thông báo lỗi "PRNG not seeded" có thể xảy ra.

Biến môi trường $ RANDFILE và $ HOME/.rnd chỉ được sử dụng bởi các công cụ dòng lệnh OpenSSL. Các ứng dụng sử dụng thư viện OpenSSL cung cấp các tùy chọn cấu hình riêng của chúng để xác định nguồn entropy, hãy kiểm tra tài liệu đi kèm với ứng dụng.

Các vấn đề liên quan