2016-03-29 15 views
2

basit arada benim özel anahtarı yüklemeye çalışırken aşağıdaki hatayı alıyorum üzerinde PHP ile sistem lib. Bu benim kodum.Hata 0x2006D002: BIO rutinleri: BIO_new_file: Windows'un

public function loadPrivateKey($fileName, $password = null){ 
     if(!is_file($fileName)) 
      throw new SignException('Private key not found', SignException::KEY_NOT_FOUND); 

     $fileContent = file_get_contents($fileName); 
     if(!is_null($password)) 
      $this->prvKey = openssl_get_privatekey($fileContent, $password); 
     else 
      $this->prvKey = openssl_get_privatekey($fileContent); 

     if(!empty(openssl_error_string())) 
      throw new SignException('OpenSSL Error: '.openssl_error_string()); 

     if(!is_resource($this->prvKey)) 
      throw new SignException('Private key is not resourse', SignException::EXTERNAL_ERROR); 
    } 

openssl_error_string() döner error:2006D002:BIO routines:BIO_new_file:system lib.

Ben extension=php_openssl.dll ile benim php.ini yılında OpenSSL'i sağladı.

Sorun ne olabilir? Nasıl düzeltebilirim?

Teşekkür ederiz!

+0

Olası yinelenen (http://stackoverflow.com/questions/15558321/openssl-not-working-on-windows). – jww

+0

Ayrıca bkz. [OpenSSL ve openssl.conf dosyasını okuma hatası] (http://stackoverflow.com/a/11241669/608639). – jww

cevap

0

fonksiyonu openssl_get_privatekey()openssl_pkey_get_private() için bir takma ad. Bu işlev iki argüman alır; İlki, URI biçimindeki bir dosya adı veya PEM formatlı özel anahtarın içeriği. İkincisi bir parola.

Aldığınız hatanın bir dosyayı okumaya çalışırken bir hata olduğunu; genellikle söz konusu dosya included in the error message, bu yüzden sadece hatanın bir kısmını burada dahil edebilirsiniz. Dosyayı OpenSSL ile okumadığınız için, en olası suçlu OpenSSL yapılandırma dosyasıdır; Sistemin nereye bakması gerektiği söylenmelidir.

  • Sağ
  • Değişken adı "OPENSSL_CONF"
  • olmalıdır Sistem değişkenleri altında yeni bir girdi oluşturun Bilgisayarım tıklayın ve Gelişmiş sekmesinde Özellikler içine
  • gidin Ortam Değişkenleri düğmesini
  • tıklayın
  • Değişken değer dosyası
  • bilgisayarı yeniden tam yolu olmalıdır

Ortam değişkenleri within your PHP code olarak da ayarlanabilir, ancak tüm kodunuza eklenmesi gerekir, bu nedenle tercih edilmeyebilir. Ayrıca, belirtildiği gibi, anahtar dosyasını doğrudan işlev çağrısından açabilirsiniz; Burada ben çalışırken öneririz budur: [OpenSSL Windows üzerinde çalışmıyor] ait

<?php 
public function loadPrivateKey($fileName, $password = "") { 
    // I just used the value from my system here 
    putenv("OPENSSL_CONF=C:\\OpenSSL\\bin\\openssl.cfg"); 
    if (!is_readable($fileName)) { 
     throw new SignException("Private key not found or not readable", SignException::KEY_NOT_FOUND); 
    } 

    $fileName = "file://$fileName"; 

    $this->prvKey = openssl_get_privatekey($fileName, $password); 

    if (!empty(openssl_error_string())) { 
     throw new SignException("OpenSSL error: " . openssl_error_string()); 
    } 

    if (!is_resource($this->prvKey)) { 
     throw new SignException("Private key is not resource", SignException::EXTERNAL_ERROR); 
    } 
}