Vaultwarden Wiki 中文版
⮐ Vaultwarden Wiki个人主页联系我
  • 关于
  • 首页
  • FAQ
    • 1.FAQ
    • 2.审计
    • 故障排除
      • 1.Bitwarden Android 故障排除
  • 容器镜像的使用
    • 1.容器镜像的选择
    • 2.启动容器
    • 3.更新 Vaultwarden 镜像
    • 4.使用 Docker Compose
    • 5.使用 Podman
  • 部署
    • 1.构建您自己的镜像
    • 2.构建二进制
    • 3.预构建二进制
    • 4.第三方包
    • 5.部署示例
    • 6.代理示例
    • 7.转储示例
    • HTTPS
      • 1.启用 HTTPS
      • 2.使用 Let's Encrypt 证书运行私有 Vaultwarden 实例
  • 配置
    • 1.配置概述
    • 2.禁用新用户注册
    • 3.禁用邀请
    • 4.启用管理页面
    • 5.禁用管理令牌
    • 6.启用 WebSocket 通知
    • 7.启用移动客户端推送通知
    • 8.启用 U2F 和 FIDO2 WebAuthn 身份验证
    • 9.启用 YubiKey OTP 身份验证
    • 10.更改持久性数据位置
    • 11.更改 API 请求大小限制
    • 12.更改 worker 数量
    • 13.SMTP 配置
    • 14.显示密码提示
    • 15.禁用或覆盖密码库接口托管
    • 16.日志记录
    • 17.设置为 systemd 服务
    • 18.从 LDAP 同步用户
    • 19.使用备用基本目录(子目录/子路径)
    • 20.其他配置
    • *使用 systemd docker 运行
    • 数据库
      • 1.使用 MariaDB (MySQL) 后端
      • 2.使用 PostgreSQL 后端
      • 3.在未启用 WAL 的情况下运行
      • 4.从 MariaDB (MySQL) 迁移到 SQLite
    • 安全
      • 1.强化指南
      • 2.Fail2ban 设置
      • 3.Docker Traefik ModSecurity 设置
    • 其他
      • 1.翻译电子邮件模板
      • 2.翻译管理页面
      • 3.自定义 Vaultwarden CSS
  • 备份
    • 1.通用(非 docker)
  • 其他
    • 1.从 Keepass 或 KeepassX 导入数据
    • 2.备份您的密码库
    • 3.与上游 API 实现的区别
    • 4.支持上游的发展
    • 5.使用 Cloudflare DNS 的 Caddy 2.x
    • 6.Git hooks
    • *使用非 root 用户运行 docker 容器
    • *使私有 CA 和自签名证书兼容 Chrome
    • *测试 SSO
由 GitBook 提供支持
在本页
  • 启用 HTTPS
  • 通过反向代理
  • 通过 Rocket
  • 检查证书是否有效
  • 检查 OSCP 有效性
  • 获取 SSL/TLS 证书
  • 通过 Let's Encrypt
  • 通过 Cloudflare
  1. 部署
  2. HTTPS

1.启用 HTTPS

上一页HTTPS下一页2.使用 Let's Encrypt 证书运行私有 Vaultwarden 实例

最后更新于1个月前

对应的

如今,要正常运行 Vaultwarden,几乎必须启用 ,这是因为 Bitwarden 网络密码库使用的 ,大多数浏览器只有在 HTTPS 环境下才能使用。

启用 HTTPS 的几种方式:

  • (推荐)把 Vaultwarden 放在一个后面,代替 Vaultwarden 处理 HTTPS 连接。

  • (不推荐)启用 Vaultwarden 内置的 HTTPS 功能(通过 网络框架)。Rocket 的 HTTPS 实现相对不成熟且功能有限。

有关这些选项的更多细节,请参阅 部分。

要使 HTTPS 服务器工作,它还需要 SSL/TLS 证书,因此您需要决定如何获取该证书。同样,有几种方式:

  • (推荐)使用 获取 证书。一些反向代理(例如 )也内置支持使用 ACME 协议获取证书。

  • (推荐)如果您信任 来代理您的流量,您可以让他们处理您的 SSL/TLS 证书的发放。请注意,上游的 Bitwarden 网络密码库 () 运行在 Cloudflare 后面。

  • (不推荐),并发行您自己的(自签名)证书。这样做存在各种隐患和不便,所以请自行考虑是否使用此选项。

有关这些选项的更多细节,请参考部分。要使移动应用程序能正常运行,必须设置正确的 设置。

启用 HTTPS

通过反向代理

