openssl_csr_new
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
openssl_csr_new — 產生一個 CSR
說明
   openssl_csr_new(
array
resource
array
array
): mixed
  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配置來初始化請求; 您可以通過設定configargs的config_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_RSA或OPENSSL_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指定額外的配置選項。dn和extraattribs都是關聯陣列它們的鍵被轉換成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($csr, null, $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($csr, null, $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');
?>