偶然发现的http转https

本文详细介绍了如何使用Let’sEncrypt为网站部署HTTPS,并提供了Nginx+Ubuntu的实战步骤。文中还讨论了HTTPS证书的自动续期及网站内部链接的修改方法。

有时间亲测一下        这里做一下记录

来源链接  https://coolshell.cn/articles/18094.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

今天,我把CoolShell变成https的安全访问了。我承认这件事有点晚了,因为之前的HTTP的问题也有网友告诉我,被国内的电信运营商在访问我的网站时加入了一些弹窗广告。另外,HTTP的网站在搜索引擎中的rank会更低。所以,这事早就应该干了。现在用HTTP访问CoolShell会被得到一个 301 的HTTPS的跳转。下面我分享一下启用HTTPS的过程。

我用的是 Let’s Encrypt这个免费的解决方案。Let’s Encrypt 是一个于2015年推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS证书。这是由互联网安全研究小组(ISRG – Internet Security Research Group,一个公益组织)提供的服务。主要赞助商包括电子前哨基金会Mozilla基金会Akamai以及Cisco等公司(赞助商列表)。

2015年6月,Let’s Encrypt得到了一个存储在硬件安全模块中的离线的RSA根证书。这个由IdenTrust证书签发机构交叉签名的根证书被用于签署两个证书。其中一个就是用于签发请求的证书,另一个则是保存在本地的证书,这个证书用于在上一个证书出问题时作备份证书之用。因为IdenTrust的CA根证书目前已被预置于主流浏览器中,所以Let’s Encrypt签发的证书可以从项目开始就被识别并接受,甚至当用户的浏览器中没有信任ISRG的根证书时也可以。

以上介绍文字来自 Wikipedia 的 Let’s Encrypt 词条

为你的网站来安装一个证书十分简单,只需要使用电子子前哨基金会EFF的 Certbot,就可以完成。

1)首先,打开 https://certbot.eff.org 网页。

2)在那个机器上图标下面,你需要选择一下你用的 Web 接入软件 和你的 操作系统。比如,我选的,nginx 和 Ubuntu 14.04

3)然后就会跳转到一个安装教程网页。你就照着做一遍就好了。

以Coolshell.cn为例 – Nginx + Ubuntu

首先先安装相应的环境:

1
2
3
4
5
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot /certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx

然后,运行如下命令:

1
$ sudo certbot --nginx

certbot 会自动检查到你的 nginx.conf 下的配置,把你所有的虚拟站点都列出来,然后让你选择需要开启 https 的站点。你就简单的输入列表编号(用空格分开),然后,certbot 就帮你下载证书并更新 nginx.conf 了。

你打开你的 nginx.conf 文件 ,你可以发现你的文件中的 server 配置中可能被做了如下的修改:

1
2
3
4
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/coolshell .cn /fullchain .pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/coolshell .cn /privkey .pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx .conf; # managed by Certbot

1
2
3
4
# Redirect non-https traffic to https
if ($scheme != "https" ) {
   return 301 https: // $host$request_uri;
} # managed by Certbot

 

这里建议配置 http2,这要求 Nginx 版本要大于 1.9.5。HTTP2 具有更快的 HTTPS 传输性能,非常值得开启(关于性能你可以看一下这篇文章)。需要开启HTTP/2其实很简单,只需要在 nginx.conf 的 listen 443 ssl; 后面加上 http2 就好了。如下所示:

1
2
3
4
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/coolshell .cn /fullchain .pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/coolshell .cn /privkey .pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx .conf; # managed by Certbot

然后,就 nginx -s reload 就好了。

但是,Let’s Encrypt 的证书90天就过期了,所以,你还要设置上自动化的更新脚本,最容易的莫过于使用 crontab 了。使用 crontab -e 命令加入如下的定时作业(每个月都强制更新一下):

1
2
0 0 1 * * /usr/bin/certbot renew --force-renewal
5 0 1 * * /usr/sbin/service nginx restart

当然,你也可以每天凌晨1点检查一下:

1
0 1 * * * certbot renew

注:crontab 中有六个字段,其含义如下:

  • 第1个字段:分钟 (0-59)
  • 第2个字段:小时 (0-23)
  • 第3个字段:日期 (1-31)
  • 第4个字段:月份 (1-12 [12 代表 December])
  • 第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天])
  • /path/to/command – 计划执行的脚本或命令的名称

