内网https需要ssl证书_网站HTTPS之路——安装、配置SSL证书及强制开启HTTPS

本文详细介绍了如何为内网网站申请并安装SSL证书,包括通过阿里云申请免费证书的步骤、证书安装教程以及针对WordPress、Question2Answer等多个系统的HTTPS强制开启方法,帮助网站实现全站HTTPS安全访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

089d9e4bea47d611c814806869feb3cb.png

从2018年年底开始,谷歌浏览器Chrome对于http://站点将显示不安全的标志。所以最近终于开始琢磨SSL证书的事,让自己的网站不再显示不安全。

一、证书申请

对于个人站点而言,当然首选免费的SSL证书,毕竟财力有限,况且用户和数据也相对较少,要求略低。因为ECS服务器用的是阿里云,所以证书首先想到的也是他家。
阿里云申请证书有两种途径,一种是通过控制台中SSL首页免费购买,还有一种通过域名管理开启SSL。
相对而言,第二种会简便些,因为点击之后就可以直接填写域名。

cedd626ad01099c5b1f5c260b3cb5790.png


在申请证书页面,选择DV SSL证书(免费版)。
这里需要提醒的是,只有收费证书才适合通配符*,所以如果你像我一样拥有好几个二级域名的话,只能一个个申请。只有一个主站的话,填写www就可以了。

3abccc3f8dc77282550ff2238a3ca62b.png


点击申请后,页面提示申请成功。

0bdb839860216db4361503535813b65b.png


进入到证书控制台首页后,会出现刚刚你申请的免费SSL信息卡。
继续点击申请按钮。

31251d2fc52c441ac7cd4a4043761af3.png


如果这个时候你回到域名解析的页面,会发现多了一条解析内容。这也是下一步验证所需要的,阿里云已经帮你自动填写好了。

44ac336ad911148efab62cdcec491fd6.png


点击验证,提示验证成功。
验证需要一定的时间,所以如果你申请后马上点验证,可能会出现验证失败的情况,此时需要耐心等待几分钟。

33d2630cc5438513aad3b55af6f75331.png


接下去又是耐心等待的时刻,大约十分钟左右(时间不一定,而且首次申请可能花费的时间会长一点)证书就下来了。

893bf188b80067b8aa987dd0f6a7111d.png


点击下载后,系统会让你选择服务器类型,此处我选择nginx。

6949475aa3d57a9f6386cdd4b0ee292b.png


打开下载的压缩包后,你会发现有两个扩展名为key和pem的文件,这就是我们需要的证书文件了。

二、证书安装

接下去,你可以根据阿里云的安装教程进行,将证书文件复制到nginx下的cert目录下(该目录你可以根据实际情况自行决定,只要在稍后修改配置文件时准确填写位置就成)。
阿里云教程中的内容是初始化服务器时的配置,打开nginx.conf,然后找到:

# HTTPS server
# #server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
# ssl_prefer_server_ciphers on;
# location / {
#
#
#}
#}

将其修改为:

server {
  listen 443;
  server_name localhost;
  ssl on;
  root html;
  index index.html index.htm;
  ssl_certificate   cert/a.pem;
  ssl_certificate_key  cert/a.key;
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  location / {
     root html;
     index index.html index.htm;
  }
}

如果你的配置文件正好符合,那么就按照官方的来好了。但是通常我们很少能够找到这么合适的。
因为我的ECS上有不同的虚拟主机用于运行不同的系统,并且大都以二级域名的形式,所以每个子站点都有独立的配置文件。此处以子站http://test.mindseed.cn(虚构)为例。
通常配置文件会以这样的形式开头:

server {
  listen 80;
  server_name test.mindseed.cn; 
  access_log /vhost/test.mindseed.cn_nginx.log combined;
  index index.html index.htm index.php;
  root /vhost/test.mindseed.cn;
  ……
}

其实网上有很多方法提到安装SSL证书,对于配置文件的修改也有很多。具体也可以参考nginx的官方说明。
如果你希望直接使用https,不再留恋http,那么直接替换80端口为443端口,修改如下;

