昨天给网站加了 SSL 证书,今天趁热打铁,写一下这个的教程,方便大家也给自己的网站加个 SSL。
先说一下本站目前的建站环境:
- VPS:搬瓦工 CN2 促销款 20G 方案(年付 49.99 美元)(这里 的第四款方案)
- 一键包:LAMP(搬瓦工搭建 LAMP 教程)
- 博客程序:WordPress(搬瓦工搭建 WordPress 博客教程)
建站如果用 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 访问的教程