其他

docker环境下wordpress网站安装ssl/tls证书

一、前言


简单介绍下wordpress、ssl的概念

ssl/tls是什么?

安全套接字层 (SSL) 是一种加密安全协议。它最初由 Netscape 于 1995 年开发,旨在确保 Internet 通信中的隐私、身份验证和数据完整性。SSL 是如今使用的现代 TLS 加密的前身。实施 SSL/TLS 的网站的 URL 中带有“HTTPS”,而不是“HTTP”。


SSL/TLS 为何重要? 

最初,Web 上的数据是以明文形式传输的,任何人只要截获消息都可以读取。例如,如果消费者访问了购物网站,下了订单并在网站上输入了他们的信用卡号,那么该信用卡号将不加隐藏地在 Internet 上传播。

创建 SSL 就是为了纠正此问题并保护用户隐私。通过对用户和 Web 服务器之间传输的所有数据进行加密,SSL 可确保截获数据的人只能看到混乱的字符。消费者的信用卡号现在可以确保安全,仅在他们输入卡号的购物网站上可见。

SSL 还可以阻止某些类型的网络攻击:它对 Web 服务器进行身份验证,这非常重要,因为攻击者通常会尝试建立伪造网站来欺骗用户并窃取数据。它还可以防止攻击者篡改传输中的数据,就像药品容器上的防篡改封条一样。

SSL 和 TLS 是同一回事吗?

SSL 是另一个称为 TLS(传输层安全性)的协议的直接前身。在 1999 年,互联网工程任务组(IETF)提出了对 SSL 的更新。由于此更新是由 IETF 开发的,不再牵涉到 Netscape,因此名称更改为 TLS。SSL 的最终版本(3.0)与 TLS 的第一版本之间并无明显差异,应用名称更改只是表示所有权改变。

由于它们紧密地联系在一起,这两个术语经常互换使用并混为一谈。有些人仍然使用 SSL 来指代 TLS,其他人则使用术语“SSL/TLS 加密”,因为 SSL 仍然具有很大的知名度。

SSL 仍然没有落伍吗?

SSL 自 1996 年推出 SSL 3.0 以来未曾更新过,现已弃用。SSL 协议中存在多个已知漏洞,安全专家建议停止使用。实际上,大多数现代 Web 浏览器已彻底不再支持 SSL。

TLS 是依然在网络上实施的最新加密协议,尽管有许多人仍将其称为“SSL 加密”。这可能会使购买安全解决方案的消费者感到困惑。事实上,如今提供“SSL”的任何供应商提供的几乎肯定都是 TLS 保护,这已成为二十多年来的行业标准。但是,由于许多人仍在搜寻“SSL 保护”,因此这个术语在许多产品页面上仍然处于醒目位置。

什么是 SSL 证书?

SSL 只能由具有 SSL 证书(技术上称为“TLS 证书”)的网站来实现。SSL 证书就像身份证或徽章一样,证明某人就是他们所说的真实身份。SSL 证书由网站或应用程序的服务器存储并显示在 Web 上。

SSL 证书中最重要的信息之一是网站的公共密钥。公钥使得加密和身份验证成为可能。用户的设备查看公钥,并使用它与 Web 服务器建立安全的加密密钥。同时,Web 服务器还具有一个保密的私有密钥。私钥解密使用公钥加密的数据。

证书颁发机构(CA)负责颁发SSL证书。

可以参考下面的文章,申请证书。

https://92it.top/?p=12130

docker的wordpress怎么下载?

进入docker的公开镜像库:Docker Hub

拉取wordpress镜像

docker pull wordpress:latest

运行wordpress容器,需要开放 80 和 443 端口

# 举个例子
docker run --name wordpress \
-p 80:80 \
-p 443:443 \
--link mysql:mysql \
-v /home/blog/wordpress:/var/www/html \
-tid wordpress:latest
 
# 网络模式使用 bridge的需要映射 80 和 433 端口
# 网络模式使用 host 的就不用配置

注意服务器是否开放80/443端口。

没有https,显示不安全

二、正文


本文使用的是docker的官方wordpress:last镜像,镜像使用的是apache2,所以我们按照apache配置SSL证书的方法配置即可。

配置步骤

1、加载Apache SSL模块

进入wordpress容器,加载apache的ssl模块。

在wordpress容器中输入a2enmod ssl

docker exec -it wordpress bash //进入容器
a2enmod ssl
因为我已经按照过ssl模块,这里显示已存在。

第一次会加载,并且提示重启Apache,我们直接从重启容器即可,也可以直接重启Apache

# 输入命令
/etc/init.d/apache2 reload

2、编辑容器中的ssl文件绑定SSL证书修改证书和私钥路径

Apache 加载 SSL 模块后,会在 /etc/apache2/sites-available 下生成 default-ssl.conf 文件,编辑该文件,可以看到

SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

上述两行配置就是证书的存放位置,我们只需要把第三方可信CA签发的证书相应的文件上传至对应位置即可。

先把ssl-cert-snakeoil.pem 和 ssl-cert-snakeoil.key 上传到宿主机。然后直接用docker cp将文件复制进wordpress容器中

docker cp 宿主机文件路径/ssl-cert-snakeoil.pem 容器名:/etc/ssl/certs
docker cp 宿主机文件路径/ssl-cert-snakeoil.key 容器名:/etc/ssl/private

把生成的证书文件 fullchain.pem 和 privkey.pem 重命名成 ssl-cert-snakeoil.pem ssl-cert-snakeoil.key

docker cp /etc/letsencrypt/live/ssl-cert-snakeoil.pem e98b4ec7e1a5:/etc/ssl/certs
docker cp /etc/letsencrypt/live/ssl-cert-snakeoil.key e98b4ec7e1a5:/etc/ssl/private

这里用腾讯云申请的免费证书举个例子

vim /etc/apache2/sites-available/default-ssl.conf

找到SSLCertificateFile和SSLCertificateKeyFile这两个配置项,改成把私钥和证书(ssl证书我是在腾讯云申请的一年免费域名证书)挂载进容器里面后的路径,这里都在/ssl/目录下。修改后为:

3、链接配置文件

从 apache 的配置文件 apache2.conf 可以看到,apache 只会读取 /etc/apache2/sites-enabled 目录的配置文件,所以需要把 /etc/apache2/sites-available 下的 default-ssl.conf 文件链接到 /etc/apache2/sites-enabled 目录下。

ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf


4、配置http请求强制跳转到https

编辑 /etc/apache2/sites-available/000-default.conf

在 <VirtualHost *:80> </VirtualHost> 标签中增加下面的配置

<Directory "/var/www/html"> 
    RewriteEngine   on
    RewriteBase /
    # FORCE HTTPS
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</Directory>

5、修改完成后重启容器 

docker restart wordpress

6、配置wordpress访问地址

一定要保证 https 和 http 两种方式都能正常访问网站,才能改这个配置,否则可能导致网站无法访问。

进入wordpress后台中,【设置】-【常规】中配置WordPress 地址(URL)站点地址(URL)两个地址的 http协议 修改为 https协议 并保存。

或者直接在wordpress数据库的wp-options表改

最后,查看是否已更换成https协议访问。

补充:推荐个插件 Really Simple SSL


此插件可以帮助我们查看SSL状态,画面混合内容修复(因为有的图片链接是http,会导致网页部分不安全),301重定向等等

还可以查看证书状态,比如过期时间等等。

转载:https://blog.csdn.net/ET1131429439/article/details/126627144