<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>网站自签证书 | 技术站点</title>
    <link>https://flycoolba.cn:443/tags/%E7%BD%91%E7%AB%99%E8%87%AA%E7%AD%BE%E8%AF%81%E4%B9%A6/</link>
      <atom:link href="https://flycoolba.cn:443/tags/%E7%BD%91%E7%AB%99%E8%87%AA%E7%AD%BE%E8%AF%81%E4%B9%A6/index.xml" rel="self" type="application/rss+xml" />
    <description>网站自签证书</description>
    <generator>HugoBlox Kit (https://hugoblox.com)</generator><language>zh-Hans</language><lastBuildDate>Fri, 27 Oct 2023 00:00:00 +0000</lastBuildDate>
    <image>
      <url>https://flycoolba.cn:443/media/icon_hu_6ffd252f98295.png</url>
      <title>网站自签证书</title>
      <link>https://flycoolba.cn:443/tags/%E7%BD%91%E7%AB%99%E8%87%AA%E7%AD%BE%E8%AF%81%E4%B9%A6/</link>
    </image>
    
    <item>
      <title>🎉 网站自动 HTTPS 续期</title>
      <link>https://flycoolba.cn:443/blog/https/index.md/</link>
      <pubDate>Fri, 27 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://flycoolba.cn:443/blog/https/index.md/</guid>
      <description>&lt;h1 id=&#34;网站自动-https-续期&#34;&gt;网站自动 HTTPS 续期&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id=&#34;什么是-lets-encrypt&#34;&gt;什么是 Let&amp;rsquo;s Encrypt&lt;/h2&gt;
&lt;p&gt;我用的是 
 这个免费的解决方案。Let&amp;rsquo;s Encrypt 是一个于 2015 年推出的数字证书认证机构，旨在通过自动化流程消除手动创建和安装证书的复杂过程，为安全网站提供免费的 SSL/TLS 证书。&lt;/p&gt;
&lt;p&gt;这项服务由 
（ISRG &amp;ndash; Internet Security Research Group，一个公益组织）提供。主要赞助商包括 
、
、
 以及 Cisco 等公司（
）。&lt;/p&gt;
&lt;p&gt;2015 年 6 月，Let&amp;rsquo;s Encrypt 得到了一个存储在硬件安全模块中的离线 RSA 根证书。这个由 IdenTrust 证书签发机构交叉签名的根证书被用于签署两个证书：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;用于签发请求的证书&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;保存在本地的备份证书&lt;/strong&gt;——在上一个证书出问题时启用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因为 IdenTrust 的 CA 根证书目前已被预置于主流浏览器中，所以 Let&amp;rsquo;s Encrypt 签发的证书从一开始就能被识别并接受，甚至当用户的浏览器中没有信任 ISRG 的根证书时也可以。&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;em&gt;以上介绍文字来自 Wikipedia 的 
。&lt;/em&gt;&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;hr&gt;
&lt;h2 id=&#34;安装步骤certbot-一键搞定&#34;&gt;安装步骤：Certbot 一键搞定&lt;/h2&gt;
&lt;p&gt;为你的网站安装证书十分简单，只需要使用电子前哨基金会 EFF 的 
，就可以完成。&lt;/p&gt;
&lt;h3 id=&#34;第一步选择你的环境&#34;&gt;第一步：选择你的环境&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;打开 
 网页&lt;/li&gt;
&lt;li&gt;在机器图标下面，选择你用的 &lt;strong&gt;Web 接入软件&lt;/strong&gt; 和 &lt;strong&gt;操作系统&lt;/strong&gt;（比如我选的是 Nginx + Ubuntu 14.04）&lt;/li&gt;
&lt;li&gt;跳转到一个安装教程网页，照着做一遍就好了&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;第二步安装-certbot&#34;&gt;第二步：安装 Certbot&lt;/h3&gt;
&lt;p&gt;以Nginx + Ubuntu：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 更新包列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装必要工具&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install software-properties-common
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 添加 Certbot 的 PPA 源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:certbot/certbot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 再次更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 Certbot 的 Nginx 插件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install python-certbot-nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;第三步运行-certbot&#34;&gt;第三步：运行 Certbot&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo certbot --nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Certbot 会自动检查你的 &lt;code&gt;nginx.conf&lt;/code&gt; 配置，把你所有的虚拟站点都列出来，让你选择需要开启 HTTPS 的站点。输入列表编号（用空格分开），Certbot 就会帮你下载证书并更新 &lt;code&gt;nginx.conf&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;第四步查看-nginx-配置变更&#34;&gt;第四步：查看 Nginx 配置变更&lt;/h3&gt;
&lt;p&gt;打开你的 &lt;code&gt;nginx.conf&lt;/code&gt; 文件，你会发现 &lt;code&gt;server&lt;/code&gt; 配置中被做了如下修改：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SSL 证书配置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ssl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                                       &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ssl_certificate&lt;/span&gt;     &lt;span class=&#34;s&#34;&gt;/etc/letsencrypt/live/coolshell.cn/fullchain.pem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/etc/letsencrypt/live/coolshell.cn/privkey.pem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;/etc/letsencrypt/options-ssl-nginx.conf&lt;/span&gt;;           &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同时，Certbot 还会自动添加 HTTP 到 HTTPS 的 301 跳转：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将非 HTTPS 流量重定向到 HTTPS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$scheme&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;https&amp;#34;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;301&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;https://&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$host$request_uri&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;                                                      &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;进阶开启-http2&#34;&gt;进阶：开启 HTTP/2&lt;/h2&gt;
&lt;p&gt;这里建议配置 &lt;strong&gt;HTTP/2&lt;/strong&gt;，要求 Nginx 版本大于 1.9.5。HTTP/2 具有更快的 HTTPS 传输性能，非常值得开启（
）。&lt;/p&gt;
&lt;p&gt;开启方法很简单，只需要在 &lt;code&gt;listen 443 ssl;&lt;/code&gt; 后面加上 &lt;code&gt;http2&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ssl&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                                  &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ssl_certificate&lt;/span&gt;     &lt;span class=&#34;s&#34;&gt;/etc/letsencrypt/live/coolshell.cn/fullchain.pem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/etc/letsencrypt/live/coolshell.cn/privkey.pem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;/etc/letsencrypt/options-ssl-nginx.conf&lt;/span&gt;;           &lt;span class=&#34;c1&#34;&gt;# managed by Certbot
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后执行 &lt;code&gt;nginx -s reload&lt;/code&gt; 即可生效。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;自动续期crontab-定时任务&#34;&gt;自动续期：Crontab 定时任务&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Let&amp;rsquo;s Encrypt 的证书 90 天就过期了&lt;/strong&gt;，所以你需要设置自动化更新脚本。最容易的莫过于使用 crontab。&lt;/p&gt;
&lt;h3 id=&#34;方案一每月强制更新&#34;&gt;方案一：每月强制更新&lt;/h3&gt;
&lt;p&gt;使用 &lt;code&gt;crontab -e&lt;/code&gt; 加入如下定时作业：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 每月 1 号凌晨 0:00 强制续期证书
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0 0 1 * * /usr/bin/certbot renew --force-renewal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 每月 1 号凌晨 0:05 重启 Nginx 使新证书生效
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5 0 1 * * /usr/sbin/service nginx restart
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;方案二每天检查推荐&#34;&gt;方案二：每天检查（推荐）&lt;/h3&gt;
&lt;p&gt;每天凌晨 1 点检查一次，证书到期前 30 天才会真正续期：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 每天凌晨 1:00 检查并续期
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0 1 * * * certbot renew
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;crontab-语法速查&#34;&gt;Crontab 语法速查&lt;/h3&gt;
&lt;p&gt;Crontab 共六个字段：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;字段&lt;/th&gt;
          &lt;th&gt;含义&lt;/th&gt;
          &lt;th&gt;取值范围&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;第 1 个&lt;/td&gt;
          &lt;td&gt;分钟&lt;/td&gt;
          &lt;td&gt;0 - 59&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;第 2 个&lt;/td&gt;
          &lt;td&gt;小时&lt;/td&gt;
          &lt;td&gt;0 - 23&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;第 3 个&lt;/td&gt;
          &lt;td&gt;日期&lt;/td&gt;
          &lt;td&gt;1 - 31&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;第 4 个&lt;/td&gt;
          &lt;td&gt;月份&lt;/td&gt;
          &lt;td&gt;1 - 12（12 代表 December）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;第 5 个&lt;/td&gt;
          &lt;td&gt;星期&lt;/td&gt;
          &lt;td&gt;0 - 7（7 或 0 代表星期天）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;第 6 个&lt;/td&gt;
          &lt;td&gt;命令&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;/path/to/command&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;💡 &lt;strong&gt;一个思考&lt;/strong&gt;：这么方便的同时，如果是一些恶意的钓鱼网站也让自己的站点变成 HTTPS，这对于一般用户来说就有点难以防范了……&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;hr&gt;
&lt;h2 id=&#34;网站内容适配-https&#34;&gt;网站内容适配 HTTPS&lt;/h2&gt;
&lt;p&gt;在 Nginx 或 Apache 上启用 HTTPS 后还没有结束。因为你的网页中所有使用 &lt;code&gt;http://&lt;/code&gt; 的地方都要改成 &lt;code&gt;https://&lt;/code&gt;，&lt;strong&gt;不然图片、JS、CSS 等非 HTTPS 的链接都会导致浏览器报不安全而被 block 掉&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;
&lt;p&gt;基本上就是这些事。希望大家都来把自己的网站更新成 HTTPS 的。&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
