OpenSSLを使用して、「「ランダムな状態」を書き込めない」とはどういう意味ですか?


407

サーバーの管理セクションを保護するために自己署名SSL証明書を生成していますが、OpenSSLから次のメッセージが表示され続けます。

「ランダムな状態」を書き込めません

これは何を意味するのでしょうか?

これはUbuntuサーバー上にあります。最近のセキュリティの脆弱性を修正するために libsslをアップグレードしました。

回答:


555

実際には、これが発生する最も一般的な理由は、ホームディレクトリの.rndファイルが、アカウントではなくルートによって所有されているためです。クイックフィックス:

sudo rm ~/.rnd

詳細については、OpenSSL FAQのエントリを次に示します

opensslコマンドラインユーティリティが「PRNG not seeded」エラーメッセージで中止せずに、「「ランダムな状態」を書き込むことができない」というメッセージが表示される場合があります。このメッセージは、デフォルトのシードファイルを参照しています(前の回答を参照)。考えられる理由は、RANDFILEもHOMEも設定されていないため、デフォルトのファイル名が不明であることです。(この場合、バージョン0.9.6までは現在のディレクトリのファイル「.rnd」を使用していましたが、これは0.9.6aで変更されました。)

したがって、RANDFILE、HOME、およびファイルシステムのこれらの場所への書き込み権限を確認します。

すべてが正しいように見える場合は、straceを実行してみて、正確に何が起こっているかを確認できます。


42
「.rnd」ファイルはユーザーではなくrootが所有していたため、システムでこの問題が発生していました。すばやくsudo chown user:user ~/.rndすべてがうまくいきました。
HalfBrian

1
OPと同じ問題がありました。私はそのsudoことを行い、それはうまくいきました。しかし、なぜ.rnd自己署名証明書を作成した後も、$ HOMEにrootが作成したディレクトリがあるのですか?
Luc M

3
はい、php Webサーバーから実行する場合、ユーザーはwww-dataであり、すべてのopensslの前に "export"を追加する必要があります:shell_exec( 'export RANDFILE = "。rnd"; openssl ecparam -genkey -name secp256k1'))
diyism

2
PHPなどのスクリプト言語を使用してopensslをwww-dataとして呼び出す場合、/var/www/.rndそれを作成してに変更することでこれを解決できますwww-data。(それを仮定すると/var/wwwあるwww-data"それはほとんどのシステム上でのホームフォルダ、あなたがチェックすることができます。www-dataのホームフォルダ付きcat /etc/passwd | grep www-data
ニック・

1
私はWindowsを使用していました-もちろん、管理者としてCMDプロンプトを実行する必要がありました!そうすることで、この問題を回避しました。
NickBeaugié

264

この質問はLinuxに関するものですが、Windowsでも同じ問題がありました。コマンドプロンプトを機能させるには、「管理者として実行」モードで起動する必要があることがわかりました。それ以外の場合は、同じ結果が得られます。「ランダムな状態」エラーを書き込むことができません。


13
Windowsで管理者として実行していますが、エラーが発生します
Smalcat

6
マシンの管理者になることと「管理者として実行」を使用することは異なります。「管理者として実行」は、プログラムを強制的に管理者として実行します。それ以外の場合は、管理者であっても、管理者以外のセキュリティクリアランスでプロンプトが実行されます。
ビーチハウス

67
管理者モードで実行していて、「「ランダムな状態」を書き込めない」というメッセージが引き続き表示set RANDFILE=.rndれる場合は、実行する前に別の解決策がありopensslます。
jevon 2013

3
Powershell $env:RANDFILE=".rnd"では、これはではありませんset RANDFILE=.rnd
x5657 2018

それをしないことの欠点は何ですか?
StanTastic

41

Windowsプラットフォームでのもう1つの問題は、コマンドプロンプトを管理ユーザーとして実行していることを確認してください。

何回噛まれたのかわかりません...


1
他の人がこのセットを設定することを提案したので、RANDFILE = .rndは、アドミニストレーターでコマンドラインを実行せずに機能しました
Svetoslav

16

どうやら、OpenSSLにシードファイルへのアクセス許可を与えるには、ルートとしてOpenSSLを実行する必要があったようです。


16
ルートとして実行したことがあり、ホームディレクトリの.rndファイルが、ルートのみに設定された権限で作成された可能性が高くなります。これはしばらく前に私に起こりました。.rndを削除すると問題が解決しました。
fotNelton 2010

13

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ビットバージョン(私が好む)をインストールしたためです。
共生生物2014年

4
これでうまくいき、管理者として実行する必要はありませんでした。ありがとう!実際、私は単に使用しましたset HOME=.
Synetech

6

私にとっての問題は、ホームディレクトリに.rndがありましたが、それはルートによって所有されていたことです。これを削除してopensslコマンドを再発行すると、これが修正されました。


6

$ RANDFILE環境変数を設定するか、$ HOME / .rndファイルを作成する必要があります。(OpenSSL FAQ)。(もちろん、あなたはそのファイルへの権利を持っているべきです。他の答えはそれについてです。しかし、最初にファイルとそれへの参照が必要です。)

バージョン0.9.6までOpenSSLは、現在のディレクトリのシードファイルをファイル「.rnd」に書き込みました。バージョン0.9.6aでは、デフォルトのシードファイルはありません。OpenSSL 0.9.6b以降は0.9.6aと同様に動作しますが、環境変数が設定されていない場合、WindowsシステムのHOMEにはデフォルトの「C:\」を使用します。

デフォルトのシードファイルが存在しないか、短すぎる場合、「PRNGがシードされていません」というエラーメッセージが表示されることがあります。

$ RANDFILE環境変数と$ HOME / .rndは、OpenSSLコマンドラインツールでのみ使用されます。OpenSSLライブラリを使用するアプリケーションは、エントロピーソースを指定するための独自の設定オプションを提供します。アプリケーションに付属のドキュメントを確認してください。


2

今日、AWS Lambdaでこの問題に遭遇しました。環境変数RANDFILE = /tmp/.randomを作成しました

これでうまくいきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.