php system_error ai_generated true

Warning: openssl_random_pseudo_bytes(): Seed could not be generated in /var/www/app/src/Security/TokenGenerator.php on line 23

ID: php/openssl-random-pseudo-bytes-seed

Also available as: JSON · Markdown · 中文
80%Fix Rate
82%Confidence
1Evidence
2023-09-25First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
PHP 7.4 active — — —
PHP 8.0 active — — —
PHP 8.1 active — — —
PHP 8.2 active — — —

Root Cause

The OpenSSL random number generator cannot gather enough entropy to seed, typically due to a missing or empty /dev/urandom on the system, or a restrictive open_basedir configuration.

generic

中文

OpenSSL 随机数生成器无法收集足够的熵来播种,通常是由于系统中缺少或空的 /dev/urandom,或受限制的 open_basedir 配置。

Official Documentation

https://www.php.net/manual/en/function.openssl-random-pseudo-bytes.php

Workarounds

  1. 80% success Check if /dev/urandom exists and is readable: `ls -la /dev/urandom`. If missing, create it: `sudo mknod -m 644 /dev/urandom c 1 9 && sudo chmod 644 /dev/urandom`. Then restart PHP-FPM.
    Check if /dev/urandom exists and is readable: `ls -la /dev/urandom`. If missing, create it: `sudo mknod -m 644 /dev/urandom c 1 9 && sudo chmod 644 /dev/urandom`. Then restart PHP-FPM.
  2. 85% success If in a Docker container, ensure the container has access to the host's entropy pool by adding `--privileged` or mounting `/dev/urandom` from the host: `docker run -v /dev/urandom:/dev/urandom ...`
    If in a Docker container, ensure the container has access to the host's entropy pool by adding `--privileged` or mounting `/dev/urandom` from the host: `docker run -v /dev/urandom:/dev/urandom ...`

中文步骤

  1. Check if /dev/urandom exists and is readable: `ls -la /dev/urandom`. If missing, create it: `sudo mknod -m 644 /dev/urandom c 1 9 && sudo chmod 644 /dev/urandom`. Then restart PHP-FPM.
  2. If in a Docker container, ensure the container has access to the host's entropy pool by adding `--privileged` or mounting `/dev/urandom` from the host: `docker run -v /dev/urandom:/dev/urandom ...`

Dead Ends

Common approaches that don't work:

  1. Increasing PHP's memory_limit or max_execution_time hoping the random generation will complete 95% fail

    The error is about entropy availability, not memory or time; the system simply cannot gather enough random data.

  2. Installing haveged or rng-tools without verifying they are actually running and providing entropy 60% fail

    The service might be installed but not started, or the entropy source might be blocked by virtualization or container restrictions.