启用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 小锁甚是欣慰,看来这个对自己来说不难。主要参考了两篇文章:

实施

实现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 文件中只能存在一组 SSLCertificateFileSSLCertificateKeyFile 文件的引入,如果存在多处则要注释,否则Apache服务启动失败。

如果启用了vhost,则在 /etc/apache2/sites-available/www.mydomain.com.conf 也需要加上 SSLCertificateFileSSLCertificateKeyFile 文件的引入。

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内容中替换保存,然后重启服务器即可。

评论已关闭。Comments are turned off for this article.