產生一個 CSR

openssl_csr_new

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

openssl_csr_new產生一個 CSR

說明

openssl_csr_new(
    array $dn,
    resource &$privkey,
    array $configargs = ?,
    array $extraattribs = ?
): mixed

openssl_csr_new() 根據dn提供的資訊產生新的CSR(證書籤名請求)。

注意: 必須安裝有效的 openssl.cnf 以保證此函式正確執行。參考有關安裝的說明以獲得更多資訊。

參數

dn

在證書中使用的專有名稱或主題欄位。

privkey

privkey 應該被設定為由openssl_pkey_new()函式預先產生(或者以其他方式從openssl_pkey函式集中獲得)的私鑰。該金鑰的相應公共部分將用於簽署CSR.

configargs

預設的, 是通過你係統里的openssl.conf配置來初始化請求; 您可以通過設定configargsconfig_section_section項來指定配置檔案部分。 您還可以通過將config鍵的值設定為您想要使用的檔案路徑來指定另一個openssl配置檔案。如果在configargs中存在下列鍵,它們的行為就像在openssl.conf中一樣。如下表所示:

配置覆蓋
configargs type 等同於 openssl.conf 描述
digest_alg string default_md 摘要演算法或簽名雜湊演算法,通常是 openssl_get_md_methods() 之一。
x509_extensions string x509_extensions 選擇在建立x509證書時應該使用哪些擴充套件
req_extensions string req_extensions 建立CSR時,選擇使用哪個擴充套件
private_key_bits integer default_bits 指定應該使用多少位來產生私鑰
private_key_type integer none 選擇在建立CSR時應該使用哪些擴充套件。可選值有 OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_RSAOPENSSL_KEYTYPE_EC. 預設值是 OPENSSL_KEYTYPE_RSA.
encrypt_key boolean encrypt_key 是否應該對導出的金鑰(帶有密碼短語)進行加密?
encrypt_key_cipher integer none cipher constants常量之一。
curve_name string none 要求PHP7.1+, openssl_get_curve_names()之一。
config string N/A 自定義 openssl.conf 檔案的路徑。

extraattribs

extraattribs 用於為CSR指定額外的配置選項。dnextraattribs 都是關聯陣列它們的鍵被轉換成OIDs,並應用到請求的相關部分。

返回值

成功,返回CSR 或者在失敗時返回 false.

範例

示例 #1 建立一個自簽名的證書

<?php
// for SSL server certificates the commonName is the domain name to be secured
// for S/MIME email certificates the commonName is the owner of the email address
// location and identification fields refer to the owner of domain or email subject to be secured
$dn = array(
    
"countryName" => "GB",
    
"stateOrProvinceName" => "Somerset",
    
"localityName" => "Glastonbury",
    
"organizationName" => "The Brain Room Limited",
    
"organizationalUnitName" => "PHP Documentation Team",
    
"commonName" => "Wez Furlong",
    
"emailAddress" => "[email protected]"
);

// Generate a new private (and public) key pair
$privkey openssl_pkey_new(array(
    
"private_key_bits" => 2048,
    
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));

// Generate a certificate signing request
$csr openssl_csr_new($dn$privkey, array('digest_alg' => 'sha256'));

// Generate a self-signed cert, valid for 365 days
$x509 openssl_csr_sign($csrnull$privkey$days=365, array('digest_alg' => 'sha256'));

// Save your private key, CSR and self-signed cert for later use
openssl_csr_export($csr$csrout) and var_dump($csrout);
openssl_x509_export($x509$certout) and var_dump($certout);
openssl_pkey_export($privkey$pkeyout"mypassword") and var_dump($pkeyout);

// Show any errors that occurred here
while (($e openssl_error_string()) !== false) {
    echo 
$e "\n";
}
?>

示例 #2 在PHP 7.1+版本中建立一個自簽名的ECC證書

<?php
$subject 
= array(
    
"commonName" => "docs.php.net",
);

// Generate a new private (and public) key pair
$private_key openssl_pkey_new(array(
    
"private_key_type" => OPENSSL_KEYTYPE_EC,
    
"curve_name" => 'prime256v1',
));

// Generate a certificate signing request
$csr openssl_csr_new($subject$private_key, array('digest_alg' => 'sha384'));

// Generate self-signed EC cert
$x509 openssl_csr_sign($csrnull$private_key$days=365, array('digest_alg' => 'sha384'));
openssl_x509_export_to_file($x509'ecc-cert.pem');
openssl_pkey_export_to_file($private_key'ecc-private.key');
?>

參見

  • openssl_csr_sign() - 用另一個證書籤署 CSR (或者本身) 並且產生一個證書

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *