搬瓦工 VPS 上给网站部署 SSL 证书实现通过 HTTPS 访问的教程

昨天给网站加了 SSL 证书,今天趁热打铁,写一下这个的教程,方便大家也给自己的网站加个 SSL。

先说一下本站目前的建站环境:

建站如果用 Nginx,512 MB 内存一般也够用了,如果用 Apache(也就是本站采用的方案),建议内存 1 GB 或者以上。

下面的教程默认以上步骤已全部满足,也就是你已经搭建好了 LAMP 和 WordPress 博客(其他网站也可以,主要是要在 LAMP 里面添加、设置好网站)。

然后需要购买一个 SSL 证书,本站的证书目前是在 ssls.com 购买的,这个大家自行购买即可,其他地方买的都行。如果要免费的,就用 Let’s Encrypt 等免费证书,但是免费证书今天不在讨论范围内,今天说的是已经购买好付费证书后的配置。

配置 SSL

1. 生成 CSR 文件

新建一个目录,比如 /data/ssl,然后切换到该目录,输入下面命令:

openssl req -new -newkey rsa:2048 -nodes -keyout bandwagonhost.net.key -out bandwagonhost.net.csr

将这里的 bandwagonhost.net 替换成你自己的域名。

需要填写下面的内容:

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) [XX]:CN  // 国家代码
State or Province Name (full name) []:Shanghai  // 省
Locality Name (eg, city) [Default City]:Shanghai  // 城市
Organization Name (eg, company) [Default Company Ltd]:Bandwagonhost // 组织或公司名
Organizational Unit Name (eg, section) []:  // 不填
Common Name (eg, your name or your server's hostname) []:bandwagonhost.net // 需要加 SSL 的域名
Email Address []:info@bandwagonhost.net  // 邮箱地址

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:  // 不填
An optional company name []:  // 不填

2. 获取证书

查看刚刚生成的证书:

cat bandwagonhost.net.csr

然后去你购买 SSL 证书的地方提交 CSR 文件,获取证书。

以在 ssls.com 购买的证书为例,验证后会收到两个文件,一个是 bandwagonhost.net.crt,一个是 bandwagonhost.net.ca-bundle,全都下载下来,然后放到刚刚的目录下(/data/ssl)。

3. 配置 Apache

首先需要打开 Apache 的 https 配置,修改文件 /usr/local/apache/conf/httpd.conf,找到 #Include conf/extra/httpd-ssl.conf,把前面的 # 去掉,保存。

然后配置一下 /usr/local/apache/conf/extra/httpd-ssl.conf,模板如下:

Listen 443
SSLPassPhraseDialog  builtin
SSLSessionCache  "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300

<VirtualHost *:443>
	DocumentRoot /data/www/bandwagonhost.net/
	ServerName bandwagonhost.net
	ServerAlias bwh.wpcoder.cn
	ErrorLog "/usr/local/apache/logs/lamp_error_log"
	TransferLog "/usr/local/apache/logs/lamp_access_log"

	SSLEngine on
	SSLProtocol All -SSLv2 -SSLv3
	SSLHonorCipherOrder on
	SSLCipherSuite ALL:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

	SSLCertificateFile /data/ssl/bandwagonhost.net.crt
	SSLCertificateKeyFile /data/ssl/bandwagonhost.net.key
        SSLCertificateChainFile /data/ssl/bandwagonhost.net.ca-bundle

	CustomLog "/usr/local/apache/logs/lamp_ssl_request_log" \
		"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b \"%{Referer}i\" \"%{User-Agent}i\""

	BrowserMatch "MSIE [2-5]" \
		nokeepalive ssl-unclean-shutdown \
		downgrade-1.0 force-response-1.0

	<Directory /data/www/bandwagonhost.net/>
		Options -Indexes +FollowSymLinks
		AllowOverride All
		Require all granted
	</Directory>
</VirtualHost>

把上面所有带有 bandwagonhost.net 字样的,都改成你自己的域名。

需要复制该文件的,请前往:https://oldtang.com/99.html

然后重启一下 Apache 即可:

/etc/init.d/httpd restart

自动跳转 HTTPS

实现这个的方法有两个:

一是直接在 cloudflare 等 DNS 解析处设置强制 HTTPS 访问,这个使用 cloudflare 等用户都会操作,在此不赘述。

二是在网站目录下,新建或者编辑 .htaccess 文件,在最前面加入以下内容:

RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteRule (.*) https://bwh.wpcoder.cn%{REQUEST_URI} [R=301,NC,L]

这段代码的意思是说:当检测到 HTTPS 未开启(!on 嘛)的时候,把请求重定向到 https:// 的对应 URI。

如果想要针对不同的搜索引擎,配置是否跳转或者不跳转,也简单。稍作修改如下:

RewriteEngine On
RewriteCond %{HTTPS} !on [NC]
RewriteCond %{HTTP_USER_AGENT} !(baiduspider|soso|bing|sogou|yahoo|sohu-search|yodao|robozilla|msnbot|msie|feedburner) [NC]
RewriteRule (.*) https://bwh.wpcoder.cn%{REQUEST_URI} [R=301,NC,L]

后续工作

上述步骤完成后,对于 Apache 的设置已经完成,接下来还需要在 WordPress 里进行设置。主要有以下两个步骤。

1. 修改网站 URL

在 WordPress 后台,点击“设置 -> 常规”,修改网站 URL,把 http 改成 https 即可。

2. 替换网站中的所有链接

在 WordPress 后台搜索一个插件:Search and Replace,安装,启用,然后在“工具 -> 查找与替换”里面,选择“查找与替换”,查找一栏输入原来的 http URL,替换那边改成 https 的 URL,注意不要输入完整的域名,足够长即可,否则会提示失败。然后选择所有表,第一次可以把预演模式勾上,看看有多少要替换的,之后把预演模式的勾去掉,然后选择“将更改写入数据库”,点击“执行替换操作”,即可完成替换。

3. 如使用 CDN 还需刷新所有缓存

如果使用了 cloudflare 等 CDN,还需要前往对应的设置地方,刷新所有的 CDN 节点上的缓存。

至此,所有操作已经完成,如果本地出现访问不了的问题,刷新一下浏览器缓存即可。

最终效果就是本站现在这样子了。

未经允许不得转载:Bandwagonhost中文网 » 搬瓦工 VPS 上给网站部署 SSL 证书实现通过 HTTPS 访问的教程