无需言 做自己 业 ,精于勤 荒于嬉.

OpenSSL 函数 openssl_x509_checkpurpose 验证是否可以为特定目的使用证书

发表日期:2021-07-01 08:55:24 | 来源: | 分类:OpenSSL 函数

openssl_x509_checkpurpose

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

openssl_x509_checkpurpose验证是否可以为特定目的使用证书

说明

openssl_x509_checkpurpose(
    mixed $x509cert,
    int $purpose,
    array $cainfo = array(),
    string $untrustedfile = ?
): int

openssl_x509_checkpurpose() 检查证书以查看它是否可用于指定目的 purpose.

参数

x509cert

被检查的证书。

purpose

openssl_x509_checkpurpose() 目的
常量名 描述
X509_PURPOSE_SSL_CLIENT 证书是否可以用于SSL连接的客户端?
X509_PURPOSE_SSL_SERVER 证书是否可以用于SSL连接的服务器端?
X509_PURPOSE_NS_SSL_SERVER 证书是否可以用于Netscape SSL服务器?
X509_PURPOSE_SMIME_SIGN 证书是否可以用来签名 S/MIME 邮件?
X509_PURPOSE_SMIME_ENCRYPT 正式是否可用用来加密 S/MIME 邮件?
X509_PURPOSE_CRL_SIGN 证书是否可以用来签名证书撤销列表(CRL)?
X509_PURPOSE_ANY 证书是否可以用于任何目的?
这些选项不是位字段——您只能指定一个字段!

cainfo

cainfo 应该是一个受信任的 CA 文件/文件夹组成的数组,如Certificate Verification所描述的一样。

untrustedfile

如果指定,这应该是PEM编码文件的名称,该文件持有证书,可以用来帮助验证证书,尽管从该文件中获得的证书不受信任。

返回值

如果证书可以用于预期目的,返回 true,如果不行,则返回 false 错误便会返回 -1。

阅读全文 »

OpenSSL 函数 openssl_x509_free 释放证书资源

发表日期:2021-07-01 08:55:24 | 来源: | 分类:OpenSSL 函数

openssl_x509_free

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

openssl_x509_free释放证书资源

说明

openssl_x509_free(resource $x509cert): void

openssl_x509_free() 从内存中释放和指定 x509cert资源相关联的证书。

参数

x509cert

返回值

没有返回值。

阅读全文 »

OpenSSL 函数 openssl_x509_fingerprint 计算一个给定的x.509证书的指纹或摘要

发表日期:2021-07-01 08:55:24 | 来源: | 分类:OpenSSL 函数

openssl_x509_fingerprint

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

openssl_x509_fingerprint计算一个给定的x.509证书的指纹或摘要

说明

openssl_x509_fingerprint(mixed $x509, string $hash_algorithm = "sha1", bool $raw_output = false): string

openssl_x509_fingerprint() 返回x509的字符串类型的摘要。

参数

x509

参见密钥/证书参数以获取有效值列表。

hash_algorithm

使用的摘要方法或散列算法,比如, "sha256", openssl_get_md_methods()摘要算法之一。

raw_output

设置为 true时,输出原始二进制数据。设置为 false时,输出小写的16进制字符串。

返回值

将包含计算的证书指纹的字符串返回为小写16进制格式,除非将raw_output设置为TRUE,在这种情况下会返回消息摘要的原始二进制表示形式。

失败则返回 false .

阅读全文 »

OpenSSL 函数 openssl_x509_parse 解析一个X509证书并作为一个数组返回信息

发表日期:2021-07-01 08:55:24 | 来源: | 分类:OpenSSL 函数

openssl_x509_parse

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

openssl_x509_parse解析一个X509证书并作为一个数组返回信息

说明

openssl_x509_parse(mixed $x509cert, bool $shortnames = true): array

openssl_x509_parse() 返回提供的 x509cert 证书的信息, 包括主题名称、发行方名称、目的、有效日期等字段。

