每次进入网站, 都能看到"不安全"二字, 于是下定决心, 搞个ssl证书.
我使用ssl作为证书管理平台, 这个平台可以很方便的自动化部署证书. 因为我们现在能便捷使用的免费ssl证书来自Let's Encrypt, 他的证书一次签发只有90天, 所以说自动化部署是必要的.
ALLinSSL安装
这是它的文档: 快速上手 | 开源免费的 SSL证书申请/部署/续签自动化管理平台
如果你不想打开, 也可以看我的:
首先, 安装ALLinSSL:
curl -sSO http://download.allinssl.com/install_allinssl.sh && bash install_allinssl.sh allinssl
接下来, 根据终端给予的网址, 用户名, 和密码进入后台.
下一步, 点击"授权API管理", 加入你的dns提供商的api.各大dns提供商获取方式在官方文档中也有:授权 API 管理 (API Key Management) | 开源免费的 SSL证书申请/部署/续签自动化管理平台.
如果设置成功, 应该是这样的:

点击"测试", 成功即可.
下一步, 我们点击"自动化部署", "添加自动化部署", 快速部署模板. 将"开始"改为自动执行, 申请证书模块根据自己需要配置, 若你需要将子域名也加入https访问, 需要加入*.yourhost.cn. 例如, 以下是我的配置:

接下来的部署方式呢, 因为我用的腾讯云ecs, ALLinSSL并无快捷设置, 于是选择本地部署. 如下:

这里的证书文件路径和私钥文件路径你可以自行更改(要存在, 建议mkdir一下再进行这部操作).
然后, 保存(提醒不需要可以直接删除), 返回"自动化部署", 手动执行一次, 看执行历史, 若成功, 就无需再管ALLinSSL了.
Apache2设置
首先, 启用apache的ssl模块:
sudo a2enmod ssl proxy proxy_http rewrite headers
sudo systemctl restart apache2
接下来, 在/etc/apache2/sites-available/中新建文件(.conf)作为网站(建议一个子域名用一个文件). 以cockpit为例, 按照以下设置配置:
<VirtualHost *:80>
# 设置主机名
ServerName cockpit.endermite.cn
# 如果你也希望根域名 endermite.cn 也重定向,可以添加 ServerAlias
#ServerAlias endermite.cn
# 核心配置:将所有请求永久重定向到 HTTPS 版本
Redirect permanent / https://cockpit.endermite.cn/
# 可选:记录日志,便于排查问题
ErrorLog ${APACHE_LOG_DIR}/www_redirect_error.log
CustomLog ${APACHE_LOG_DIR}/www_redirect_access.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName cockpit.endermite.cn
# SSL 配置 - 使用你的泛域名证书
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/endermite.cn.crt
SSLCertificateKeyFile /etc/apache2/ssl/endermite.cn.key
# 如果有证书链文件,请取消注释并修改路径
# SSLCertificateChainFile /etc/apache2/ssl/endermite.cn.chain.crt
# 重要:启用 RewriteEngine 以支持 WebSocket 协议升级
RewriteEngine On
# 匹配 WebSocket 连接请求并代理到 Cockpit
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:9090/$1 [P,L]
# 配置常规的 HTTP 反向代理
ProxyPreserveHost On
ProxyPass / http://localhost:9090/
ProxyPassReverse / http://localhost:9090/
# 可选:设置日志文件
ErrorLog ${APACHE_LOG_DIR}/cockpit_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/cockpit_ssl_access.log combined
# 强化 SSL 设置 (推荐)
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
</VirtualHost>
注意, 其中的socket部分一般不需要, 只有特殊服务(如cockpit)需要.
如果你是配置apache的80端口(博客, 网站等), 可以在443的虚拟主机内加上这段:
DocumentRoot /var/www/html
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
启用网站并看到结果
配置文件写完后, 将其enable:
sudo a2ensite cockpit.endermite.cn.conf
注: 若默认配置有影响, 可以将其禁用:
sudo a2dissite 000-default.conf
全部enable后, 可以测试一下语法
sudo apache2ctl configtest
若输出, 则一切正确, 接下来使用Syntax OKsudo systemctl reload apache2重新加载apache2.
现在打开你的网站, 如果是这样, 那就恭喜你, 开启你的https之旅吧!

cockpit更改origin
如果你使用cockpit, 很可能发现进不去了. 那是因为你更改了你的登陆网址, cockpit默认是不准的.
使用sudo vim /etc/cockpit/cockpit.conf编辑配置(如果没有, 就新建)
改成以下代码:
#!python
[WebService]
Origins = https://your.domain http://127.0.0.1:9090
ProtocolHeader = X-Forwarded-Proto
AllowUnencrypted = true
重新进入cockpit, 大功告成!

Comments 1 条评论
timeZoneTest