server {
  listen 443 ssl;
  server_name test.mindseed.cn; 
  access_log /vhost/test.mindseed.cn_nginx.log combined;
  index index.html index.htm index.php;
  root /vhost/test.mindseed.cn;
 
  #ssl on;
  ssl_certificate   /cert/test.mindseed.cn.pem;
  ssl_certificate_key  /cert/test.mindseed.cn.key;
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ……
}

上述做法并不保证一定能成功,至少我的Question2Answer访问时竟然跳到其他子站了。所以保险点可以保留监听80端口,直接在后面添加ssl的设置代码:

server {
  listen 80;
  listen 443 ssl;
  server_name test.mindseed.cn; 
  access_log /vhost/test.mindseed.cn_nginx.log combined;
  index index.html index.htm index.php;
  root /vhost/test.mindseed.cn;
 
  #ssl on;
  ssl_certificate   /cert/test.mindseed.cn.pem;
  ssl_certificate_key  /cert/test.mindseed.cn.key;
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ……
}

这样做正常情况并不会有太大问题,但是要添加重定向代码时就会发生错误了,随便放那里都可能导致浏览器提示重定向过多。
所以还是需要适当修改一下:

server {
  listen 80;
  server_name test.mindseed.cn;
}
server {
  listen 443 ssl;
  server_name test.mindseed.cn; 
  access_log /vhost/test.mindseed.cn_nginx.log combined;
  index index.html index.htm index.php;
  root /vhost/test.mindseed.cn;
 
  #ssl on;
  ssl_certificate   /cert/test.mindseed.cn.pem;
  ssl_certificate_key  /cert/test.mindseed.cn.key;
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ……
}

这应该算是比较保险的写法了,虽然多了几行代码,但能减少必要的麻烦。

三、强制开启HTTPS

强制开启HTTPS最简单的方法就是通过重定向方式转到HTTPS。
在上述代码中继续添加重写规则,如下:

server {
  listen 80;
  server_name test.mindseed.cn; 
  rewrite ^(.*)$  https://$host$1 permanent;
}

当然除了这种方式,各个系统也有自己的开启方式,下面逐一做简单介绍。

1. WordPress

使用率高就是好,随便在网上搜一下就有教程。可最终你会发现真的是五花八门,甚至还有很多仍停留在过去的老版本中。
首先也是最重要的就是在后台设置中将网站的URL改成HTTPS打头的。

2ec5493578b55a43ea776685a3a0685a.png

2. Question2Answer

都快把这个给忘了,之所以放在第二位是因为它的问题最大。直接导致我的WordPress主站500错误无法打开。因为当时为了让两个系统合并共用同一组用户而进行过特别设置,而就在我快把它给忘却时,它却来刁难我了。
还有一个很妖的问题也出现在它身上,就是如果不强制开启HTTPS的话,它竟然会在各个子站中乱窜。比方说http://ask.mindseed.cn是它的域名,可打开的有可能就是http://tech.mindseed.cn,太神奇了。而一旦加上HTTPS前缀之后又一切正常了。
网上找了一圈没有合适的答案,所以还是通过nginx的配置文件重定向到HTTPS。

3. tyecho

国产系统,使用率也在逐渐上升,虽然更新慢但好歹按作者的意思,没烂尾。它也有个相对简便的方法,就是修改配置文件config.inc.php,在其中添加:

/** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

4. MediaWiki

修改配置文件LocalSettings.php,找到$wgServer,修改如下:

## The protocol and server name to use in fully-qualified URLs
$wgServer = "https://你的网站域名";

5. LimeSurvey

LimeSurvey的修改是最方便的,直接通过后台就可以了,具体见下图。

7dc18ff356c509eab4471b40a45c62ea.png

6. BookStack

BookStack其实有两个,一个是国外的BookStackApp,还有一个是国产的BookStack,两者的名字一样但不是一回事。这里指前者。
同样是修改配置文件,名称为.env,找到APP_URL,取消注释,修改如下:

APP_URL=https://你的网站域名

四、最后

至此全站的所有网站均升级成为了HTTPS。

本文同样收录于心站日志下

网站HTTPS之路--安装、配置SSL证书及强制开启HTTPS - 心站日志​tech.mindseed.cn
b6df8d8dfc3a9ad4f63fe838e102cea3.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值