PHP Conference Japan 2024

openssl_csr_get_subject

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

openssl_csr_get_subject傳回 CSR 的主體

描述

openssl_csr_get_subject(OpenSSLCertificateSigningRequest|字串 $csr, 布林 $short_names = true): 陣列|false

openssl_csr_get_subject() 會傳回編碼在 csr 中的主體辨別名稱資訊,包括 commonName (CN)、organizationName (O)、countryName (C) 等欄位。

參數

csr

請參閱 CSR 參數 以取得有效值的清單。

short_names

short_names 控制資料在陣列中的索引方式 - 如果 short_namestrue(預設值),則欄位將以簡短名稱形式索引,否則將使用長名稱形式 - 例如:CN 是 commonName 的簡短名稱形式。

傳回值

傳回一個包含主體描述的關聯陣列,失敗時傳回 false

變更記錄

版本 描述
8.0.0 csr 現在接受 OpenSSLCertificateSigningRequest 實例;之前,接受 資源 型別為 OpenSSL X.509 CSR

範例

範例 #1 openssl_csr_get_subject() 範例

<?php
$subject
= array(
"countryName" => "CA",
"stateOrProvinceName" => "Alberta",
"localityName" => "Calgary",
"organizationName" => "XYZ Widgets Inc",
"organizationalUnitName" => "PHP Documentation Team",
"commonName" => "Wez Furlong",
"emailAddress" => "wez@example.com",
);
$private_key = openssl_pkey_new(array(
"private_key_bits" => 2048,
"private_key_type" => OPENSSL_KEYTYPE_RSA,
));
$configargs = array(
'digest_alg' => 'sha512WithRSAEncryption'
);
$csr = openssl_csr_new($subject, $privkey, $configargs);
print_r(openssl_csr_get_subject($csr));
?>

以上範例將輸出類似如下的內容

Array
(
    [C] => CA
    [ST] => Alberta
    [L] => Calgary
    [O] => XYZ Widgets Inc
    [OU] => PHP Documentation Team
    [CN] => Wez Furlong
    [emailAddress] => wez@example.com
)

另請參閱

新增註解

使用者提供的註解 4 個註解

2
pdm at wp dot pl
9 年前
openssl_csr_get_subject('somedomain.com',false);
傳回
array(7) {
["countryName"]=> 字串 "XX"
["stateOrProvinceName"]=> 字串 "xxxxxxxxx"
["localityName"]=> 字串 "xxxxxxxx"
["organizationName"]=> 字串 "xxxxxxxxx"
["organizationalUnitName"]=>字串 "xxxx"
["commonName"]=>字串 "xxx"
["emailAddress"]=>字串 "xxx"
}

openssl_csr_get_subject('somedomain.com',true);
傳回
array(7) {
["C"]=> 字串 "XX"
["ST"]=> 字串 "xxxxxxxxx"
["L"]=> 字串 "xxxxxxxx"
["O"]=> 字串 "xxxxxxxxx"
["OU"]=>字串 "xxxx"
["CN"]=>字串 "xxx"
["emailAddress"]=>字串 "xxx"
}
1
mikko koivu
14 年前
此函式尚未傳回 UC 憑證的 SAN (主體替代名稱) 欄位,例如 Exchange 2007 中使用的那些。
0
Steve
8 年前
此函式可能不會以憑證中出現的順序傳回名稱欄位。例如,這個 CSR

-----BEGIN CERTIFICATE REQUEST-----
MIHsMIGUAgEAMDIxEDAOBgNVBAsMB3VuaXQgIzExDDAKBgNVBAoMA29yZzEQMA4G
A1UECwwHdW5pdCAjMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABGvZnFxGuVzJ
hOKPs5RNxZBS4vY6ERaqm5tKMGOhxLSfv/dpjDtNNdSHkIGNjYxclHYhxG0ku7BY
PA5uPIjng1SgADAKBggqhkjOPQQDAgNHADBEAiB4GXhhbEU1UFTCe0dwJnKHTQuI
xzYL5FnyhmKdixN/0gIgBXSm9S8L/oJ6rBxemin/V/xKv5jy4TEZuz84nnshxQQ=
-----END CERTIFICATE REQUEST-----

當由 'openssl -noout -subject' 處理時,會得到這個

subject=/OU=unit #1/O=org/OU=unit #2

另一方面,'var_dump( openssl_csr_get_subject( "..." ) )' 將產生這個

csr = array(2) {
["OU"]=>
array(2) {
[0]=>
string(7) "unit #1"
[1]=>
string(7) "unit #2"
}
["O"]=>
string(3) "org"
}

如您所見,排序資訊(對於某些應用程式可能很重要)遺失了。
-2
stephan[at]strato-rz[dot]de
15 年前
傳回的關聯陣列會以主體中的欄位索引,因此您應該有一個名為 CN、OU 等的陣列索引鍵。
在主體中,所以您應該有一個名為 CN、OU 等的陣列鍵。
To Top