参数

x509cert

shortnames

shortnames 控制数据在数组中的索引 - 如果 shortnamestrue (默认) 字段将以短名称的形式被索引, 否则将会使用长名称的形式 - 比如: CN 就是commonName的短名称格式。

返回值

返回的数据的结构是(故意的)还没有文档化,因为它仍然会发生变化。

阅读全文 »

OpenSSL 函数 openssl_x509_read 解析一个x.509证书并返回一个资源标识符

发表日期:2021-07-01 08:55:24 | 来源: | 分类:OpenSSL 函数

openssl_x509_read

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

openssl_x509_read解析一个x.509证书并返回一个资源标识符

说明

openssl_x509_read(mixed $x509certdata): resource

openssl_x509_read() 解析x509certdata提供的证书,并返回一个资源标识符。

参数

x509certdata

X509 证书。参见 Key/Certificate parameters 获取可用的值。

返回值

成功,返回一个资源标识符, 或者在失败时返回 false.

阅读全文 »

OpenSSL 函数 openssl_x509_verify Verifies digital signature of x509 certificate against a public key

发表日期:2021-07-01 08:55:24 | 来源: | 分类:OpenSSL 函数

      示例1
<?php 
$hostname = "news.php.net";
$ssloptions = array(    "capture_peer_cert" => true,     "capture_peer_cert_chain" => true,     "allow_self_signed"=> false,     "CN_match" => $hostname,    "verify_peer" => true,    "SNI_enabled" => true,    "SNI_server_name" => $hostname,);
 $ctx = stream_context_create( array("ssl" => $ssloptions) );
