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');
?>