CentOS7+Apache使用SSL配置HTTPS 服务

2022-12-15 15:22:55 浏览数 (1)

1.使用XSell连接服务器

这个网络上有教程,而且非常简单,我这里就不记录了。

2.安装mod_ssl模块

首先,检查是否已安装SSL模块

代码语言:javascript复制
[root@centos ~]# rpm -qa | grep mod_ssl

如果发现什么都没显示说明没有安装,没有mod_ssl模块,Apache无法提供SSL服务。

使用yum在线安装。

代码语言:javascript复制
[root@centos ~]# yum install mod_ssl openssl

当你看到提示问yes/no的时候,请选择yes允许安装

看到 Complete! 就安装完成了

安装成功后再次检查安装信息,会显示版本信息:

代码语言:javascript复制
[root@centos ~]# rpm -qa | grep mod_ssl
mod_ssl-2.4.6-89.el7.centos.x86_64

3.下载和上传证书

我这边采用的是阿里云的DV SSL证书(如果要使用自签名的证书,请移步到文章底部备注部分),从阿里云下载的证书解压后一共有三个文件分别是

xxxx_xxxx.key

xxxx_xxxx_xxx_chain.crt

xxxx_xxxx_xxx_public.crt

DV、EV、OV三种类型证书的区别

数字证书

DV SSL

OV SSL

EV SSL

用户建议

个人

组织、企业

大型企业、金融机构

公信等级

一般

认证强度

网站真实性

组织及企业真实性

严格认证

安全性

一般

可信度

常规

高(地址栏绿色)

然后在Apache的安装目录下创建一个目录cert(将上面的三个文件都放在一起方便管理和维护)

代码语言:javascript复制
[root@centos ~]# mkdir /etc/httpd/cert
[root@centos ~]# cd /etc/httpd/cert

使用Xshell上传文件可点击工具栏的新建文件传输按钮,弹出框后点击取消会跳转到另一个标签页,此时可将三个文件直接拖拽到黑窗口进行上传。

代码语言:javascript复制
sftp:/etc/httpd/cert> 
Uploading yourname.key to remote:/etc/httpd/cert/yourname.key
sftp: sent 1.63 KB in 0.11 seconds
Uploading public.crt to remote:/etc/httpd/cert/public.crt
sftp: sent 1.92 KB in 0.13 seconds
Uploading chain.crt to remote:/etc/httpd/cert/chain.crt
sftp: sent 1.63 KB in 0.12 seconds

4.配置SSL

a.编辑ssl.conf

注:也可能是/etc/httpd/conf/extra/httpd-ssl.conf文件,与操作系统及安装方式有关

检查端口443及前面是否有#号,LoadModule是指支持HTTP所需要的模块,如果没有LoadModule,可手动添加一行LoadModule ssl_module modules/mod_ssl.so

代码语言:javascript复制
[root@centos ~]# vim /etc/httpd/conf.d/ssl.conf
# 添加SSL支持模块
LoadModule ssl_module modules/mod_ssl.so 
# http ssl默认端口为443,如果有#号需删除才可以使用
Listen 443 https

b.修改响应的证书信息

(注意:配置文件中这些内容并不是连续的,中间有很多注释,如果你有时间,可以仔细阅读这些注释)

代码语言:javascript复制
# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3
# 修改加密套件如下
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP: MEDIUM
SSLHonorCipherOrder on
# 证书公钥配置,你的对应证书文件路径
SSLCertificateFile /etc/httpd/cert/public.crt
# 证书私钥配置,你的对应证书文件路径(将文件名改成你自己的)
SSLCertificateKeyFile /etc/httpd/cert/yourname.key
# 证书链配置,你的对应证书文件路径,如果该属性开头有 '#'字符,请删除掉
SSLCertificateChainFile /etc/httpd/cert/chain.crt

c.修改完毕之后保存并退出

5.配置防火墙

SSL服务必须在防火墙配置中开启443端口,HTTPS才可以对外连接。

代码语言:javascript复制
[root@centos ~]# vim /etc/sysconfig/iptables
# 开启443端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

编辑完毕退出并保存,然后重启防火墙服务

代码语言:javascript复制
[root@centos ~]# service iptables restart

这里需要注意一点:如果你使用的是云服务器,并且在iptables里开放了443端口,依然无法通过443端口访问你的服务器的话,请尝试在云服务器提供商提供的控制台中修改安全组策略。

6.配置调整虚拟主机vhosts

