愿知识带给你我勇气,用那温暖的光,驱散冰冷的黑夜。

MENU

【歪门邪道】升级Debian 11,切换ECC证书

December 23, 2022 • Read: 109 • 瞎折腾

最近网站的SSL证书要到期了。登陆服务器看了一眼,我的服务器还在运行Debian 10,而这个版本在2022年8月就已经EOL(End of Life)了,应该尽快切换到新版本,也就是Debian 11。本文将记述整个过程。

升级Debian 11

好在我这个服务器没有过多的魔改,因为运行网站主要是稳定,不要一天到晚搞那些个花里胡哨的。花里胡哨的东西全都放到别的服务器上了。所以理论上来讲,升级的过程应该不会太痛苦。

前期准备

首先当然是升级到Debian 10的最新版,目前是10.13,看起来应该是一个内核更新,从4.19.0-18升级到了4.19.0-22。因为内核变动了,所以需要重启,重启之后没什么问题,关闭VPS,登录后台打一个快照。

这一步非常重要啊,千万不要觉得服务器上没什么数据,直接yolo,这样不好。退一万步说,打快照又不要钱,何乐而不为呢。

打完快照之后就可以开始升级了。升级过程比较简单:

  1. /etc/apt/sources.list里所有的buster改成bullseye,前者是Debian 10的代号,后者是Debian 11的代号。
  2. /etc/apt/sources.list.d/里的所有文件按照第一步修改,这里需要注意对应的软件源是否有Debian 11的仓库。
  3. 使用apt update更新软件包列表

当然了,你可以去网上找Debian 11的source list,参考那个进行修改。

总之,获取到最新的软件包列表之后,先别急着upgrade,这里需要分两步更新。

更新 1/2

首先要更新系统本身:

apt upgrade --without-new-pkgs

如果升级途中有问你是否要自动重启需要的包,一般来说选Yes就可以了。这一步会升级一些系统的基础库,因此需要重启一些服务来保证这些服务使用了最新的包。这一步不会造成SSH会话中断,但如果因为网络原因出现中断,SSH服务器可能因为会话断开而重启失败。所以这一步可以放在screen里运行。

完成之后就可以进行全面系统更新了。

更新 2/2

接下来就可以执行:

apt full-upgrade

这条命令会更新系统内全部的包。在这一步你可能会被问到是否要保留当前的配置文件。通常我们都会选择保留原有的,因为里面可能包含了一些更改。一般来说这不会引发什么问题,除非有些软件包明确废弃了一些配置项。我这里姑且都选择了保留,如果重启之后服务器挂了,我们还有快照嘛。

运行完成之后,直接重启。

验证更新

重启之后查询内核版本和发行版本:

# uname -r
5.10.0-20-amd64
# lsb_release -a
No LSB modules are available.
Distributor ID:    Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:    11
Codename:    bullseye
#

可以看到内核版本和发行版本都成功升级了。

最后还有一个简单的善后,就是删掉不需要的包:apt --purge autoremove,当然,这里强烈建议自己过一遍被删除的软件列表。删除完成后建议重启一下,看看系统能不能起得来,原来在跑的服务还能不能正常跑。如果一切正常的话,那么升级过程就到此结束了。

我这里很遗憾地,删除了不要的软件包之后,php挂了。启动的时候提示libicuio.so找不到了,apt里也找不到对应的包。不过也好办,直接用lnmp脚本升级一下php,问题解决。

SSL证书

接下来就是更新SSL证书了。我看了看各大网站,首先Google还是在用RSA证书,而NameCheap则已经是ECC证书了,并且国内的网站看起来用RSA的多一些。关于RSA还是ECC,这里就不多赘述了。总的来说,RSA用的位数更多,是基于素数的,一般而言效率比较低;ECC使用椭圆曲线,位数少,同时提供的安全行与RSA接近。当然了,这二者在量子计算机面前好像也都是弱鸡,而PQC(后量子时代密码学,也就是量子计算机也无能为力的密码学)好像刚刚起步,还没什么标准化的东西,我也没得选。但是据说ECC能够让网站更快一点,我也不知道真的假的。但是看起来我的浏览器能够支持ECC证书,那就不多说了,开始干。

首先需要生成CSR文件,也就是证书签名请求文件,里面包含了你的一些信息,包括你的CN和证书公钥,把这个文件发给CA,它就能给你签发一个证书。这里我用的曲线是secp384r1,也就是传说中的P-384曲线。这个曲线有美国的NIST构造,虽然饱受批评(例如参数选择过程不透明,这在后来催生的大名鼎鼎的25519曲线),但毕竟是标准,应该是最广为流传的曲线。它具有384位公钥,能够提供与RSA 7680大致相同的安全行,而我的网站目前使用的是RSA 4096(当你看到这篇文章的时候,他就已经是P384了),看起来好像更安全了,并且更高效了。

总之,先使用如下命令生成一个私钥:

openssl ecparam -genkey -name secp384r1 | openssl ec -out ecc.key

然后生成CSR:

openssl req -new -key ecc.key -out ecc.csr

这里openssl会问你一些信息,比较关键的就是CN,这里要填*.skyblond.info。完成后就得到了CSR文件,把他cat出来,然后去找证书服务商就好了。接下来从申请到安装,服务商应该会有完备的教程。如果没有的话,那我建议你换个服务商。

我使用NameCheap提供的SSL证书,他们的知识库写的非常详细,不仅教你怎么用openssl生成CSR和私钥,同时还告诉你怎么提交这个CSR,收到邮件后怎么用邮件内的附件,以及针对不同的常见软件,应该怎么安装。我这里使用的是Nginx,需要把两个crt合并起来,一个是CA签发给我的证书,另一个是CA自己的证书,需要把这两个文件合起来变成一个链,也就是你得先证明你的CA是可信的,然后才能证明CA前发给你的证书是可信的。

总之过程比较简单,这里就不多赘述了。最后需要reload一下Nginx,让新证书生效,这时候再看网站的证书就变成ECC证书啦。

1.png

-全文完-


知识共享许可协议
【歪门邪道】升级Debian 11,切换ECC证书天空 Blond 采用 知识共享 署名 - 非商业性使用 - 相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 https://www.skyblond.info/about.html 处获得。

Archives QR Code
QR Code for this page
Tipping QR Code