这么方便的同时,我不禁要问,如果是一些恶意的钓鱼网站也让自己的站点变成https的,这个对于一般用来说就有点难以防范了。哎……

当然,在nginx或apache上启用HTTPS后,还没有结束。因为你可能还需要修改一下你的网站,不然你的网站在浏览时会出现各种问题。

启用HTTPS后,你的网页中的所有的使用 http:// 的方式的地方都要改成 https:// 不然你的图片,js, css等非https的连接都会导致浏览器抱怨不安全而被block掉。所以,你还需要修改你的网页中那些 hard code http:// 的地方。

对于我这个使用wordpress的博客系统来说,有这么几个部分需要做修改。

1)首先是 wordpress的 常规设置中的 “WordPress 地址” 和 “站点地址” 需要变更为 https 的方式。

2)然后是文章内的图片等资源的链接需要变更为 https 的方式。对此,你可以使用一个叫 “Search Regex” 插件来批量更新你历史文章里的图片或别的资源的链接。比如:把 http://coolshell.cn 替换成了 https://coolshell.cn

3)如果你像我一样启用了文章缓存(我用的是WP-SuperCache插件),你还要去设置一下 “CDN” 页面中的 “Site URL” 和 “off-site URL” 确保生成出来的静态网页内是用https做资源链接的。

基本上就是这些事。希望大家都来把自己的网站更新成 https 的。


### 偶发性 bug 的定位与解决方法 偶发性 bug 是软件开发中最难以捉摸的问题之一,它们通常在特定条件下才会触发,且难以复现。为了有效定位和解决这类 bug,开发者需要结合系统性方法、工具支持以及经验积累。 #### 1. 日志记录与离线分析 在系统中加入详尽的日志记录机制,尤其是在关键路径和状态换处。日志应包含时间戳、调用栈、变量状态等信息。对于实时性要求不高的系统,可以通过文件、串口等方式记录程序运行过程中的各个状态和关键变量。如果系统支持离线运行,可以将日志写入存储介质(如 Flash 或 SD 卡),以便后续分析[^5]。 #### 2. 陷阱程序与现场保存 在高实时性要求的系统中,可以定义若干公共数组变量用于记录关键变量和现场数据,并增加条件停止的程序(即陷阱程序)。当系统发生异常时,程序进入陷阱程序并停止运行,开发者可以通过串口或屏幕输出这些变量,分析问题原因[^4]。 #### 3. 使用调试工具 利用调试器(如 GDB、JTAG、AXD 等)设置断点、观察点,进行单步执行和内存检查。对于嵌入式系统,如 ARM 架构中出现的死机或复位问题,可以在启动点设置断点,通过观察寄存器 R13 的值找到堆栈指针,并在内存中反汇编对应的代码段,从而定位出问题的函数和 C 代码位置[^4]。 #### 4. 二分法与最小复现路径 通过二分法逐步缩小问题范围,找出最小的复现路径。这种方法尤其适用于复杂系统中偶发性 bug 的定位,可以显著减少排查时间。 #### 5. 系统性回顾与知识提取 研究表明,调试能力的提升与系统性回顾和知识提取密切相关。开发者应定期对调试过程进行回顾,总结经验教训,并将这些知识整理为可重复使用的调试策略和方法。这种做法可以显著提升调试效率,即使面对相同数量的问题,定期回顾的开发者效率提升速度是不进行回顾者的 3 倍[^2]。 #### 6. 模拟与压力测试 构建可重复的测试环境,通过模拟特定条件和压力测试来尝试复现偶发性 bug。使用自动化测试工具模拟并发、边界条件、资源竞争等场景,有助于在可控环境下触发问题。 #### 7. 静态分析与代码审查 借助静态分析工具(如 Coverity、SonarQube)检查代码中的潜在问题,结合代码审查机制,发现可能引发偶发性 bug 的代码模式,如资源泄漏、竞态条件、未初始化变量等。 --- ### 示例代码:日志记录模块 以下是一个简单的日志记录模块示例,可用于记录程序运行状态: ```python import logging from datetime import datetime # 配置日志格式 logging.basicConfig( filename='app.log', filemode='w', format='%(asctime)s - %(levelname)s - %(message)s', level=logging.DEBUG ) def log_state(state: str, variables: dict): timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S') message = f"[{timestamp}] State: {state}, Variables: {variables}" logging.debug(message) # 示例调用 log_state("Initialization", {"config_loaded": True, "port": 8080}) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值