Apache 2.4使用私有CA证书实现HTTPS加密访问
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache 2.4使用私有CA证书实现HTTPS加密访问相关的知识,希望对你有一定的参考价值。
HTTPS
- HTTPS Hyper Text Transfer Protocol over SecureSocket Layer
- HTTPS 是以安全为目标的 HTTP 通道
- HTTPS 在HTTP 基础上加入 SSL
- HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL
- HTTPS 通过传输加密和身份认证保证了传输过程的安全性
HTTPS 会话的简化过程
- 客户端与服务器完成TCP三次同步握手
- 客户端发送可供选择的加密方式,并向服务器请求证书
- 服务器端发送证书以及选定的加密方式给客户端
- 客户端取得证书并进行证书验证,如果信任给其发证书的CA
3.1 验证证书来源的合法性;用CA的公钥解密证书上数字签名
3.2 验证证书的内容的合法性:完整性验证
3.3 检查证书的有效期限
3.4 检查证书是否被吊销
3.5 证书中拥有者的名字,与访问的目标主机要一致 - 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
- 服务用此密钥加密用户请求的资源,响应给客户端
注意:SSL是基于IP地址实现,单IP的httpd主机,仅可以使用一个https虚拟主机
apache httpd 实现https
- 需要启用mod_ssl模块
- 把证书的三个文件仍进服务器
- 修改配置文件的指明证书文件、私钥文件[和上级证书链]路径
- 添加上级证书链指明上级证书颁发者有助于浏览器建立信任
1. 为服务器申请数字证书
1.1可以通过私建CA颁发证书实现
- 创建私有CA
- 在服务器创建证书签署请求
- CA对http服务器签发证书
1.2可以生成自签名证书
make httpd.crt
2. 配置httpd支持使用ssl,及使用的证书
2.1安装mod_ssl模块包
yum -y install mod_ssl
- 编译安装时如已启动ssl,则无需再装此模块
2.2 修改httpd对应的ssl.conf配置文件:
- yum或包安装
/etc/httpd/conf.d/ssl.conf
- 编译安装
/<安装目录>/conf/extra/httpd-ssl.conf
DocumentRoot
ServerName
SSLCertificateFile /path/file
SSLCertificateKeyFile /path/file
SSLCACertificateFile /path/file
3. 测试基于https访问相应的主机
openssl s_client [-connect host:port] [-cert filename] [-CApath directory] [-CAfile filename]
实现默认访问https
- 利用RewriteEngine重写请求可以实现将http请求转发至https
#注意: RewriteEngine指令需要开启mod_rewrite.so模块
[root@centos8 ~]#vim /etc/httpd/conf.d/test.conf
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
Apache 2.4.48实现https
安装mod_ssl包
mod_ssl
rpm -qi mod_ssl
Name : mod_ssl
Epoch : 1
Version : 2.4.37
Release : 30.module_el8.3.0+561+97fdbbcc
Architecture: x86_64
Install Date: Fri 28 May 2021 01:58:10 AM CST
Group : System Environment/Daemons
Size : 268326
License : ASL 2.0
Signature : RSA/SHA256, Wed 04 Nov 2020 12:00:55 PM CST, Key ID 05b555b38483c65d
Source RPM : httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.src.rpm
Build Date : Wed 04 Nov 2020 11:21:28 AM CST
Build Host : x86-02.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys <bugs@centos.org>
Vendor : CentOS
URL : https://httpd.apache.org/
Summary : SSL/TLS module for the Apache HTTP Server
Description :
The mod_ssl module provides strong cryptography for the Apache Web
server via the Secure Sockets Layer (SSL) and Transport Layer
Security (TLS) protocols.
查看生成的文件
rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf.modules.d/00-ssl.conf
/usr/lib/.build-id
/usr/lib/.build-id/e6/046e586d8d19fb92e3f8484a62203e841c3e2a
/usr/lib/systemd/system/httpd-init.service
/usr/lib/systemd/system/httpd.socket.d/10-listen443.conf
/usr/lib64/httpd/modules/mod_ssl.so
/usr/libexec/httpd-ssl-gencerts
/usr/libexec/httpd-ssl-pass-dialog
/usr/share/man/man8/httpd-init.service.8.gz
/var/cache/httpd/ssl
将配置文件和mod_ssl.so部署到程序目录
- yum安装的mod_ssl文件自动部署到了不同文件夹,
- 如果程序是编译安装,需要将对应文件拷贝至编译安装目录
- 在编译时如果已配置开启ssl功能,则只需修改配置文件即可
生成证书文件
- 在企业内部我们可以使用私有CA颁发证书
- 为sunmy.Sun.co 生成证书文件
sunmy 证书创建成功
证书生成完成
**************************************生成证书文件如下**************************************
证书存放目录: /sunmy
证书文件列表: sunmy.crt sunmy.csr sunmy.key
- 快速搭建私有CA服务器
https://blog.csdn.net/timonium/article/details/116199379 - 快速颁发证书
https://blog.csdn.net/timonium/article/details/116209628
在httpd安装目录下创建ssl连接的证书文件夹
- 生产中需要将每个项目网站的证书和私钥存在对应的文件夹中
[root@C8-192 ~]# cp -av /sunmy /apps/httpd24/ssl/
'/sunmy' -> '/apps/httpd24/ssl/sunmy'
'/sunmy/sunmy.key' -> '/apps/httpd24/ssl/sunmy/sunmy.key'
'/sunmy/sunmy.csr' -> '/apps/httpd24/ssl/sunmy/sunmy.csr'
'/sunmy/sunmy.crt' -> '/apps/httpd24/ssl/sunmy/sunmy.crt'
编辑配置httpd_ssl.conf配置文件
vim /apps/httpd24/conf/extra/httpd-ssl.conf
- 添加https虚拟主机
## SSL Virtual Host Context
##
<VirtualHost *:443>
ServerName sunmy.sun.co ## 项目网站域名
DocumentRoot "/webDB/vhosts/sunmy" ## 项目网站目录
<Directory "/webDB/vhosts/sunmy"> ## 对目录授权,否则无法访问
Options None
AllowOverride None
Require all granted
</Directory>
SSLCertificateFile "/apps/httpd24/ssl/sunmy/sunmy.crt" ## 证书文件
SSLCertificateKeyFile "/apps/httpd24/ssl/sunmy/sunmy.key"## 私钥
SSLEngine on ## 开启ssl引擎
<FilesMatch "\\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/apps/httpd24/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
重新加载配置文件并重启服务后生效
systemctl daemon-reload && systemctl restart httpd
访问网站做测试
[root@C8-192 ~]# curl sunmy.sun.co
<h1>I am SunMY</h1>
[root@C8-192 ~]# curl -k https://sunmy.sun.co
<h1>I am SunMY</h1>
httpd-ssl.conf内容
[root@C8-192 ~]# grep -Ev "^ *#|^$" /apps/httpd24/conf/extra/httpd-ssl.conf
Listen 443
SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLProxyCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES
SSLHonorCipherOrder on
SSLProtocol all -SSLv3
SSLProxyProtocol all -SSLv3
SSLPassPhraseDialog builtin
<VirtualHost *:443>
ServerName sunmy.sun.co
DocumentRoot "/webDB/vhosts/sunmy"
<Directory "/webDB/vhosts/sunmy">
Options None
AllowOverride None
Require all granted
</Directory>
SSLCertificateFile "/apps/httpd24/ssl/sunmy/sunmy.crt"
SSLCertificateKeyFile "/apps/httpd24/ssl/sunmy/sunmy.key"
SSLEngine on
<FilesMatch "\\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/apps/httpd24/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
<VirtualHost _default_:443>
DocumentRoot "/apps/httpd24/sunmy"
ServerName sunmy.sun.co
<directory /webDB/vhosts/sunmy>
require all granted
</directory>
SSLEngine on
SSLCertificateFile "/apps/httpd24/ssl/sunmy/sunmy.crt"
SSLCertificateKeyFile "/apps/httpd24/ssl/sunmy/sunmy.key"
<FilesMatch "\\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/apps/httpd24/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \\
nokeepalive ssl-unclean-shutdown \\
downgrade-1.0 force-response-1.0
CustomLog "/apps/httpd24/logs/ssl_request_log" \\
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\"%r\\" %b"
</VirtualHost>
以上是关于Apache 2.4使用私有CA证书实现HTTPS加密访问的主要内容,如果未能解决你的问题,请参考以下文章
树莓派/Debian Apache2 配置自建 CA 实现 HTTPS(SSL) 服务