代码语言:javascript复制
[root@centos ~]# vim /etc/httpd/conf/vhosts.conf
# 这是我们之前典型的HTTP配置
<VirtualHost *:80>
    DocumentRoot "/var/www/example"
    ServerName example.com
    ServerAlias
    <Directory "/var/www/example">
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
</VirtualHost>

# 这是新增的HTTPS的配置
<VirtualHost *:443>
    DocumentRoot "/var/www/example"
    ServerName example.com
    ServerAlias
    <Directory "/var/www/example">
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
    # 开启SSLEngine及设置使用的证书,端口443
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/public.crt
    SSLCertificateKeyFile /etc/pki/tls/private/yourname.key
</VirtualHost>

技巧:这里我们可以开启vim的行号,使用区域复制来快速编辑

代码语言:javascript复制
# 进入vim之后执行以下命令显示行号
:set number
# 另外记录以下隐藏行号
:set nonumber
# vim区域复制,示例为拷贝30-41行到43行,如果43行有内容,会自动下移(并不会被覆盖)
:30,41 copy 43

注:如果您的服务器上不只一个站点,需要对要建立安全连接的所有站点进行对应的设置

7.重启Apache服务

一切配置完成后,必须重新启动Apache服务,配置才会生效。

代码语言:javascript复制
[root@centos ~]# service httpd restart

8.测试

在浏览器中输入 https://example.com

a.如果出现和 http:// 访问效果一样的情况,说明配置成功

b.如果出现 建立安全连接失败,SSL接收到一个超出最大准许长度的记录。(错误码:SSL_ERROR_RX_RECORD_TOO_LONG)说明配置有误

解决方案:检查证书路径是否正确;检查ssl.conf配置是否正确;检查vhost.conf配置是否正确;检查证书是否过期。

9.强制web服务始终使用https

如果您需要站点只使用HTTPS,此时就需要将所有HTTP请求(端口80)重定向到HTTPS(端口443)。 Apache可以容易地做到。

a.强制主站所有web使用(全局)

如果要强制主站使用HTTPS,我们可以这样修改httpd配置文件:

代码语言:javascript复制
[root@centos ~]# vim /etc/httpd/conf/httpd.conf
ServerName www.example.com:80
Redirect permanent / https://www.example.com

b.强制虚拟主机(单个站点)

如果要强制单个站点在虚拟主机上使用HTTPS,对于HTTP可以按照下面进行配置:

代码语言:javascript复制
[root@centos ~]# vim /etc/httpd/conf/vhosts.conf
<VirtualHost *:80>
ServerName www.example.com
# 增加这一条即可
Redirect permanent / https://www.example.com/
    <Directory>
        ...
        ...
    </Directory>
</VirtualHost>

说明:证书可以通过各种方式获得,如:自签名、社区提供、以及商业机构购买。

管理员应当谨慎选择将要使用的证书的类型。

备注自签名证书生成方法:

参考一,CentOS:

代码语言:javascript复制
# 首先,生成长度为2048bits的私钥
[root@centos ~]# openssl genrsa -out yourname.key 2048
# 然后,生成证书签名请求(CSR),这里需要填写许多信息,如国家,省市,公司等
[root@centos ~]# openssl req -new -key server.key -out server.crt
# 最后,生成类型为X509的自签名证书。有效期设置3650天,即有效期为10年
[root@centos ~]# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

参考二,Ubuntu:

代码语言:javascript复制
root@ubuntu:/etc/ssl/private# sudo openssl req -new -x509 -days 365 -sha1 -newkey rsa:1024 -nodes -keyout demo.key -out demo.crt

参数说明:

-x509 显示证书和签名工具

-days 证书的有效期

-sha1 证书加密算法

-newkey rsa:1024 创建一个新key,1024表示公钥长度为1024bits

需要填写的项目:

国家

Country Name (2 letter code) AU: CN

省份

State or Province Name (full name) Some-State:SC

城市

Locality Name (eg, city) []:CD

公司名称

Organization Name (eg, company) Internet Widgits Pty Ltd:your_company_name.Ltd

组织单位名称

Organizational Unit Name (eg, section) []:your_unit_name

域名

Common Name (eg, YOUR name) []: example.com

电子邮件地址

Email Address []:example@gmail.com

命令执行完会创建demo.key与demo.crt

参考文章:

如何配置云服务器 CentOS 7.0 系统 Apache HTTPS 服务

Apache 使用ssl模块配置HTTPS

Apache 搭建HTTPS Virtual Host

更多参数说明可以参考:http://www.openssl.org/docs/apps/openssl.html

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:

原文出处:Yiiven https://cloud.tencent.com/developer/article/2193273

0 人点赞