2017-01-18 6 views
0

私はopenssl_pkey_get_publicを使用するライブラリを使用していますが、falseを返しています。 opensslが有効になっていて、キーが存在しているようです。openssl_pkey_get_publicがfalseを返すが、キーが存在する

$keyPath = $this->publicKey->getKeyPath(); // returns file:///var/www/sso/website/storage/id_rsa.pub 
var_dump(file_exists($keyPath)); // outputs true 
var_dump(openssl_pkey_get_public($keyPath)); // returns false 

protected function decrypt($encryptedData) 
    { 
     $publicKey = openssl_pkey_get_public($this->publicKey->getKeyPath()); 
     $publicKeyDetails = @openssl_pkey_get_details($publicKey); 
     if ($publicKeyDetails === null) { 
      throw new \LogicException(
       sprintf('Could not get details of public key: %s', $this->publicKey->getKeyPath()) 
      ); 
     } 
. 
. 
. 

私が挿入され、次のデバッグコードを持っている:それは私のコードベースではありません、以下のように私は、デバッグしていますが、変更することはできませんところで私が使用しているライブラリから数行があります

:私は以前に、次のコマンドでキーを作成していた

echo file_get_content($keyPath); 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChY1gtF0Oeku62+4HCisIswcDu9fjZV7fImTlqQej/UsmsJH7jz5EF/ZXCWTKV/bgOwzV2oeHomukITqiR14D01W3mVcpTBAp5AP4JN25am57xdc6Nxd8Lo/NsCKKqQ4/uBmpYBVZm8Ye/hu3ixM6y/xbCGnw/ca4z0DKDa94z1XrRc6FrV1mXx5lItQEo/v8wVKX9NJVAANYZ/jJEk7jGTB9WkSTNR5l/tNBBF3MFuBigjSuaxUsnKT2IwOV5g2ewN4TzXARi2/BI7rweNsUFCWRbkUa7VJc3XOVZbS50TzUpAIqHI9Q8enBs95A1JvSTDvlT3efEHrM2T7KP7QOz [email protected] 

以下は$キーパスの内容を示しています3210

ssh-keygen -f storage/id_rsa -t rsa -N '' 

それが役立つならばいくつかの追加情報:

$ php -i | grep openssl 
openssl 
Openssl default config => /usr/lib/ssl/openssl.cnf 
openssl.cafile => no value => no value 
openssl.capath => no value => no value 

$ php -m | grep openssl 
openssl 

これが起こっされる可能性がありますなぜ、何らかの理由はありますか?

+1

あなたはSSH形式の公開鍵を使用しています。 OpenSSLはその形式をサポートしていません。しかし、そのフォーマットをサポートするものは何ですか? phpseclib。フォーマットを自動検出し、読み込まれると、必要なRSA操作を実行できるようになります。 phpseclibは、実際の鍵がファイルシステム上の鍵へのパスではなく、鍵自体に渡されることを期待していることに注意してください。サンプルコード:http://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc2 – neubert

+0

こんにちは。ありがとう!それはそれだった。 '$ openssl genpkey -algorithm RSA -outストレージ/ private.pem -pkeyopt rsa_keygen_bits:2048 $ openssl rsa -pubout -in storage/private.pem -out storage/public.pem 'あなたが望むなら、これについての答えを自由に作成してください。私はそれを正しい答えとしてマークします。あなたの名誉に値します;) – Martyn

答えて

1

あなたはSSH形式の公開鍵を使用しています。 OpenSSLはその形式をサポートしていません。しかし、そのフォーマットをサポートするものは何ですか? phpseclib。フォーマットを自動検出し、読み込まれると、必要なRSA操作を実行できるようになります。 phpseclibは、実際の鍵がファイルシステム上の鍵へのパスではなく、鍵自体に渡されることを期待していることに注意してください。

サンプルコード:http://phpseclib.sourceforge.net/rsa/examples.html#encrypt,enc

関連する問題