今天去查了一下 TLS 1.3,发现已经完全 Final 了。这么说 TLS 1.3 已经完善的差不多了。

于是,博主带着一种“尝鲜”的想法进行升级,最终成功。

我会在这篇文章中写出大概的升级思路。

阅读前必看

由于博主的服务器是 Apache 的,所以 Nginx 用户不适用第二步(请自行搜索 Nginx TLS 1.3 方法),但第一步(升级 OpenSSL)仍然适用。

虚拟主机的用户就不要尝试了,没法接触到 Console 完全没法升级,还是等对应的服务器升级吧。

另外,据 ff98sha 透露,OpenSSL 1.0.2 今年年底就会停止官方支持。

反正 TLS 1.3 的普及是迟早的事情,急什么呢(#逃)。

[collapse]

警告: 请提前备份好数据。

以下方案在博主的 CentOS 7 VPS 上成功,全程使用 root 用户。

开始之前先来首 BGM…

第一步 升级 OpenSSL

已经发布的 OpenSSL 1.1.1 系列支持 TLS 1.3。然而大部分服务器装的 OpenSSL 预装的都是 OpenSSL 1.0.2,因此必须升级 OpenSSL。

不要想着用 yum 升级 OpenSSL。这最多只能升级到 OpenSSL 1.0.2。因此必须手动编译升级。

先来看下现在装的 OpenSSL 版本:

openssl version
# 输出: OpenSSL 1.0.2k-fips 26 Jan 2017

现在的版本是 1.0.2。我们现在手动给它升级。

先去 OpenSSL Releases 找到 1.1.1 版本,然后 wget 下载下来。比如,我选择的是 OpenSSL 1.1.1a 版本。

下面是全程所用命令。

wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1a.tar.gz  # 下载
tar -zxf OpenSSL_1_1_1a.tar.gz  # tar.gz 解压
# 注意这里下载的是 tar.gz 格式,如果是其他格式请自行寻找解压命令

# 下面是编译安装和配置的命令。
cd openssl-OpenSSL_1_1_1a
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib  # 编译配置
make
make install  # 标准安装命令

# 强制使用新版 OpenSSL
vim /etc/profile.d/openssl.sh  # 创建相关文件
# /etc/profile.d/openssl.sh 文件内容
pathmunge /usr/local/openssl/bin
# 保存退出(:wq),重新登录后生效

# 环境变量相关
# 如果收到下面错误就需要将 OpenSSL 库文件夹添加到环境变量。
# ./openssl: error while loading shared libraries: libssl.so.1.1: cannot open
#     shared object file: No such file or directory
vim /etc/ld.so.conf  # 打开环境变量文件
# 添加下面这行到上面打开的文件中
/usr/local/openssl/lib
# 保存退出(:wq)
ldconfig -v  # 刷新环境变量

完成配置后,再来看下 OpenSSL 版本。

openssl version
# 输出: OpenSSL 1.1.1a  20 Nov 2018

这一步完美完成。

第二步 升级 Apache

提醒: 这步只适用于 Apache 用户。Nginx 用户请自寻他法。

从 Apache 2.4.36 开始,Apache 就能用 TLS 1.3 了。

然而博主的 Apache 是 2.4.33 版本的。所以就算是装了 OpenSSL 1.1.1 也没法使用 TLS 1.3。

所以,接下来更新 Apache。

本来想翻下 LNMP 安装脚本有没有升级 Apache 的选项,结果大跌眼镜。(好吧这个脚本主要针对 Nginx 服务端的)

看来只能手动编译更新了。

首先到这里找到最新的 Apache 版本(不要担心肯定是比 2.4.36 还高的版本)。

接下来就上命令了:

service httpd stop  # 记得先关闭 Apache 再升级,以防出错
# 命令中使用的是文章编写时的最新版本 2.4.38,真实升级时也使用这个版本。
wget https://www-us.apache.org/dist/httpd/httpd-2.4.38.tar.gz
tar -zxf httpd-2.4.38.tar.gz  # 解压(tar.gz 格式)
cd httpd-2.4.38
cp /usr/local/apache/build/config.nice config.nice  # 平滑升级: 使用旧版本 Apache 编译参数
# 在开始编译之前可能需要补齐 apr 和 apr-util 库。否则 config 的时候会收到下面错误:
# configure: error: Bundled APR requested but not found at ./srclib/. Download and
#     unpack the corresponding apr and apr-util packages to ./srclib/.
# 有关内容我会再摸一篇文章介绍。这里照做即可
wget https://www-us.apache.org/dist/apr/apr-1.6.5.tar.gz
wget https://www-us.apache.org/dist/apr/apr-util-1.6.1.tar.gz
tar -zxf apr-1.6.5.tar.gz
tar -zxf apr-util-1.6.1.tar.gz
mv apr-1.6.5 srclib/apr
mv apr-util-1.6.1 srclib/apr-util
./config.nice  # 编译配置
make
make install  # 万能编译安装命令
service httpd start  # 开启 Apache 服务

接下来检查下 Apache 的版本。

/usr/local/apache/bin/httpd -v
# Server version: Apache/2.4.38 (Unix)
# Server built: Feb 12 2019 18:41:24

OK, well done.

然后…

现在,站点应该优先使用 TLS 1.3 了。

完成升级 Apache 后,博主的网站就已经能用 TLS 1.3 了。

证明



[collapse]

然后还有什么…享受 TLS 1.3 带来的更先进的 https 加密啊(#逃)。

后记

  1. 注意这只是思路,注意变通。
  2. 有问题/错误纰漏请在评论里反馈。

发表评论

电子邮件地址不会被公开。 必填项已用*标注