|NO.Z.00053|——————————|^^ 部署 ^^|——|Linux&Apache.V03|——|https=Apache+openssl|
一、Apache+openssl实现https(重点):环境准备
### --- Apache+openssl实现https(重点)
~~~ HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输协议)
~~~ 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSl层,
~~~ 用于安全的HTTP数据传输,这个系统被内置浏览器中,提供身份验证与加密通讯方法,
~~~ 现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
### --- 准备工作
~~~ 检查Apache是否支持SSL,检查相应模块是否安装,若安装则将模块启用
[root@localhost ~]# vim /usr/local/apache2/etc/httpd.conf
<IfModule ssl_module> // 默认是开启的
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
LoadModule ssl_module modules/mod_ssl.so // 默认是未开启的,需要开启
~~~ 模块存放目录:/usrl/local/apache2/modules
[root@localhost ~]# ls /usr/local/apache2/modules/ |grep mod_ssl.so
mod_ssl.so // 有这个模块
~~~ 检查是否启用,apachectl -M
[root@localhost ~]# apachectl restart
[root@localhost ~]# apachectl -M
ssl_module (shared) // 开启了模块就可以查看到shared可以查看到
二、CA证书申请
### --- CA证书申请:
~~~ 建立服务器私钥,生成RSA秘钥
[root@server11 cert]# openssl genrsa -out ca.key 1024 // 生成秘钥文件
Generating RSA private key, 1024 bit long modulus
....++++++
..........................++++++
e is 65537 (0x10001)
~~~ 需要一次输入国家/地区/城市/组织/组织单位/Email等信息,
~~~ 最重要的是有一个common name,可以写你的名字或者域名,如果为了https申请,
~~~ 这个必须和域名吻合,否则会引发浏览器警报,生成的csr文件交给CA签名后形成服务端自己的证书
[root@server11 cert]# openssl req -new -key ca.key -out atyanqi.csr // 生成证书
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:atyanqi
Organizational Unit Name (eg, section) []:yjs
Common Name (eg, your name or your server's hostname) []:www.atyanqi.com
Email Address []:yanqi_vip@yeah.net
A challenge password []:
An optional company name []:
~~~ 使用CA服务器签发证书,设置证书的有效期等信息
[root@server11 cert]# openssl x509 -req -days 365 -sha256 -in atyanqi.csr -signkey ca.key -out atyanqi.crt
Signature ok
subject=/C=CN/ST=BJ/L=BJ/O=atyanqi/OU=yjs/CN=www.atyanqi.com/emailAddress=yanqi_vip@yeah.net
Getting Private key
[root@server11 cert]# ls
atyanqi.crt atyanqi.csr ca.key
~~~ #注意1:生成完秘钥和证书文件后,将文件存放在Apache的安装目录下的cert目录下
~~~ #注意2:在生产环境中必须要在https证书厂商注册(否则浏览器不识别)
[root@server11 ~]# mkdir /usr/local/apache2/cert // 创建cert目录
三、配置文件参数
### --- 配置文件修改:
~~~ 调用ssl模块,并启用ssl独立配置文件
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
LoadModule ssl_module modules/mod_ssl.so // 取消注释
# Secure (SSL/TLS) connections
Include etc//extra/httpd-ssl.conf // 取消注释
~~~ 修改conf/extra/httpd-ssl.conf配置文件,调用证书等文件
[root@server11 ~]# vim /usr/local/apache2/etc/extra/httpd-ssl.conf
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5 // 加密套件,默认是开启的,注释掉
#SSLCertificateFile "/usr/local/apache2/etc//server.crt" // 注释掉
#SSLCertificateKeyFile "/usr/local/apache2/etc//server.key"
#添加如下内容
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLProtocol all -SSLv2 -SSLv3
#添加SSL协议支持协议,去掉不安全的协议
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
#修改加密套件
SSLCertificateFile cert/atyanqi.crt
#证书公钥配置(签字的)
SSLCertificateKeyFile cert/ca.key
#证书私钥配置
~~~ 修改主配置文件,添加虚拟主机
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
<VirtualHost _default_:443> // _default_:443也可以写成:*:443
#DocumentRoot目录位置要和httpd.conf里面的一致
DocumentRoot "/usr/local/apache2/htdocs"
ServerName localhost:443
SSLCertificateFile cert/atyanqi.crt
SSLCertificateKeyFile cert/ca.key
SSLCertificateChainFile cert/atyanqi.crt
</VirtualHost>
四、实验验证
### --- 验证结果
~~~ #报错信息
[root@server11 ~]# apachectl -t // 检查配置文件语法
AH00526: Syntax error on line 86 of /usr/local/apache2/etc/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).
~~~ #解决方案:
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf // 把这个模块加上
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so // 默认是注释掉的,开启即可
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart // 重启Apache,并测试是否可以使用https访问
tcp6 0 0 :::80 :::* LISTEN 1747/httpd
tcp6 0 0 :::443 :::* LISTEN 1747/httpd
~~~ #既有80端口也有443端口,两个端口都可以使用
### --- 原件
~~~ #报错信息:AH00526:Syntax error on line 78 of /usr/local/apache2/etc/extra/httpd-ssl.conf:
SSLSessionCache:'shmcb' session cache not supported (known names:).Maybe you need to load the appropriate socache module (mod_socache_shmcb?)
~~~ #解决方案:要么不调用此模块,要么让调用的模块加载上。
~~~ #http访问:http://10.10.10.11/
www.yanqiv1.com
~~~ #https访问:https://10.10.10.11/ // 但会显示证书有风险,因为我们是自己创建的证书,生产环境中都是找专业的证书厂商注册。
It works!
五、强制跳转https
### --- 强制跳转https
~~~ 有些时候为了安全,网站不允许使用http访问,仅允许使用https访问,
~~~ 目的是为了更加安全在http部分目录权限标签中添加以下内容
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf // 添加规则,当用户访问时使用80端口时,必须用443端口。
<Directory "/usr/local/apache2/htdocs">
Require all granted // 默认就有;添加如下内容
RewriteEngine on
#开启转发规则
RewriteCond %{SERVER_PORT} !^443$
#检查访问端口只要目标不是443的
RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]
#全部使用https重新访问
</Directory></Directory>
### --- 验证apache配置文件是否正确
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
[root@server11 ~]# netstat -antp // 两个端口都存在,但是使用80访问时会自动强制跳转到443端口https。
tcp6 0 0 :::80 :::* LISTEN 1747/httpd
tcp6 0 0 :::443 :::* LISTEN 1747/httpd
### --- http://10.10.10.11/yanqiv1/访问会自动跳转到:https://10.10.10.11/yanqiv1/
~~~ 在做后面实现时为了更加方便理解,我们可以先把https关闭掉,
~~~ 需要关闭:跳转&虚拟主机&ssl配置文件调用
[root@server11 ~]# vim /usr/local/apache2/etc/httpd.conf
#关闭跳转
<Directory "/usr/local/apache2/htdocs">
#RewriteEngine on
#开启转发规则
#RewriteCond %{SERVER_PORT} !^443$
#检查访问端口只要目标不是443的
#RewriteRule ^(.*)?$ https://%{SERVER_NAME}/$1 [R=301,L]
#全部使用https重新访问
</Directory>
#关闭虚拟主机
#<VirtualHost _default_:443>
#DocumentRoot目录位置要和httpd.conf里面的一致
# DocumentRoot "/usr/local/apache2/htdocs"
# ServerName localhost:443
# SSLCertificateFile cert/atyanqi.crt
# SSLCertificateKeyFile cert/ca.key
# SSLCertificateChainFile cert/atyanqi.crt
#</VirtualHost>
#关闭https的配置文件关闭
#Include etc//extra/httpd-ssl.conf
#关闭虚拟主机的配置文件
#Include etc//extra/httpd-vhosts.conf
### --- 重启Apache服务器
[root@server11 ~]# apachectl -t
Syntax OK
[root@server11 ~]# apachectl restart
~~~ 清理浏览器
http://10.10.10.11/ // 验证访问OK
It works!
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv007-network
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?