5个版本 (稳定)

1.2.1 2024年5月30日
1.1.0 2024年2月18日
1.0.3 2024年2月18日
0.1.0 2024年2月18日

#234密码学

Download history 106/week @ 2024-04-25 1/week @ 2024-05-23 236/week @ 2024-05-30 12/week @ 2024-06-06 4/week @ 2024-06-13 22/week @ 2024-07-04 5/week @ 2024-07-11

每月246次下载

GPL-3.0 许可证

43KB
406

Rust WKD服务器

什么是WKD?

https://wiki.gnupg.org/WKD

运行此项目

将您的公钥放入 ./openpgp/keys。文件应使用您注册该密钥的电子邮件地址命名。以下是一些示例

  • 有效名称
    • 用户@示例.com
    • user@example.com.asc (可选的 .asc 文件扩展名将被忽略)
  • 无效名称
    • ktujkt7nrz91b17es7prizffedzxrsna (wkd散列 -- 此工具将散列用户名)
    • 我的-公共-密钥.asc

可选地,将您的策略放入 ./openpgp 中的文本文件。

cargo build --release
./target/release/wkd-server ./openpgp/keys

用法

Usage: wkd-server [OPTIONS] <KEYS_PATH>

Arguments:
  <KEYS_PATH>  The path where the GPG keys are stored

Options:
      --address <ADDRESS>  [env: ADDRESS=] [default: 0.0.0.0]
      --port <PORT>        [env: PORT=] [default: 8080]
  -p, --policy <POLICY>    The path to the policy file. If not set, an empty policy is served [env: POLICY=]
  -h, --help               Print help

安全

此服务器将拒绝提供私有或无效的密钥。如果文件包含一个私有密钥和一个公钥,则只提供公钥。不过,请确保只包括您的公钥。

部署

您可以将此 docker-compose.yaml 示例文件作为您部署的起点。请确保将您的公钥作为卷添加。

services:
  wkd-server:
    image: ghcr.io/martin-fink/rust-wkd-server:latest
    volumes:
      - ./keys:/openpgp-keys:ro
    ports:
      - 127.0.0.1:8080:8080
    environment:
      - RUST_LOG=error,wkd_server=info # change this to trace for debugging
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.rust-wkd-server.rule=(Host(`<your-domain>`) && PathPrefix(`/.well-known/openpgpkey`))"
      - "traefik.http.routers.rust-wkd-server.entrypoints=<your-https-entrypoint>"
      - "traefik.http.routers.rust-wkd-server.tls=true"
      - "traefik.http.routers.rust-wkd-server.tls.certResolver=<your-certResolver>"
      - "traefik.services.rust-wkd-server.loadbalancer.passHostHeader=true"

反向代理设置

您可能希望将其放在像nginx这样的反向代理后面,以便它能够处理https。您可以使用以下nginx片段。重要的是要设置 X-Forwarded-Host 标头,因为这个标头用于区分域名。

location ^~ /.well-known/openpgpkey {
    resolver 127.0.0.11 valid=5s;
    set $upstream_endpoint http://address:port;
    proxy_pass $upstream_endpoint;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-Host $host;
}

依赖项

~30–44MB
~640K SLoC