Linux小课堂: HTTPS协议原理与Apache服务器配置实战
HTTPS协议基础与加密机制
HTTPS(Hypertext Transfer Protocol Secure) 是HTTP协议的安全扩展,通过2个加密协议实现数据加密传输与身份认证,简而言之,HTTPS = HTTP + SSL/TLS,通过加密传输与身份认证保障安全
- 加密协议:
- SSL(Secure Sockets Layer):安全套接字层(旧版)
- TLS(Transport Layer Security):传输层安全协议(SSL的升级版)
其核心机制如下:
1 )加密原理:
- HTTP协议以明文传输数据,易被中间人攻击窃取敏感信息(如密码、银行卡号)
- HTTPS采用非对称加密(如RSA算法)建立安全通道:
- 服务器生成公钥(公开)与私钥(私有)
- 客户端用公钥加密数据,服务器用私钥解密,确保传输内容不可被破解
- 默认端口为443(HTTP为80)
2 ) SSL/TLS协议作用:
- TLS(Transport Layer Security) 是SSL(Secure Sockets Layer)的升级版,提供更安全的加密通信。
- 流程:
- 客户端(浏览器)与服务器(如Apache)协商加密算法。
- 交换密钥并验证身份,建立加密连接。
- 后续通信数据均通过密钥加密传输。
3 ) CA(Certificate Authority)机构的作用:
- 解决中间人攻击:第三方权威机构验证服务器身份,确保公钥合法性
- 数字证书内容:包含服务器公钥、所有者信息、CA签名等
- 浏览器验证流程:访问时自动向CA验证证书合法性,非法证书触发警告
数字证书与CA认证机制
1 ) 证书核心作用
- 解决公钥信任问题:防止攻击者伪造公钥
- 包含信息:服务器域名、公钥、有效期、签发机构
2 ) CA(Certificate Authority)
- 权威第三方机构(如DigiCert、Let’s Encrypt)
- 工作流程:
3 ) 证书类型对比
| 类型 | 适用场景 | 费用 | 浏览器信任度 |
|---|---|---|---|
| 自签名证书 | 测试/内部项目 | 免费 | 警告提示 |
| CA签发证书 | 商业网站/对外服务 | 付费 | 完全信任 |
配置Apache支持HTTPS
步骤1:开放防火墙端口
永久开放443端口(TCP协议)
firewall-cmd --zone=public --add-port=443/tcp --permanent
重载防火墙配置
firewall-cmd --reload
验证已开放端口
firewall-cmd --list-ports # 输出应包含 "443/tcp"
步骤2:安装SSL/TLS模块
安装Apache的SSL模块
yum install -y mod_ssl
重启Apache服务
systemctl restart httpd
步骤3:系统默认证书测试
- CentOS自动生成自签名证书:
- 私钥路径:
/etc/pki/tls/private/localhost.key - 证书路径:
/etc/pki/tls/certs/localhost.crt
- 私钥路径:
- 访问
https://服务器IP测试:- 浏览器提示“不安全”因证书未经CA认证,可手动忽略警告继续访问
- 查看证书信息:有效期通常为1年,颁发者为
localhost.localdomain
生成自签名证书并配置Apache
步骤1:生成私钥与证书请求文件(CSR)
进入Apache配置目录
cd /etc/httpd
创建证书存储目录
mkdir pki && cd pki生成2048位RSA私钥
openssl genrsa -out server.key 2048生成证书签名请求(CSR)
openssl req -new -key server.key -out server.csr
填写CSR信息示例:
Country Name (2-letter code) [XX]: CN
State or Province Name (full name) []: Zhejiang
Locality Name (city) []: Hangzhou
Organization Name (company) []: Webx
Organizational Unit Name (department) []: Linux
Common Name (server FQDN or IP) []: 192.168.0.106 # 需与服务器IP/域名一致
Email Address []: wang@example.com
步骤2:生成自签名证书(CRT)
基于CSR生成有效期为10年的证书
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
步骤3:替换系统默认证书
复制私钥与证书到系统目录
cp server.key /etc/pki/tls/private/
cp server.crt /etc/pki/tls/certs/
步骤4:修改Apache SSL配置
编辑文件 /etc/httpd/conf.d/ssl.conf:
注释默认证书路径,替换为自签名证书
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateFile /etc/pki/tls/certs/server.crt注释默认私钥路径,替换为自生成私钥
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateKeyFile /etc/pki/tls/private/server.key
重启Apache服务:
systemctl restart httpd
步骤5:验证HTTPS访问
-
访问HTTPS站点
https://192.168.0.106→ 浏览器显示不安全警告(因自签名证书) -
处理安全警告
- 因自签名证书未被公共CA认证,浏览器显示 "不安全"警告
- 手动操作:点击 “高级” → “继续前往” 强制访问
-
查看证书信息
- 点击地址栏「不安全」→「证书」→「详细信息」:
- 颁发对象:
192.168.0.106 - 签发者:
Webx/Linux - 公钥算法:RSA (2048 bits)
- 有效期:10年(自设定)
- 颁发对象:
- 点击地址栏「不安全」→「证书」→「详细信息」:
Nestjs 工程示例
import { NestFactory } from '@nestjs/core';
import { readFileSync } from 'fs';
import { AppModule } from './app.module';async function bootstrap() {const httpsOptions = {key: readFileSync('/etc/pki/tls/private/server.key'), // 私钥路径 cert: readFileSync('/etc/pki/tls/certs/server.crt'), // 证书路径 };const app = await NestFactory.create(AppModule, { httpsOptions, // 启用HTTPS });await app.listen(443); // 监听443端口
}
bootstrap();
关键术语说明
- PKI(Public Key Infrastructure):公钥基础设施,包含数字证书、CA、加密算法等组件的安全体系
- 非对称加密:RSA等算法,公钥加密数据、私钥解密,防止传输窃听
- CSR(Certificate Signing Request):包含服务器信息的未签名证书请求文件
- X.509证书:标准证书格式,存储公钥、身份信息及CA签名
注意事项:生产环境必须使用CA认证证书,自签名证书仅限测试用途
生产环境证书建议
1 ) 自签名证书局限性:
- 仅适用于测试或个人项目,浏览器始终提示“不安全”。
- 无法通过CA验证,存在中间人攻击风险。
2 ) 正式证书获取途径:
- 免费证书:
- Let’s Encrypt、ZeroSSL 等机构提供自动签发的DV证书。
- 付费证书:
- DigiCert、GlobalSign 等CA机构提供OV/EV证书,适用于企业级应用。
- 申请流程:
- 向CA提交CSR文件 → 完成域名所有权验证 → 获取签名后的证书(CRT) → 配置到Apache。
3 ) 可信证书申请
- 使用Let’s Encrypt获取免费CA证书:
# 通过Certbot工具自动化申请 yum install certbot python3-certbot-apache certbot --apache -d yourdomain.com
4 ) 强制HTTPS跳转
在Apache配置中添加重定向规则:
<VirtualHost *:80>ServerName 192.168.0.106 Redirect permanent / https://192.168.0.106/
</VirtualHost>
5 ) 增强安全性
- 启用HSTS(HTTP Strict Transport Security)
- 定期轮换密钥(建议每年一次)
总结
证书类型与应用场景对比
| 类型 | 获取方式 | 适用场景 | 成本 | 浏览器信任 |
|---|---|---|---|---|
| 自签名证书 | OpenSSL自行生成 | 测试/个人项目 | 免费 | 警告提示 |
| CA认证证书 | 向DigiCert/Let’s Encrypt等机构购买 | 商业网站 | 付费 | 自动信任 |
关键概念说明
| 术语 | 说明 |
|---|---|
| PKI | 公钥基础设施(Public Key Infrastructure),含CA、RA、证书库等组件 |
| 非对称加密 | RSA/ECC算法,加密与解密使用不同密钥 |
| CSR | 证书签名请求(Certificate Signing Request),含公钥和服务器信息 |
| TLS握手协议 | 包含协商加密套件、交换密钥、验证证书等步骤(RFC 5246定义) |
注:自签名证书适用于测试环境,商业场景需使用CA签发证书以避免浏览器警告
关键总结:
- HTTPS的核心是通过SSL/TLS加密与CA认证解决HTTP明文传输的安全隐患
- 自签名证书可快速实现测试环境加密,但生产环境需依赖权威CA证书建立可信连接
