为什么?

如果不知道为什么,请绕路。

会不会很贵?

随着阿里云、腾讯云等相继退出 ssl证书服务,ssl 证书已经比较亲民。推荐大家使用收费的 ssl 证书,相对于你的业务量来说,ssl 证书真的不贵。如果你是个人站长,例如本人,不想花费,那么还是有免费的午餐
https://www.sslforfree.com/

申请

sslforfree 不支持泛域名,但是一个证书可以包含100个域名,对于大多数情况下都是够用的,比较蛋疼的是一次输入多个域名,需要验证的过程会非常麻烦,因为每个域名都需要上传一个验证文件或者增加一条 TXT 记录来验证域名的有效性。所以建议大家一开始不用太贪心,输入实在要使用的域名即可,如果新增了域名,后面还是可以通过申请新的证书来解决。

图片描述

多个域名通过空格符间隔开。
点击「Create」就是进入验证界面,验证完毕之后就可以下载证书了。

安装证书

打开压缩包里面有3个文件

  • private.key
  • ca_bundle.crt
  • certificate.crt

三个文件分别对应 Apache 配置里面的:

  • SSLCertificateKeyFile
  • SSLCertificateFile
  • SSLCertificateChainFile

上面的对应关系大家不要对应错了。

yum install mod_ssl openssl   

编辑 /etc/httpd/conf/httpd/conf

LoadModule ssl_module modules/mod_ssl.so

Listen 443
NameVirtualHost *:443

<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /www
SSLEngine on
SSLHonorCipherOrder on

# 禁止SSLv2 SSLv3协议
SSLProtocol all -SSLv2 -SSLv3

#禁止RC4,禁止SF
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

SSLCertificateFile             /sslforfree/certificate.crt
SSLCertificateKeyFile         /sslforfree/private.key
SSLCertificateChainFile     /sslforfree/ca_bundle.crt
</VirtualHost>

注意:

  1. 使用绝对路径指向证书文件
  2. 如果一个 IP 供应多个域名和证书,一定要加上 NameVirtualHost 443

遇到的坑

在一个 IP 供应多个域名和证书这个问题,折腾了很久,主要的域名是 apache 版本一定要高于 2.2.12,才支持 SNI。支持 SNI 才能实现一个 IP 供给多个证书。另外就是忘记了 NameVirtualHost 443,老是只有一个证书生效,另外一个证书失效。sslforfree虽然是免费的,但是因为没3个月就需要 renew 一次,如果嫌麻烦,还是推荐使用付费证书服务。

自动跳转https

安装 ssl 证书之后,默认情况下用户是可以使用 http 和 https 两种方式来访问服务,如果希望自动跳转,推荐使用下面的方式


<VirtualHost *:80>
ServerName www.example.com
# 全站跳转
Redirect permanent / https://www.example.com
# 指定跳转
Redirect permanent /user/login https://www.example.com/user/login
</VirtualHost>

Tim_Pan
222 声望5 粉丝

当被琐事压的喘不过气,静静地写行代码,解个谜题,这个世界仿佛又重新属于我