ssl新闻资讯

文档中心

PHP涔熻兘鑷埗SSL璇佷功锛熸墜鎶婃墜鏁欎綘鐢≒HP鐢熸垚鑷鍚嶈瘉涔?txt

时间 : 2025-09-27 16:29:41浏览量 : 3

什么是SSL证书?

2PHP涔熻兘鑷埗SSL璇佷功锛熸墜鎶婃墜鏁欎綘鐢≒HP鐢熸垚鑷鍚嶈瘉涔?txt

SSL证书就像网站的"身份证",它让浏览器和服务器之间能建立加密连接。当你在浏览器地址栏看到那个小锁图标时,就说明这个网站使用了SSL证书。常见的商业SSL证书由权威机构颁发,但其实我们也可以用PHP自己制作一个"自签名"的证书。

为什么需要自制SSL证书?

1. 本地开发测试:开发HTTPS应用时,不想花钱买正式证书

2. 内部系统:公司内网系统只需内部信任

3. 学习原理:了解SSL/TLS底层工作机制

> 注意:自签名证书不适合生产环境使用,浏览器会显示"不安全"警告。正式网站还是应该购买正规CA颁发的证书。

PHP生成SSL证书的4个步骤

1. 准备工作

确保你的PHP环境安装了OpenSSL扩展:

```php

if (!extension_loaded('openssl')) {

die('OpenSSL扩展未安装!');

}

?>

```

2. 生成私钥

私钥就像保险箱的钥匙,必须严格保密:

$config = array(

"private_key_bits" => 2048, // RSA密钥长度

"private_key_type" => OPENSSL_KEYTYPE_RSA,

);

// 生成私钥

$privateKey = openssl_pkey_new($config);

// 将私钥保存到文件

openssl_pkey_export_to_file($privateKey, 'private.key');

3. 创建CSR(证书签名请求)

CSR包含你的网站信息,相当于"办证申请表":

$dn = array(

"countryName" => "CN", // 国家代码

"stateOrProvinceName" => "Beijing", // 省份

"localityName" => "Beijing", // 城市

"organizationName" => "My Company", // 组织名

"organizationalUnitName" => "IT Department", // 部门

"commonName" => "localhost", // 域名(重要!)

"emailAddress" => "[email?protected]" // 邮箱

// 生成CSR

$csr = openssl_csr_new($dn, $privateKey);

// CSR保存到文件

openssl_csr_export_to_file($csr, 'domain.csr');

4. 自签名生成证书

因为我们是自己签发,所以不需要CA机构:

$certificate = openssl_csr_sign(

$csr,

null, // CA证书(自签所以为null)

$privateKey,

365 // 有效期(天)

// CRT保存到文件

openssl_x509_export_to_file($certificate, 'domain.crt');

SSL实际应用示例

Nginx配置示例

```nginx

server {

listen 443 ssl;

server_name localhost;

ssl_certificate /path/to/domain.crt;

ssl_certificate_key /path/to/private.key;

...其他配置...

Apache配置示例

```apacheconf

ServerName localhost

SSLEngine on

SSLCertificateFile "/path/to/domain.crt"

SSLCertificateKeyFile "/path/to/private.key"

PHP验证客户端证书示例

有时我们需要客户端也提供证书进行双向认证:

// Web服务器需要配置验证客户端证书

if (!empty($_SERVER['SSL_CLIENT_CERT'])) {

$clientCert = $_SERVER['SSL_CLIENT_CERT'];

} elseif (!empty($_SERVER['HTTP_SSL_CLIENT_CERT'])) {

$clientCert = $_SERVER['HTTP_SSL_CLIENT_CERT'];

if (isset($clientCert)) {

$certInfo = openssl_x509_parse($clientCert);

echo "客户端认证成功!用户来自:" . $certInfo['subject']['CN'];

} else {

header('HTTP/1.0 403 Forbidden');

die("需要提供有效的客户端证书");

SSL安全最佳实践

1. 密钥长度:至少2048位(RSA),推荐3072位以上更安全

2. 算法选择:避免使用SHA-1等老旧算法

3. 有效期:不宜过长(建议不超过1年)

4. 密钥保护:私钥文件权限设置为600

PHP OpenSSL函数速查表

|函数|用途|示例|

||||

|`openssl_pkey_new()`|生成新密钥对|`$key = openssl_pkey_new(["private_key_bits"=>2048])`|

|`openssl_csr_new()`|创建CSR请求|`$csr = openssl_csr_new($dn,$privKey)`|

|`openssl_csr_sign()`|签署CSR生成证书|`$cert=openssl_csr_sign($csr,null,$privKey,365)`|

|`openssl_x509_parse()`|解析X509证书信息|`print_r(openssl_x509_parse(file_get_contents('cert.crt')))`|

FAQ常见问题解答

Q: Windows下运行报错找不到OpenSSL?

A: Windows需要安装OpenSSL并设置系统PATH路径

Q: Chrome提示不安全怎么办?

A: Chrome默认不信任自签证书,可以手动导入到受信任根CA

Q: Let's Encrypt不是免费的吗?为什么还要自签?

A: Let's Encrypt适合公网域名,内网或无域名环境适合自签

Q: PHP生成的能用于IIS吗?

A: IIS需要.pfx格式,可以用OpenSSL转换:

openssl pkcs12 -export -out domain.pfx -inkey private.key -in domain.crt

TAG:php制作ssl证书,phpstudy配置ssl证书,如何制作ssl证书,php生成证书图片,生成ssl证书