Search code examples
laravellaravel-passport

Laravel, php artisan passport:install error


I was curious about setting up an API in Laravel using Passport so I followed their documentation here:

https://laravel.com/docs/5.6/passport

Once I run

php artisan passport:install

It gives me this error:

    ErrorException  : openssl_pkey_new(): private key length is too short; it needs to be at least 384 bits, not 0

  at /Users/fantastisk/web/blog-laravel/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php:560
    556|             $config = array();
    557|             if (isset($this->configFile)) {
    558|                 $config['config'] = $this->configFile;
    559|             }
  > 560|             $rsa = openssl_pkey_new(array('private_key_bits' => $bits) + $config);
    561|             openssl_pkey_export($rsa, $privatekey, null, $config);
    562|             $publickey = openssl_pkey_get_details($rsa);
    563|             $publickey = $publickey['key'];
    564| 

  Exception trace:

  1   openssl_pkey_new(["4096", "/Users/fantastisk/web/blog-laravel/vendor/phpseclib/phpseclib/phpseclib/Crypt/../openssl.cnf"])
      /Users/fantastisk/web/blog-laravel/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php:560

  2   phpseclib\Crypt\RSA::createKey("4096")
      /Users/fantastisk/web/blog-laravel/vendor/laravel/passport/src/Console/KeysCommand.php:35

This is what i have in the openssl.cnf file

# minimalist openssl.cnf file for use with phpseclib

HOME                    = .
RANDFILE                = $ENV::HOME/.rnd
distinguished_name  = req_distinguished_name
[ v3_ca ]

I'm running on a mac with php 7.1 (i tried building it from source with openssl too), SSL Version => LibreSSL/2.0.20.

I tried following the documentation using homestead too, which gives me the exact same error.

To me it seems like there's a problem with the phpseclib library, but I haven't been able to find anything on google regarding this error.

As a final note, I tried running this command to check if openssl_pkey_new works:

openssl_pkey_new(array("digest_alg" => "sha512","private_key_bits" => 4096,"private_key_type" => OPENSSL_KEYTYPE_RSA,));

That worked with no error.

Any help or point in the right direction will be very much appreciated.


Solution

  • Try passing the length option as you run the install command:

    php artisan passport:install --length=256
    

    If that doesn't work then try forcing the key generation:

    php artisan passport:key --force
    

    You may need to run composer update prior.