有很多常用的反向代理,在中可以找到一些配置的示例。如果您不熟悉反向代理并且没有特别偏好,请首先考虑使用 ,因为它内置了对获取 Let's Encrypt 证书的支持。 文章中有一个使用 Caddy 的很好的例子。

通过 Rocket

不建议使用此方式。

要对 vaultwarden 本身启用 HTTPS,请设置如下格式的 ROCKET_TLS 环境变量:

ROCKET_TLS={certs="/path/to/certs.pem",key="/path/to/key.pem"}

位置:

  • certs:PEM 格式的 SSL/TLS 证书链的路径。

  • key:PEM 格式的 SSL/TLS 证书对应的私钥文件的路径。

说明:

  • ROCKET_TLS 行中使用的文件扩展名不一定非要像示例中那样是 .PEM。某些地方可能会使用其他扩展名,例如,.crt 作为证书,.key 作为私钥。这些文件的格式必须是 PEM,即 base64 编码。PEM 是 openssl 的默认格式,因此您可以将 .cert、.cer、.crt 和 .key 文件重命名为 .pem 以作为 ROCKET_TLS 行中的文件扩展名,或者使用 .crt 或 .key 作为 ROCKET_TLS 行中的文件扩展名。

  • 使用 RSA 证书/密钥。Rocket 目前无法处理 ECC 证书/密钥,会输出类似下面的误导性错误消息:

    [ERROR] environment variable ROCKET_TLS={certs="/ssl/ecdsa.crt",key="/ssl/ecdsa.key"} could not be parsed

    (环境变量本身的格式没有错误;只是因为 Rocket 无法解析证书/密钥的内容。)

  • 如果在 Docker 下运行,请记住,Vaultwarden 在容器内部运行时将解析 ROCKET_TLS 值 ,所以请确保 certs 和 key 路径是容器内部呈现的样子(可能与 Docker 主机系统上的路径不同)。

docker run -d --name vaultwarden \
  -e ROCKET_TLS='{certs="/ssl/certs.pem",key="/ssl/key.pem"}' \
  -v /ssl/keys/:/ssl/ \
  -v /vw-data/:/data/ \
  -p 443:80 \
  vaultwarden/server:latest

您需要挂载 ssl 文件夹(使用 -v 参数),同时需要转发合适的端口(使用 -p 参数),通常是用于 HTTPS 连接的 443 端口。如果您选择的端口号不是 443,比如是 3456,请记住在连接到服务时需要明确提供该端口号,例如:https://vaultwarden.local:3456。

用于获取证书的软件通常使用符号链接。如果是这样的话,需要确保这两个位置能被 docker 容器访问到。

这些文件链接到 ../../archive/mydomain/privkey.pem。

因此,从 Vaultwarden 容器中使用,应像这样:

docker run -d --name vaultwarden \
  -e ROCKET_TLS='{certs="/ssl/live/mydomain/fullchain.pem",key="/ssl/live/mydomain/privkey.pem"}' \
  -v /etc/letsencrypt/:/ssl/ \
  -v /vw-data/:/data/ \
  -p 443:80 \
  vaultwarden/server:latest

检查证书是否有效

执行以下操作以验证证书是否随链安装(注意将 vault.domain.com 更改为您自己的域名):

openssl s_client -showcerts -connect vault.domain.com:443 -servername vault.domain.com

# 或者不同的端口,比如 7070
openssl s_client -showcerts -connect vault.domain.com:7070 -servername vault.domain.com

