一、前言
简单介绍下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证书。
可以参考下面的文章,申请证书。
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端口。
二、正文
本文使用的是docker的官方wordpress:last镜像,镜像使用的是apache2,所以我们按照apache配置SSL证书的方法配置即可。
配置步骤
1、加载Apache SSL模块
进入wordpress容器,加载apache的ssl模块。
在wordpress容器中输入a2enmod ssl
docker exec -it wordpress bash //进入容器 a2enmod 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