每次进入网站, 都能看到"不安全"二字, 于是下定决心, 搞个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 OK, 则一切正确, 接下来使用sudo 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, 大功告成!

此作者没有提供个人介绍。
最后更新于 2025-09-17