启用SSL升级HTTPS过程记录
之前计划将自己的博客升级SSL,一直没有行动原因如下:
1、成本因素
SSL证书是需要购买的,价格从一年几十元至几千元不等。当然也有免费的证书提供商(比如 Let’s Encrypt ),但是需要每三个月更新一次(免费续期),比较麻烦。于是在Name.com 的推荐下选择了最便宜的 RapidSSL (9.99美金/年)。
2、技术因素
我并没有操作过如何配置并启用SSL,直到今天看到一则信息:
自今天开始,访问尚未在公共证书透明度(CT)日志中登记 SSL 证书的 HTTPS 网站,Chrome 浏览器将会显示全屏警告。Starting today, the Google Chrome browser will show a full-page warning whenever users are accessing an HTTPS website that’s using an SSL certificate that has not been logged in a public Certificate Transparency (CT) log. via: www.bleepingcomputer.com/news/security/starting-today-google-chrome-will-show-warnings-for-non-logged-ssl-certificates/
背景
推动自己必须投入并完成SSL升级的动力是不希望落后技术行业趋势,HTTPS加密是主流不可逆。同时不希望以后打开自己的博客被浏览器显示警告信息。
于是利用午休时间研究技术,下午的时候最终搞定。打开浏览器看到域名前显示的绿色Secure 小锁甚是欣慰,看来这个对自己来说不难。主要参考了两篇文章:
- Linode 主机商提供的参考: Create a Certificate Signing Request
实施
实现SSL证书支持并提供HTTPS访问链接,实际上包含两大阶段:首先是购买申请证书,然后对证书做配置;其次则要配置Host支持SSL(默认端口443)的访问链接。
购买证书
我使用的是Name域名提供商,在其推荐的SSL服务商中选择了RapidSSL 并购买。
证书认证
支付成功后需要在自己的域名商控制面板配置证书,以便证书提供商认同你的域名。 这个配置也比较简单,按照Name后台提示操作即可。但进入Name配置证书前,需要先去自己的Host提供商中生成申请文件(CSR),这是配置SSL认证前必备的资料。生成CSR的具体方法如下:(详细参考: Create a Certificate Signing Request )
1、生成CSR文件
证书认证申请的第一步是获取CSR文件,这个可以通过自己的Host完成。登录主机通过一下命令生成CSR文件:
mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
openssl req -new -days 365 -nodes -keyout www.mydomain.com.key -out www.mydomain.com.csr
在命令行中完成以下信息的输入(Extra信息可忽略):
Generating a 1024 bit RSA private key
......................................................++++++
....++++++
writing new private key to 'www.mydomain.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New Jersey
Locality Name (eg, city) []:Absecon
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyDomain, LLC
Organizational Unit Name (eg, section) []:Web Services
Common Name (eg, YOUR name) []:www.mydomain.com
Email Address []:support@mydomain.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
以上输入的信息特别注意 Common Name
信息输入必须是自己的域名。 否则在域名提供商做SSL证书认证申请时没法通过。
2、证书申请
在Host生成CSR文件后,继续回到Domain服务商完成SSL认证申请工作。
当域名证书申请成功后,证书提供商(赛门铁克)会邮件回复SSL申请成功的邮件,内容包含CRT文件信息(一段加密文本)。我们需要将该文本复制另存为crt为扩展名的文件并存到自己的服务器,如: /etc/apache2/ssl/www.mydomain.com.crt
申请配置中如果发现有错误不成功可参考文章: Troubleshooting SSL errors on certain browsers
Host配置
如果域名证书申请都成功了,接下来便是配置HOST对SSL跳转的支持。
1、引入证书
首先,启用SSL模块服务,打开 /etc/apache2/sites-available/default-ssl.conf
检查 SSLEngine
是否为 on
,同时引入认证文件如下:
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/www.mydomain.com.crt
SSLCertificateKeyFile /etc/apache2/ssl/www.mydomain.com.key
注意:在
default-ssl.conf
文件中只能存在一组SSLCertificateFile
、SSLCertificateKeyFile
文件的引入,如果存在多处则要注释,否则Apache服务启动失败。
如果启用了vhost,则在 /etc/apache2/sites-available/www.mydomain.com.conf
也需要加上 SSLCertificateFile
、 SSLCertificateKeyFile
文件的引入。
2、配置跳转
进入 /etc/apache2/sites-available/000-default.conf
在 <VirtualHost *:80></VirtualHost>
中加入:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
以上意味着为Host配置了全局跳转HTTPS请求方式。
3、生效启用
首先,应用配置:
sudo a2ensite /etc/apache2/sites-available/default-ssl.conf
sudo a2ensite /etc/apache2/sites-available/000-default.conf
然后,重启服务:
sudo service apache2 restart
以上则完成了从证书申请,配置、启用的全过程。此时访问 www.mydomain.com
将自动跳转为 https 方式则意味成功了。
总结
1、尽量选择国外的 SSL证书服务商,这跟选择Domain、Host服务商一个道理(国内的不考虑)。如果是小型站点,建议选购 DV SSL(域名性)的证书服务即可,成本低性价比高。
2、以上关于Host部分是在Ubuntu+Apache2 环境中的配置方法,如果使用Nginx、Tomcat 则请参考对应的Host配置。
证书过期
第一次购买证书在一年前,到2019年5月3日已经过期,于是续费。 (update 2019.5.3)
1、续费后,会提示你重新设置,此时需要将服务器中的csr 文件内容提交到ssl服务商(配置界面提供表单录入),验证成功后,服务商会邮件发一段crt内容。
2、将邮件中的crt部分内容复制粘贴到服务器原来的crt内容中替换保存,然后重启服务器即可。