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