【问题标题】:Warning: openssl_x509_read(): supplied parameter cannot be coerced into an X509 certificate警告:openssl_x509_read():提供的参数不能被强制转换为 X509 证书
【发布时间】:2020-05-12 11:53:26
【问题描述】:

在生成私钥和 csr 密钥后,我得到了这样的交战:

Warning: openssl_x509_read(): supplied parameter cannot be coerced into an X509 certificate! in .../libs/ACMECert/ACMECert.php on line 313 

生成的私钥:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDUcL30x/uEDLoV
l3Sw+fadN5ElHEohR33z/5oNAun+tpGATRplNiiO7mfWHXLY6g39anhPaHFBGLd3
KSSFhZobM7D7B+F6A1Q2IAJLQ//6xopUagIUl6IuMn6xgXCNoV75D97vAAYjM8Q8
iwOMmCo3ayhtOjRlmf5XiIiSBq5jbQgCVUn5wcGp2XGseofYYiK4ZA+54b9k5UJJ
3pHh5rERJ93G3JgSUQaXPLtgOpBB2XSS8trfedQWbx79Fb2rSPYdMeZCwV78pkl6
gSARDfeGvatCsVAZcerRLVbCZlfK1RSQ7hQA7HkZJIbU4Bk8hMF9yeJV33q6oYBn
P6xZRm33AgMBAAECggEAXgLObSaarWMcbjWqFC9p7UUL3Epam8ORf4rbV2q0tl2A
ojB8v9FpvWbPWLeLfWaGbmDRgQKNK+uONRNl8Bihi+wiI9Tm+SHEAHfFzBz5iLaX
vKd06Dv6L0t1OYQ4lNSWvM1DMKzoCmf8LXavSWaFOCUZrMyXJ2cwYPgwx75hKenl
uItuoSdTOLzNjGUWuS0dkVoBR4rXMpCiM7madGeSOfQR/mS/8j/9VLZxDwnVyWza
Sm3fua99pDYL8B+i82OGTHN1eHBu0SuHgmodRH6OxXiL4flqsLjaOJMluKvH6PNs
sF9rJdUoGYt1KwqYJHuCunGp4jOXv5UB+T1417p9EQKBgQDr+EAMfJu5UBOghS9V
gG9BdjfPy0pQ4b30qF/C7obX5GQSPN3kRo0GWw5xoGAzR6YMinKn11T5XJQ7SEp7
pMF65D4iWapvYQ3Do0u/U+HgpckFqid8zJ4rakYFpWpZJUt387zZuEcT+IcDHv0r
As2AsKcKoazgwoU2/zDEk9WJpQKBgQDmeS/REhzwAVyLQDuvxcaCSzKiiIhv2/jZ
Usu1Gu/LCcorKpqi/4uVI9aIRER0yApPe57qddW8PYDaXaPhTt71nhgG9gxnMv44
o/HatGrbDJotEVU6d/W0ntY+LBCymsZGIQx581bn+OpbGhwsATnqwZ9M0kjdD74S
Tmlzpo1uawKBgEYnPAN6WGGzqOIkNnpZALqZhuZELgf11R+Tn0S43WX6BLZXWjCv
uOWW1Kh7YZ5dQsSftI6puh2YpIkraNlxlgQPL1nPBpiuZgUv2yk6qwC6yRTiDXNQ
8gU+RysOjpuKNvGmiRLBcoBBdwI6iFHtN2N3IXJLtrXrnudG3xzSRr3xAoGBAJBg
tHq1bRlQ0QeOypU3QT7YGrVE8KuaUo7Z1jDy2esIi/R0sQCRM4DPPZKJqZS6x/K4
z3mzLZzJrpGc/Y+kV/nn+sdJlcWEZUtYMKdARHxKrb6zz/9brLlkk3PJKQCqArFl
/KncrcGN5koB1koezohomQGH7gtF1F0lb9v6JzlXAoGAFFyply/b3rWxTXkx9o/L
tGQboJoDRYt4RyS8DLJjnVZ0y1ELXBqazm9f3xPJi3FTBd2l1VKkH18tAdcfZ0uE
I0rh0ziWeOJCmhdqkVngLzB376HjzK6K57AbhGFl0WayoefM6TOAkcMds3h/vLpv
Fv4TflcdFP2UGeP4B13n5Cs=
-----END PRIVATE KEY-----

已生成 CSR 密钥:

-----BEGIN CERTIFICATE REQUEST-----
MIICojCCAYoCAQAwJTEjMCEGA1UEAwwaYXBwbGUuaGlnaHNjaG9vbGhlbHBlci5v
cmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUcL30x/uEDLoVl3Sw
+fadN5ElHEohR33z/5oNAun+tpGATRplNiiO7mfWHXLY6g39anhPaHFBGLd3KSSF
hZobM7D7B+F6A1Q2IAJLQ//6xopUagIUl6IuMn6xgXCNoV75D97vAAYjM8Q8iwOM
mCo3ayhtOjRlmf5XiIiSBq5jbQgCVUn5wcGp2XGseofYYiK4ZA+54b9k5UJJ3pHh
5rERJ93G3JgSUQaXPLtgOpBB2XSS8trfedQWbx79Fb2rSPYdMeZCwV78pkl6gSAR
DfeGvatCsVAZcerRLVbCZlfK1RSQ7hQA7HkZJIbU4Bk8hMF9yeJV33q6oYBnP6xZ
Rm33AgMBAAGgODA2BgkqhkiG9w0BCQ4xKTAnMCUGA1UdEQQeMByCGmFwcGxlLmhp
Z2hzY2hvb2xoZWxwZXIub3JnMA0GCSqGSIb3DQEBDQUAA4IBAQAdfcUvD5csPYFF
Asgc8wlPFWcKOWEfTBKCTLLN9f5p0rOJB7YYxrG0nvlbSrDNgB+G60hFcdXfRgeY
1P0JAplLZTYv4JyfFTJyNtwZidjwq0IPe171Mqv7GzXiaGj1qgZTUBeLqwybX+K9
v81zGKrRrx5B30YViNBY/b3/ErFaDnFzX5NOHKBRHrhXkUFQTDRxpXBGJrIb61l4
Ix4cnHbGwHAMVO+8A0cEWHqG4W3lYdRwMb+/jyf8RJ3/qTq4EAtdY7xMMs2kJsnM
nFwq12z1CwOStETUSErDhmRzzYGuG29bg4sn2GQHtTP8B2e8vpFJJVlDYIH/SPi8
nuA0v3cW
-----END CERTIFICATE REQUEST-----

使用的库:

https://github.com/skoerfgen/ACMECert

用于生成密钥的代码:

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require_once __DIR__ . '/config.php';
require_once __DIR__ . '/libs/ACMECert/ACMECert.php';


$domain_name = 'apple.highschoolhelper.org';

$ac = new ACMECert(false);
if (!file_exists($letsencrypt_certificate_dir . $domain_name)) {
    mkdir($letsencrypt_certificate_dir . $domain_name);
}


// Avoid any UTF-8 header
// https://github.com/skoerfgen/ACMECert/issues/8#issuecomment-557766088
$letsencrypt_account_key = $letsencrypt_certificate_dir . '/letsencrypt-account_key.pem';
if(file_exists($letsencrypt_account_key)) {
    $letsencrypt_account_key = preg_replace('/[\x00-\x09\x0b-\x1f\x7f-\xff]/', '', file_get_contents($letsencrypt_account_key));
    $ac->loadAccountKey($letsencrypt_account_key);
}
else {
    $letsencrypt_key = $ac->generateRSAKey(2048);
    file_put_contents($letsencrypt_certificate_dir . '/letsencrypt-account_key.pem', $letsencrypt_key);
    chmod($letsencrypt_certificate_dir . '/letsencrypt-account_key.pem', 777);
    $ret = $ac->register(true, $letsencrypt_account);
}

$ret = $ac->getAccount();

echo "<pre>";
print_r($ret);
echo "</pre>";


$domain_config=[
  'apple.highschoolhelper.org' => ['challenge' => 'http-01', 'docroot' => '/var/www/html/apple.highschoolhelper.org/public_html'],
];

$prepare_cert_handler = function($opts){
  $fn = $opts['config']['docroot'] . $opts['key'];
  @mkdir(dirname($fn),0777,true);
  file_put_contents($fn, $opts['value']);
  /*return function($opts){
    unlink($opts['config']['docroot'] . $opts['key']);
  };*/
};



$domain_private_key = $letsencrypt_certificate_dir . $domain_name . '/' . $domain_name . '_key.pem';
if(file_exists($domain_private_key)) {
    $domain_private_key = preg_replace('/[\x00-\x09\x0b-\x1f\x7f-\xff]/', '', file_get_contents($domain_private_key));
}
else {
    $domain_private_key = $ac->generateRSAKey(2048);
    file_put_contents($letsencrypt_certificate_dir . $domain_name . '/' . $domain_name . '_key.pem', $domain_private_key);
    chmod($letsencrypt_certificate_dir . $domain_name . '/' . $domain_name . '_key.pem', 777);
    chown($letsencrypt_certificate_dir . $domain_name . '/' . $domain_name . '_key.pem', 'apache');
}

//$fullchain = $ac->getCertificateChain($domain_private_key, $domain_config, $prepare_cert_handler);
//file_put_contents($letsencrypt_certificate_dir . $domain_name . '/' . $domain_name . '_fullchain.pem',$fullchain);



$domain_csr = $ac->generateCSR($domain_private_key, ['apple.highschoolhelper.org']);

file_put_contents($letsencrypt_certificate_dir . $domain_name . 'CSR_key.pem', $domain_csr);
print_r($domain_private_key);
//$ret = $ac->parseCertificate(file_get_contents('/etc/letsencrypt/live/self-signed-cert.pem'));
$ret = $ac->parseCertificate($domain_csr);


echo "<pre>";
print_r($domain_csr);
echo "</pre>";

【问题讨论】:

    标签: php openssl


    【解决方案1】:

    喂,

    我正在使用 key.pem 对 xml 文档进行签名,并收到此错误。如果您遇到相同的错误并且无法将密钥更改为 pfx 或 pcks7,请使用类似的内容:xmlspec

    xmlsec --sign --output doc-signed.xml \
         --privkey-pem userkey.pem doc.xml
    

    xmlsec1 ;-) 不要浪费你的时间......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2017-02-11
      • 2019-05-29
      • 2014-12-11
      • 2023-03-16
      • 2015-07-21
      • 2012-04-04
      相关资源
      最近更新 更多