输出的开头应类似于以下内容(使用 Let's Encrypt 证书):

CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = vault.domain.com
verify return:1

有 3 个不同深度(请注意,它是从 0 开始的)级别的验证。在接下来的输出中,您应该看到来自 Let's Encryptbase 的使用 base64 编码的证书信息。

检查 OSCP 有效性

[译者注]:OCSP:Online Certificate Status Protocol,在线证书状态协议。OCSP 是一个用于获取 X.509 数字证书撤销状态的网络协议,用于检验证书合法性。OCSP 查询需要建立一次完整的 HTTP 查询请求,期间的 DNS 查询、建立 TCP 连接、服务端响应和数据传输都是额外开销,使得建立 TLS 连接花费更多时长。后来出现了OCSP Stapling ,将原本需要客户端发起的 OCSP 请求转嫁给服务端,并随证书一起发送给客户端,因此能提高 TLS 握手效率。

OCSP Stapling 一般翻译为 OCSP 装订或 OCSP 封套。

如果 OCSP Stapling 无法正常工作,则连接移动应用程序将失败,并显示 Chain validation failed 消息。

您还可以使用如下命令行检查 OCSP 的状态:

openssl s_client -showcerts -connect vault.domain.com:443 -servername vault.domain.com -status

在其输出中必须包含:

OCSP Response Status: successful (0x0)

获取 SSL/TLS 证书

通过 Let's Encrypt

通过 Cloudflare

注册您的域名并为您的 Vaultwarden 实例添加了 DNS 记录后,登录 Cloudflare 仪表板并选择 SSL/TLS,然后选择 Origin Server。生成一个原始证书(您可以选择最长 15 年的有效期),并配置 Vaultwarden 来使用它。如果您选择了 15 年有效期,那么在可预见的未来,无需续签此原始证书。

请注意,原始证书仅用于确保 Cloudflare 和 Vaultwarden 之间的通信。Cloudflare 将自动处理用于客户端和 Cloudflare 之间通信的证书的发放和更新。

另外,如果您使用的是 Vaultwarden 内置的 Rocket HTTPS 服务器,请确保选择 RSA 作为原始证书的私钥类型,因为 Rocket 目前不支持 ECC/ECDSA 证书。

有关如何在本地系统上设置和使用私有 CA 的更多信息,请参阅。如果遵循该指南,您的 ROCKET_TLS 行看起来应该像这样:-e ROCKET_TLS='{certs="/ssl/vaultwarden.crt",key="/ssl/vaultwarden.key"}' \

确保您的证书文件包含了完整的信任链。对于 certbot,这意味着应使用 fullchain.pem 而不是 cert.pem。完整的信任链应该包含两个证书:叶证书(与 cert.pem 中的内容相同),后面跟随 R3 或 E1 。例如,Android 默认不在其系统信任存储中包含任何 Let's Encrypt 中间证书,所以如果您不提供完整的证书链,Android 客户端很可能无法连接。

例如: 会在 /etc/letsencrypt/live/mydomain/ 下创建一个包含所需要的 fullchain.pem 和 privkey.pem 文件的文件夹。

当您的 Vaultwarden 服务器对外界可用时,您可以使用 , 或 来检查您的 SSL 证书(包括证书链)是否有效。缺少证书链,Android 设备将连接失败。

您可以使用 检查,但它不支持自定义端口。另外,请记住选中「Do not show the results on the boards」复选框,否则您的系统将在「Recently Seen」列表中可见。

如果您运行的是没有与公共 Internet 连接的本地服务器,则可以使用 openssl 命令 或 来验证证书的有效性。

正确设置 OCSP Stapling 后, 的吊销检查部分将包含「OCSP Staple: Good」。您的网络服务器必须能够连接到证书的 X509v3 扩展中的「Authority Information Access」URL,才能使 OCSP Stapling 正常工作。

免费发放 SSL/TLS 证书。

为了使之工作,您的 Vaultwarden 实例必须拥有一个 DNS 名称(即您不能简单地使用 IP 地址)。如果您的 Vaultwarden 可以在公共互联网上访问,那么设置 Let's Encrypt 就比较容易,但即使您的实例是私有的(即只能在您的局域网内访问),也可以通过 获取 Let's Encrypt 证书。

如果您已经拥有或控制了一个域名,那么只需为您的 Vaultwarden 实例的 IP 地址添加一个 DNS 名称即可。如果您没有,可以购买一个域名,尝试在 免费获得一个,或者使用像 这样的服务来获取一个现有域名下的名称(例如,my-bitwarden.duckdns.org)。

拥有了实例的 DNS 名称后,您就可以使用 为你的 DNS 名称获取证书。 和 是两个最流行的独立客户端。一些反向代理(例如 )也内置了 ACME 客户端。

为个人提供免费服务。如果您信任他们代理你的流量,并作为您的 DNS 提供商,您也可以让他们处理您的 SSL/TLS 证书的发放。

此页面
中间证书
certbot
Comodo SSL Checker
Qualys' SSL Labs
Digicert SSL Certficate Checker
Qualys' SSL Labs
testssl.sh
SSLScan
Digicert SSL Checker
Let's Encrypt
DNS 挑战
Freenom
Duck DNS
ACME 客户端
Certbot
acme.sh
Caddy
Cloudflare
官方页面地址
HTTPS
Web Crypto API
反向代理
Rocket
ACME 客户端
Let's Encrypt
Caddy
Cloudflare
https://vault.bitwarden.com/
建立一个私人 CA
OCSP 装订
代理示例
Caddy
使用 Docker Compose
启用 HTTPS
获取 SSL/TLS 证书