$result = stream_socket_client("ssl://$hostname:443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $ctx);
$cont = stream_context_get_params($result);
$x509 = $cont["options"]["ssl"]["peer_certificate"];
$certparsed = openssl_x509_parse($x509);
foreach($cont["options"]["ssl"]["peer_certificate_chain"] as $chaincert){
    $chainparsed = openssl_x509_parse($chaincert);
    $chain_public_key = openssl_get_publickey($chaincert);
    $r = openssl_x509_verify($x509, $chain_public_key);
       if ($r==1)    {
        echo $certparsed['subject']['CN'];
        echo " was digitally signed by ";
        echo $chainparsed['subject']['CN']."\n";
    }
}
?>

阅读全文 »

OpenSSL 函数 openssl_x509_export 以字符串格式导出证书

发表日期:2021-07-01 08:55:24 | 来源: | 分类:OpenSSL 函数

openssl_x509_export

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

openssl_x509_export以字符串格式导出证书

说明

openssl_x509_export(mixed $x509, string &$output, bool $notext = true): bool

openssl_x509_export()x509 以PEM编码的格式导出到名为 output 的字符串类型的变量中。

参数

x509

参见密钥/证书参数以获取有效值列表。

output

成功,将会存储 PEM.

notext

可选参数 notext 影响输出的冗余度。如果设为 false,输出内容将包含附加的人类可读信息。notext 的缺省值为 true

返回值

成功时返回 true, 或者在失败时返回 false

阅读全文 »

OpenSSL 函数 openssl_pkey_get_public 从证书中解析公钥,以供使用。

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_pkey_get_public

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

openssl_pkey_get_public从证书中解析公钥,以供使用。

说明

openssl_pkey_get_public(mixed $certificate): resource

openssl_get_publickey()certificate 中解析公钥,供其他函数使用。

参数

certificate

certificate 可以是以下之一:

  1. 一个 X.509 证书资源
  2. 一个file://path/to/file.pem格式的字符串。文件名必须包含一个PEM编码的证书或者密钥(也许二者都有).
  3. 一个 PEM 格式的公钥。

返回值

成功,返回真实的密钥资源标识符,错误,则返回 false

阅读全文 »

OpenSSL 函数 openssl_pkey_export_to_file 将密钥导出到文件中

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_pkey_export_to_file

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

openssl_pkey_export_to_file将密钥导出到文件中

说明

openssl_pkey_export_to_file(
    mixed $key,
    string $outfilename,
    string $passphrase = ?,
    array $configargs = ?
): bool

openssl_pkey_export_to_file() 将 ascii 格式 (PEM编码)的 key 保存到名为outfilename文件中。

注意: 必须安装有效的 openssl.cnf 以保证此函数正确运行。参考有关安装的说明以获得更多信息。

参数

key

outfilename

输出文件的路径。

passphrase

密钥可以通过值为passphrase的密码来保护。

configargs

configargs 可以用来调整导出流程,通过指定或者覆盖openssl配置文件选项。参见 openssl_csr_new() 获取更多关于 configargs 的信息。

返回值

成功时返回 true, 或者在失败时返回 false

阅读全文 »

OpenSSL 函数 openssl_pkey_get_private 获取私钥

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_pkey_get_private

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

openssl_pkey_get_private获取私钥

说明

openssl_pkey_get_private(mixed $key, string $passphrase = ""): resource

openssl_get_privatekey() 解析 key 供其他函数使用。

参数

key

key 可以是如下密钥之一:

  1. 如下格式的字符串 file://path/to/file.pem。该文件必须包含 PEM 编码的证书或者私钥 (可能都包含了).
  2. 一个PEM格式的私钥。

passphrase

如果指定的密钥已被加密了(受密码保护),可选参数 passphrase 是必须要的。

返回值

成功,返回真实的密钥资源标识符,失败,返回 false .

阅读全文 »

OpenSSL 函数 openssl_private_encrypt 使用私钥加密数据

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_private_encrypt

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

openssl_private_encrypt使用私钥加密数据

说明

openssl_private_encrypt(
    string $data,
    string &$crypted,
    mixed $key,
    int $padding = OPENSSL_PKCS1_PADDING
): bool

openssl_private_encrypt() 使用私钥 key 加密数据 data 并且将结果保存至变量 crypted中。加密后的数据可以通过openssl_public_decrypt()函数来解密。

该函数用来签名数据(或者哈希)让别人相信数据并不是其他人写的。

参数

data

crypted

key

padding

padding 可以是如下之一: OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING.

返回值

成功时返回 true, 或者在失败时返回 false

参见

阅读全文 »

OpenSSL 函数 openssl_private_decrypt 使用私钥解密数据

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_private_decrypt

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

openssl_private_decrypt 使用私钥解密数据

说明

openssl_private_decrypt(
    string $data,
    string &$decrypted,
    mixed $key,
    int $padding = OPENSSL_PKCS1_PADDING
): bool
警告

本函数并不会生成安全加密的值,不应用于加密用途。若需要安全加密的值,考虑使用 random_int()random_bytes()openssl_random_pseudo_bytes() 替代。

openssl_private_decrypt() 解密先前通过 openssl_public_encrypt() 函数加密的 data 并将结果保存至decrypted变量中。

你可以用该函数来解密只对你可用的数据。

参数

data

decrypted

key

key 必须是和用来加密数据所用公钥对应的私钥。

padding

padding 可以是如下值: OPENSSL_PKCS1_PADDING, OPENSSL_SSLV23_PADDING, OPENSSL_PKCS1_OAEP_PADDING, OPENSSL_NO_PADDING.

返回值

成功时返回 true, 或者在失败时返回 false

参见

阅读全文 »

OpenSSL 函数 openssl_public_decrypt 使用公钥解密数据

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_public_decrypt

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

openssl_public_decrypt使用公钥解密数据

说明

openssl_public_decrypt(
    string $data,
    string &$decrypted,
    mixed $key,
    int $padding = OPENSSL_PKCS1_PADDING
): bool

openssl_public_decrypt() 解密先前由 openssl_private_encrypt() 加密的数据 data 并且将结果保存至变量 decrypted中。

你可以用该函数来校验消息是否是私钥拥有者写的。

参数

data

decrypted

key

key 必须是和用来加密数据的私钥配对的公钥。

padding

padding 可以是如下至 OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING.

返回值

成功时返回 true, 或者在失败时返回 false

参见

阅读全文 »

OpenSSL 函数 openssl_pkey_new 生成一个新的私钥

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

      示例1
<?php 
$private_key = openssl_pkey_new();
$public_key_pem = openssl_pkey_get_details($private_key)['key'];
echo $public_key_pem;
$public_key = openssl_pkey_get_public($public_key_pem);
var_dump($public_key);
?>

阅读全文 »

OpenSSL 函数 openssl_pkey_get_details 返回包含密钥详情的数组

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_pkey_get_details

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

openssl_pkey_get_details返回包含密钥详情的数组

说明

openssl_pkey_get_details(resource $key): array

该函数返回密钥详情(位长度,密钥,类型).

参数

key

持有密钥的资源。

返回值

成功,返回包含密钥详情的数组,失败返回 false . 返回的数组中包含了如下索引: bits (位数), key (表示公钥的字符串) 和 type (如下密钥类型之一: OPENSSL_KEYTYPE_RSA, OPENSSL_KEYTYPE_DSA, OPENSSL_KEYTYPE_DH, OPENSSL_KEYTYPE_EC 或者 未知类型返回1).

取决于所使用密钥的类型,可能会返回其他额外的信息。请注意,有些元素可能并不总是可用的。

  • OPENSSL_KEYTYPE_RSA, 一个额外的键名为 "rsa"的数组,包含了以下密钥数据:
    Key 说明
    "n" modulus
    "e" public exponent
    "d" private exponent
    "p" prime 1
    "q" prime 2
    "dmp1" exponent1, d mod (p-1)
    "dmq1" exponent2, d mod (q-1)
    "iqmp" coefficient, (inverse of q) mod p
  • OPENSSL_KEYTYPE_DSA, 一个额外的键为 "dsa" 的数组, 包含如下的密钥数据。
    Key 说明
    "p" prime number (public)
    "q" 160-bit subprime, q | p-1 (public)
    "g" generator of subgroup (public)
    "priv_key" private key x
    "pub_key" public key y = g^x
  • OPENSSL_KEYTYPE_DH, 一个额外的键为 "dh" 的数组,包含如下的密钥数据。
    Key 说明
    "p" prime number (shared)
    "g" generator of Z_p (shared)
    "priv_key" private DH value x
    "pub_key" public DH value g^x
  • OPENSSL_KEYTYPE_EC, 一个额外的键为 "ec" 的数组,包含如下的密钥数据。
    Key 说明
    "curve_name" name of curve, see openssl_get_curve_names()
    "curve_oid" ASN1 Object identifier (OID) for EC curve.
    "x" x coordinate (public)
    "y" y coordinate (public)
    "d" private key

阅读全文 »

OpenSSL 函数 openssl_public_encrypt 使用公钥加密数据

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

openssl_public_encrypt

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

openssl_public_encrypt使用公钥加密数据

说明

openssl_public_encrypt(
    string $data,
    string &$crypted,
    mixed $key,
    int $padding = OPENSSL_PKCS1_PADDING
): bool

openssl_public_encrypt() 使用公钥key解密数据 data 并且将结果保存到变量crypted中。 加密的数据可以通过openssl_private_decrypt()函数解密。

该函数可以用来加密数据,供该公钥匹配的私钥拥有者读取。 它也可以用来在数据库中存储安全数据。

参数

data

crypted

这将保存加密的结果。

key

公钥。

padding

padding can be one of OPENSSL_PKCS1_PADDING, OPENSSL_SSLV23_PADDING, OPENSSL_PKCS1_OAEP_PADDING, OPENSSL_NO_PADDING.

返回值

成功时返回 true, 或者在失败时返回 false

参见

阅读全文 »

OpenSSL 函数 openssl_random_pseudo_bytes 生成一个伪随机字节串

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

      示例1
<?php 
for ($i = -1;
 $i <= 4;
 $i++) {
    $bytes = openssl_random_pseudo_bytes($i, $cstrong);
    $hex   = bin2hex($bytes);
    echo "Lengths: Bytes: $i and Hex: " . strlen($hex) . PHP_EOL;
    var_dump($hex);
    var_dump($cstrong);
    echo PHP_EOL;
}
?>

阅读全文 »

OpenSSL 函数 openssl_seal 密封 (加密) 数据

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

      示例1
<?php 
// $data is assumed to contain the data to be sealed// fetch public keys for our recipients, and ready them$fp = fopen("/src/openssl-0.9.6/demos/maurice/cert.pem", "r");
$cert = fread($fp, 8192);
fclose($fp);
$pk1 = openssl_get_publickey($cert);
// Repeat for second recipient$fp = fopen("/src/openssl-0.9.6/demos/sign/cert.pem", "r");
$cert = fread($fp, 8192);
fclose($fp);
$pk2 = openssl_get_publickey($cert);
// seal message, only owners of $pk1 and $pk2 can decrypt $sealed with keys// $ekeys[0] and $ekeys[1] respectively.openssl_seal($data, $sealed, $ekeys, array($pk1, $pk2));
// free the keys from memoryopenssl_free_key($pk1);
openssl_free_key($pk2);
?>

阅读全文 »

OpenSSL 函数 openssl_sign Generate signature

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

      示例1
<?php 
// $data is assumed to contain the data to be signed// fetch private key from file and ready it$pkeyid = openssl_pkey_get_private("file://src/openssl-0.9.6/demos/sign/key.pem");
// compute signatureopenssl_sign($data, $signature, $pkeyid);
// free the key from memoryopenssl_free_key($pkeyid);
?>

      示例2
<?php 
//data you want to sign$data = 'my data';
//create new private and public key$new_key_pair = openssl_pkey_new(array(    "private_key_bits" => 2048,    "private_key_type" => OPENSSL_KEYTYPE_RSA,));
openssl_pkey_export($new_key_pair, $private_key_pem);
$details = openssl_pkey_get_details($new_key_pair);
$public_key_pem = $details['key'];
//create signatureopenssl_sign($data, $signature, $private_key_pem, OPENSSL_ALGO_SHA256);
//save for laterfile_put_contents('private_key.pem', $private_key_pem);
file_put_contents('public_key.pem', $public_key_pem);
file_put_contents('signature.dat', $signature);
//verify signature$r = openssl_verify($data, $signature, $public_key_pem, "sha256WithRSAEncryption");
var_dump($r);
?>

阅读全文 »

OpenSSL 函数 openssl_spki_verify 验证签名公钥和挑战。

发表日期:2021-07-01 08:55:23 | 来源: | 分类:OpenSSL 函数

      示例1
<?php 
$pkey = openssl_pkey_new('secret password');
$spkac = openssl_spki_new($pkey, 'challenge string');
if (openssl_spki_verify(preg_replace('/SPKAC=/', '', $spkac))) {
    echo $spkac;
}
 else {
    echo "SPKAC validation failed";
}
?>

      示例2
<?php 
if (openssl_spki_verify(preg_replace('/SPKAC=/', '', $_POST['spkac']))) {
    echo $spkac;
}
 else {
    echo "SPKAC validation failed";
}
?><keygen name="spkac" challenge="challenge string" keytype="RSA">

阅读全文 »

全部博文(1589)
集速网 copyRight © 2015-2025 宁ICP备15000399号-1 宁公网安备 64010402001209号
与其临渊羡鱼,不如退而结网
欢迎转载、分享、引用、推荐、收藏。