1.使用XSell连接服务器

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

2.安装mod_ssl模块

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

[root@centos ~]# rpm -qa | grep mod_ssl

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

[root@centos ~]# yum install mod_ssl openssl

当你看到提示问yes/no的时候,请选择yes允许安装
看到 Complete! 就安装完成了

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

[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(将上面的三个文件都放在一起方便管理和维护)

[root@centos ~]# mkdir /etc/httpd/cert
[root@centos ~]# cd /etc/httpd/cert

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

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

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

b.修改响应的证书信息
注意:配置文件中这些内容并不是连续的,中间有很多注释,如果你有时间,可以仔细阅读这些注释

# 添加 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才可以对外连接。

[root@centos ~]# vim /etc/sysconfig/iptables
# 开启443端口
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT

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

[root@centos ~]# service iptables restart

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

6.配置调整虚拟主机vhosts

[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的行号,使用区域复制来快速编辑

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

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

7.重启Apache服务

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

[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配置文件:

[root@centos ~]# vim /etc/httpd/conf/httpd.conf
ServerName www.example.com:80
Redirect permanent / https://www.example.com

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

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

说明:证书可以通过各种方式获得,如:自签名、社区提供、以及商业机构购买。
管理员应当谨慎选择将要使用的证书的类型。

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

参考一,CentOS:

# 首先,生成长度为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:

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

1 个评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注