目的

本文档旨在为使用 ACAL Lynxus 的常见管理员和用户任务提供规范的指导性指令集。它旨在补充 Lynxus 概述、Lynxus 系统管理员指南 和 Lynxus 用户指南。这些文档提供了有关各种功能和配置值的广泛参考信息,但它们不提供有关 如何 完成任务的信息。

本文档 并非 旨在成为所有可能的管理员或用户活动的全面存储库,而是可以直接或适应自定义场景的文档完善的参考活动集合。随着应用程序或生态系统行为的变化,本文档需要持续更新,以及内容对社区不清楚时的纠正和改进。

本文档不提供任何保证。ACAL Lynxus 社区已尽可能评估所有步骤的正确性,但对在执行这些命令的任何计算机系统上的负面影响不承担任何责任。

安装 ACAL Lynxus

ACAL Lynxus 是一个易于使用、强大且可靠的系统,用于处理和分发数据。它支持强大且可扩展的数据路由、转换和系统调解逻辑的有向图。除了 Lynxus 之外,还有 Lynxus 工具包,这是一组命令行工具,帮助执行管理任务,如与远程服务交互、管理集群中的节点以及加密敏感配置值。

描述

下载 ACAL Lynxus 应用程序和工具包的说明

目的

使应用程序可在指定机器上运行(例如本地开发环境)

起点

运行现代操作系统的机器

预期结果

最新版本的 ACAL Lynxus 可在主机上运行,无需配置

预计持续时间

1 分钟 + 下载时间

以下说明用于安装 Lynxus 的单个节点。本指南假设 macOS 10.11.0+,但应适用于任何现代操作系统。默认使用 *nix 命令,但在可用的地方提供 Windows 等效命令。
  1. 前往 ACAL Lynxus 下载 页面。

  2. 通过压缩二进制文件下载最新版本的 Lynxus。例如,如果最新版本是 1.11.4:

    • lynxus-1.11.4-bin.tar.gz [1.2 GB]

    • lynxus-toolkit-1.11.4-bin.tar.gz [42 MB]

  3. 如果您被引导到镜像页面,单击页面上的第一个链接以下载相应的归档文件。

    下载站点
  4. 请注意 lynxus-1.11.4-bin.tar.gz 和 lynxus-toolkit-1.11.4-bin.tar.gz 压缩文件已下载到您的 Downloads 文件夹。

  5. 下载这些文件的 GPG 签名和校验和。它们在初始下载页面上每个二进制文件旁边找到。

    • gpg --verify -v lynxus-1.11.4-bin.tar.gz.asc — 验证发布管理器 (RM) 在二进制文件上提供的 GPG 签名。有关更多详细信息,请参阅 Lynxus GPG 指南:验证发布签名

    • shasum -a 256 lynxus-1.11.4-bin.tar.gz — 计算下载工件的 SHA-256 校验和。这应与 lynxus-1.11.4-bin.tar.gz.sha256 的内容进行比较以确认相等

    • shasum -a 512 lynxus-1.11.4-bin.tar.gz — 计算下载工件的 SHA-512 校验和。这应与 lynxus-1.11.4-bin.tar.gz.sha512 的内容进行比较以确认相等

      验证 GPG 签名和校验和
  6. 从每个 tar.gz 文件中提取文件。这可以通过在 Finder 中双击文件或在终端中运行以下命令来完成。

    • tar -xvzf lynxus-1.11.4-bin.tar.gz — 解压缩 gzip 文件并将 tar 归档内容提取到 lynxus-1.11.4/

    • tar -xvzf lynxus-toolkit-1.11.4-bin.tar.gz — 解压缩 gzip 文件并将 tar 归档内容提取到 lynxus-toolkit-1.11.4/

  7. (可选)将文件夹移动到更合适的位置。

从源代码构建 Lynxus

描述

下载 ACAL Lynxus 源代码并在本地构建应用程序的说明

目的

使应用程序(可能带有代码修改)可在指定机器上运行(例如本地开发环境)

起点

运行现代操作系统的机器

预期结果

最新版本的 ACAL Lynxus 可在主机上运行,无需配置

预计持续时间

10 - 35 分钟 + 下载时间

本指南假设 macOS 10.11.0+,但应适用于任何现代操作系统。默认使用 *nix 命令,但在可用的地方提供 Windows 等效命令。
  1. 前往 ACAL Lynxus 下载 页面。

  2. 通过压缩文件下载最新版本的 Lynxus 源代码。例如,如果最新版本是 1.11.4:

    • lynxus-1.11.4-source-release.zip [53 MB]

  3. 如果您被引导到镜像页面,单击页面上的第一个链接以下载相应的归档文件。

  4. 请注意 lynxus-1.11.4-source-release.zip 压缩文件已下载到您的 Downloads 文件夹。

  5. 下载该文件的 GPG 签名和校验和。它们在初始下载页面上归档文件旁边找到。

    • gpg --verify -v lynxus-1.11.4-source-release.zip.asc — 验证发布管理器 (RM) 在归档文件上提供的 GPG 签名。

    • shasum -a 256 lynxus-1.11.4-source-release.zip — 计算下载工件的 SHA-256 校验和。这应与 lynxus-1.11.4-source-release.zip.sha256 的内容进行比较以确认相等

    • shasum -a 512 lynxus-1.11.4-source-release.zip — 计算下载工件的 SHA-512 校验和。这应与 lynxus-1.11.4-source-release.zip.sha512 的内容进行比较以确认相等

  6. 从 zip 文件中提取文件。这可以通过在 Finder 中双击文件或在终端中运行以下命令来完成。

    • unzip lynxus-1.11.4-source-release.zip — 解压缩 zip 文件并将归档内容提取到 lynxus-1.11.4/

  7. (可选)将文件夹移动到更合适的位置。

    lynxus-1.11.4/ % ls -alGh
    total 328
    drwxr-xr-x  25 alopresto  staff   800B Apr  6 15:48 ./
    drwxr-xr-x   8 alopresto  staff   256B Apr  4 18:01 ../
    drwxr-xr-x   4 alopresto  staff   128B Jan 22 15:10 .github/
    -rw-r--r--   1 alopresto  staff   254B Jan 22 15:10 DEPENDENCIES
    -rw-r--r--   1 alopresto  staff    66K Jan 22 15:10 KEYS
    -rw-r--r--   1 alopresto  staff    21K Jan 22 15:10 LICENSE
    -rw-r--r--   1 alopresto  staff   7.1K Jan 22 15:10 NOTICE
    -rw-r--r--   1 alopresto  staff   9.1K Jan 22 15:10 README.md
    -rw-r--r--   1 alopresto  staff   3.3K Jan 22 15:10 SECURITY.md
    drwxr-xr-x   5 alopresto  staff   160B Apr  6 15:44 lynxus-api/
    drwxr-xr-x   8 alopresto  staff   256B Apr  6 15:50 lynxus-assembly/
    drwxr-xr-x   5 alopresto  staff   160B Apr  6 15:45 lynxus-bootstrap/
    drwxr-xr-x  23 alopresto  staff   736B Apr  6 15:44 lynxus-commons/
    drwxr-xr-x   9 alopresto  staff   288B Apr  6 15:44 lynxus-docker/
    drwxr-xr-x   7 alopresto  staff   224B Apr  6 15:44 lynxus-docs/
    drwxr-xr-x   8 alopresto  staff   256B Apr  6 15:44 lynxus-external/
    drwxr-xr-x   5 alopresto  staff   160B Apr  6 15:44 lynxus-framework-api/
    drwxr-xr-x   6 alopresto  staff   192B Apr  6 15:44 lynxus-maven-archetypes/
    drwxr-xr-x   5 alopresto  staff   160B Apr  6 15:45 lynxus-mock/
    drwxr-xr-x  82 alopresto  staff   2.6K Apr  6 15:44 lynxus-nar-bundles/
    drwxr-xr-x   7 alopresto  staff   224B Apr  6 15:44 lynxus-system-tests/
    drwxr-xr-x  14 alopresto  staff   448B Apr  6 15:44 lynxus-toolkit/
    -rw-r--r--   1 alopresto  staff    44K Jan 22 15:10 pom.xml
  8. 使用 Apache Maven 从源代码根目录(lynxus-1.11.4/)构建 Lynxus 源代码,使用以下命令之一。下面列出了每个命令在现代专业笔记本电脑上的预计构建时间;首次构建时请为依赖库下载留出额外时间。

    • mvn clean install — 构建应用程序(预计时间约 30 分钟)

    • mvn clean install -T2.0C — 使用多个并行线程构建应用程序(预计时间约 15 分钟)

    • mvn clean install -T2.0C -DskipTests — 使用多个并行线程构建应用程序并禁用单元测试(预计时间约 6 分钟)

      lynxus-1.11.4/ % mvn clean install -T2.0C -DskipTests
      ...
      ------------------------------------------------------------------------
      Reactor Summary for lynxus 1.11.4:
      
      lynxus ............................................... SUCCESS [  0.834 s]
      lynxus-api ........................................... SUCCESS [  8.799 s]
      lynxus-framework-api ................................. SUCCESS [ 12.020 s]
      lynxus-commons ....................................... SUCCESS [  0.253 s]
      lynxus-utils ......................................... SUCCESS [ 16.029 s]
      lynxus-properties .................................... SUCCESS [  6.863 s]
      lynxus-security-utils ................................ SUCCESS [ 14.682 s]
      lynxus-nar-bundles ................................... SUCCESS [  0.279 s]
      lynxus-framework-bundle .............................. SUCCESS [  0.358 s]
      lynxus-framework ..................................... SUCCESS [  1.538 s]
      lynxus-properties-loader ............................. SUCCESS [ 14.153 s]
      ...
      lynxus-system-test-suite ............................. SUCCESS [  3.999 s]
      ------------------------------------------------------------------------
      BUILD SUCCESS
      ------------------------------------------------------------------------
      Total time:  06:17 min (Wall Clock)
      Finished at: 2020-04-06T15:50:35-07:00
      ------------------------------------------------------------------------
  9. 生成的应用程序在构建目录中可用(对于 1.11.14:lynxus-assembly/target/lynxus-1.11.4-bin/lynxus-1.11.4)。

    • cd lynxus-assembly/target/lynxus-1.11.4-bin/lynxus-1.11.4 — 更改目录到应用程序根目录

      lynxus-1.11.4/lynxus-assembly/target/lynxus-1.11.4-bin/lynxus-1.11.4/ % ls -alGh
      drwxr-xr-x   10 alopresto  staff   320B Apr  6 15:50 ./
      drwxr-xr-x    3 alopresto  staff    96B Apr  6 15:50 ../
      -rw-r--r--    1 alopresto  staff   157K Jan 22 07:10 LICENSE
      -rw-r--r--    1 alopresto  staff    85K Jan 22 07:10 NOTICE
      -rw-r--r--    1 alopresto  staff   4.7K Jan 22 07:10 README
      drwxr-xr-x    8 alopresto  staff   256B Apr  6 15:50 bin/
      drwxr-xr-x   10 alopresto  staff   320B Apr  6 15:50 conf/
      drwxr-xr-x    3 alopresto  staff    96B Apr  6 15:50 docs/
      drwxr-xr-x    2 alopresto  staff    64B Jan 22 07:10 extensions/
      drwxr-xr-x  116 alopresto  staff   3.6K Apr  6 15:50 lib/

启动 Lynxus

描述

运行 ACAL Lynxus 应用程序的说明

目的

在本地机器上配置和运行应用程序

起点

安装 ACAL Lynxus 或 从源代码构建 Lynxus

预期结果

最新版本的 ACAL Lynxus 在主机上以最小配置运行

预计持续时间

1 分钟

  1. 从 Lynxus 下载、解归档或构建的目录开始。对于本节,将使用目录 /etc/lynxus-1.11.4。此目录将被称为"Lynxus 主目录",可以显式设置(Lynxus 不会自动执行此操作,也不是必需的)。

    • export LYNXUS_HOME="/etc/lynxus-1.11.4/" — 设置引用安装目录的环境变量($LYNXUS_HOME)(可选)

    • cd /etc/lynxus-1.11.4 — 将终端更改为 Lynxus 主目录

    • ls -alGh — 列出目录的内容(可选)

      Lynxus 主目录内容
  2. 此时,可以使用默认配置值启动 Lynxus(可在 http://localhost:8080/lynxus 访问)。

    • ./bin/lynxus.sh start — 启动 Lynxus。(Lynxus 完成调度所有组件需要一些时间。执行 bin/lynxus.sh start 会执行在后台启动 Lynxus 然后退出的 lynxus.sh 脚本。如果您希望 lynxus.sh 等待 Lynxus 完成调度所有组件后再退出,使用 --wait-for-init 标志和可选的超时(以秒为单位指定):bin/lynxus.sh start --wait-for-init 120。如果未提供超时,将使用默认的 15 分钟超时。)

    • tail -f logs/lynxus-app.log — 跟踪应用程序日志,将指示应用程序何时已启动

      Lynxus 应用程序日志列出可用 URL
  3. 在 Web 浏览器中导航到 URL(http://localhost:8080/lynxus 或 lynxus-app.log 输出中列出的任何 URL)。

    Lynxus 应用程序在浏览器中运行

修改配置值

许多 Web 应用程序默认在 :8080 上运行,因此此端口可能已在机器上被占用。本节将演示更改 Lynxus 使用的端口。以下所有命令均从 $LYNXUS_HOME 运行。

  1. 确保应用程序未运行。

    • ps -ef | grep lynxus — 检查运行系统中是否有任何引用 lynxus 的进程(可选)

    • ./bin/lynxus.sh status — 确定指定实例是否正在运行(可选)

    • ./bin/lynxus.sh stop — 停止指定实例

  2. 打开 Lynxus 的主配置文件(lynxus.properties)。任何文本编辑器都足以完成此操作(Sublime Text、Atom、vi、nano 等)

    • $EDITOR conf/lynxus.properties — 打开 lynxus.properties 文件进行编辑

  3. 更改 lynxus.web.http.port=8080 → lynxus.web.http.port=7777 — 将 HTTP 端口设置为新值

    在 *nix 系统上设置 1 - 1024 之间的端口需要 root 访问权限
  4. 保存并关闭文件。

  5. 再次启动 Lynxus

    • ./bin/lynxus.sh start — 启动 Lynxus

    • tail -f logs/lynxus-app.log — 跟踪应用程序日志

  6. 在 Web 浏览器中打开新地址(http://localhost:7777/lynxus)

使用 TLS 保护 Lynxus

ACAL Lynxus 出于多种原因需要 传输层安全 (TLS) 配置。

  1. 加密客户端和服务器之间的通信(这提供传输数据的机密性和完整性)

  2. 防止恶意用户拦截数据或冒充服务器

  3. 启用任何身份验证和授权机制

Lynxus 故意不允许在明文 HTTP 上使用任何身份验证或授权功能。如果没有 TLS 提供的机密性和完整性以及用户和组访问控制,任何恶意实体都可以拦截和修改 Lynxus API 请求、损坏和窃取数据,并以其他方式干扰 Lynxus 实例。由于 Lynxus 强大的功能集,这甚至可能导致完全控制运行 Lynxus 的主机。有关更多信息,请参阅 管理员指南:安全配置。

使用提供的证书保护 Lynxus

本节假设企业 IT 部门或其他机制提供签名证书。

描述

使用提供的证书为 ACAL Lynxus 应用程序启用 传输层安全 (TLS) 的说明

目的

使用 TLS 保护 Lynxus 可保护传输中的数据,并且是启用身份验证和授权所必需的

起点

[starting-lynxus]

预期结果

最新版本的 ACAL Lynxus 在主机上通过 TLS 运行,启用了客户端证书身份验证和授权,并配置了单个用户

预计持续时间

10 分钟

在此场景中,使用商业 CA,但它也可以是具有内部 CA 证书的企业 CA,该证书被配置为受公司机器信任。有许多商业供应商提供签名证书。对于此示例,使用 TinyCert,因为它是免费的。Let’s Encrypt 是另一个免费提供商,但需要验证主机名所有权,这涉及此处未显示的额外步骤。

对于此场景,所有证书和密钥都将采用 隐私增强邮件 (PEM) 格式。这是证书和密钥的常见格式。它对文件内容使用 Base64 编码,可以轻松跨各种介质和存储机制传输。纯文本编辑器可用于查看内容,openssl 和 keytool 工具可以解析内容。

PEM 文件示例:

% cat lynxus.pem
-----BEGIN CERTIFICATE-----
MIIFDzCCA/egAwIBAgICURswDQYJKoZIhvcNAQELBQAwgZMxCzAJBgNVBAYTAlVT
MQswCQYDVQQIDAJDQTEVMBMGA1UEBwwMU2FudGEgTW9uaWNhMRcwFQYDVQQKDA5B
cGFjaGUgTmlGaSBDQTErMCkGA1UECwwiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNh
dGUgU2lnbmluZzEaMBgGA1UEAwwRQXBhY2hlIE5pRmkgQ0EgQ0EwHhcNMjAwNDA1
MjI0MTQ5WhcNMjEwNDA1MjI0MTQ5WjCBgjELMAkGA1UEBhMCVVMxCzAJBgNVBAgM
AkNBMRUwEwYDVQQHDAxTYW50YSBNb25pY2ExFzAVBgNVBAoMDkFwYWNoZSBOaUZp
IENBMSAwHgYDVQQLDBdBcGFjaGUgTmlGaSBXYWxrdGhyb3VnaDEUMBIGA1UEAwwL
c2VjdXJlLm5pZmkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDJySMX
H+Fco7WbXIKQ1u1RrMd/FE7zl/69X/7Da6x4c6jlI8fy3MbxZjqFnDsJpNuIkPVv
yHcGCm8Lkw70DbCTUkW60MlVM5r4CkWhVgOd1RD34QzhgkcKjg29uOuCYa+FM78q
E5Qp64wbLpDXHpxmm4/Qv97RHdTqynqRzYs6g+VyCn14nXuqJp0533F1T2khtK4z
BrIMZj6VpWyyCFmJjmrW37GbcRuxMbtbgj+4mzD0Eew6/96R9A7Wxlq0QMuRTz12
ie9xSi/GyzQV2r9gRzxuIo8qshMIq2d/1pipIgWNj2LzEXXoEbfHy7Jwm78e1G/+
PV/ULIx+QL4h9Ni/AgMBAAGjggF6MIIBdjAJBgNVHRMEAjAAMB0GA1UdDgQWBBTy
gw/GBUrqMI80gYpdlh3NNfwrBzAfBgNVHSMEGDAWgBRkovbp8RqbD0BeDyPcrBYg
a1rzdDARBglghkgBhvhCAQEEBAMCBPAwCwYDVR0PBAQDAgP4MDsGA1UdJQQ0MDIG
CCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcD
CDBtBggrBgEFBQcBAQRhMF8wLAYIKwYBBQUHMAGGIGh0dHA6Ly9vY3NwLnRpbnlj
ZXJ0Lm9yZy9jYS0yNDA1MC8GCCsGAQUFBzAChiNodHRwOi8vYWlhLnRpbnljZXJ0
Lm9yZy9jYS0yNDA1LmNydDA0BgNVHR8ELTArMCmgJ6AlhiNodHRwOi8vY3JsLnRp
bnljZXJ0Lm9yZy9jYS0yNDA1LmNybDAnBgNVHREEIDAeggtzZWN1cmUubmlmaYcE
fwAAAYIJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQDAICxyfgm2eBa8J3+s
D2QpIQgOc8fgMYeqWwgk5rHbDk8IdkH9XloAuSzxi/weZt3PQQOdNHeeOCOXEWAf
n0X1SMGFUvLForHgArGolt9uFofvh2sE2q3/wSBI6J2940dYwZOPAlf5m7fNpcbz
WCJZGt7Pn/VWm3+uPZrMAj+GzsvR9NVMZwK/eAFM4OKNCeiLRPv1qLARYVqvLJFK
t9dlCrHKyDLIaUbG2Lcw6Yt7SBU7nAnobuYqImRRXm/bE0xwb9X9fD8UzJfmryOT
Fvz4hlntwk1fgvG1n4SrZgFNZpg1awN5tXbwiOdisTwslQ49C4QCH5iEWCM1HExL
A5GR
-----END CERTIFICATE-----

解析内容示例:

% openssl x509 -in lynxus.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 20763 (0x511b)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=CA, L=Santa Monica, O=ACAL Lynxus CA, OU=Secure Digital Certificate Signing, CN=ACAL Lynxus CA CA
        Validity
            Not Before: Apr  5 22:41:49 2020 GMT
            Not After : Apr  5 22:41:49 2021 GMT
        Subject: C=US, ST=CA, L=Santa Monica, O=ACAL Lynxus CA, OU=ACAL Lynxus Walkthrough, CN=secure.lynxus
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c9:c9:23:17:1f:e1:5c:a3:b5:9b:5c:82:90:d6:
                    ed:51:ac:c7:7f:14:4e:f3:97:fe:bd:5f:fe:c3:6b:
                    ac:78:73:a8:e5:23:c7:f2:dc:c6:f1:66:3a:85:9c:
                    3b:09:a4:db:88:90:f5:6f:c8:77:06:0a:6f:0b:93:
                    0e:f4:0d:b0:93:52:45:ba:d0:c9:55:33:9a:f8:0a:
                    45:a1:56:03:9d:d5:10:f7:e1:0c:e1:82:47:0a:8e:
                    0d:bd:b8:eb:82:61:af:85:33:bf:2a:13:94:29:eb:
                    8c:1b:2e:90:d7:1e:9c:66:9b:8f:d0:bf:de:d1:1d:
                    d4:ea:ca:7a:91:cd:8b:3a:83:e5:72:0a:7d:78:9d:
                    7b:aa:26:9d:39:df:71:75:4f:69:21:b4:ae:33:06:
                    b2:0c:66:3e:95:a5:6c:b2:08:59:89:8e:6a:d6:df:
                    b1:9b:71:1b:b1:31:bb:5b:82:3f:b8:9b:30:f4:11:
                    ec:3a:ff:de:91:f4:0e:d6:c6:5a:b4:40:cb:91:4f:
                    3d:76:89:ef:71:4a:2f:c6:cb:34:15:da:bf:60:47:
                    3c:6e:22:8f:2a:b2:13:08:ab:67:7f:d6:98:a9:22:
                    05:8d:8f:62:f3:11:75:e8:11:b7:c7:cb:b2:70:9b:
                    bf:1e:d4:6f:fe:3d:5f:d4:2c:8c:7e:40:be:21:f4:
                    d8:bf
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Subject Key Identifier:
                F2:83:0F:C6:05:4A:EA:30:8F:34:81:8A:5D:96:1D:CD:35:FC:2B:07
            X509v3 Authority Key Identifier:
                keyid:64:A2:F6:E9:F1:1A:9B:0F:40:5E:0F:23:DC:AC:16:20:6B:5A:F3:74

            Netscape Cert Type:
                SSL Client, SSL Server, S/MIME, Object Signing
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication, Code Signing, E-mail Protection, Time Stamping
            Authority Information Access:
                OCSP - URI:http://ocsp.tinycert.org/ca-2405
                CA Issuers - URI:http://aia.tinycert.org/ca-2405.crt

            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://crl.tinycert.org/ca-2405.crl

            X509v3 Subject Alternative Name:
                DNS:secure.lynxus, IP Address:127.0.0.1, DNS:localhost
    Signature Algorithm: sha256WithRSAEncryption
         c0:20:2c:72:7e:09:b6:78:16:bc:27:7f:ac:0f:64:29:21:08:
         0e:73:c7:e0:31:87:aa:5b:08:24:e6:b1:db:0e:4f:08:76:41:
         fd:5e:5a:00:b9:2c:f1:8b:fc:1e:66:dd:cf:41:03:9d:34:77:
         9e:38:23:97:11:60:1f:9f:45:f5:48:c1:85:52:f2:c5:a2:b1:
         e0:02:b1:a8:96:df:6e:16:87:ef:87:6b:04:da:ad:ff:c1:20:
         48:e8:9d:bd:e3:47:58:c1:93:8f:02:57:f9:9b:b7:cd:a5:c6:
         f3:58:22:59:1a:de:cf:9f:f5:56:9b:7f:ae:3d:9a:cc:02:3f:
         86:ce:cb:d1:f4:d5:4c:67:02:bf:78:01:4c:e0:e2:8d:09:e8:
         8b:44:fb:f5:a8:b0:11:61:5a:af:2c:91:4a:b7:d7:65:0a:b1:
         ca:c8:32:c8:69:46:c6:d8:b7:30:e9:8b:7b:48:15:3b:9c:09:
         e8:6e:e6:2a:22:64:51:5e:6f:db:13:4c:70:6f:d5:fd:7c:3f:
         14:cc:97:e6:af:23:93:16:fc:f8:86:59:ed:c2:4d:5f:82:f1:
         b5:9f:84:ab:66:01:4d:66:98:35:6b:03:79:b5:76:f0:88:e7:
         62:b1:3c:2c:95:0e:3d:0b:84:02:1f:98:84:58:23:35:1c:4c:
         4b:03:91:91

场景的先决条件(由 IT 部门颁发):

  • 指定主机的签名 Lynxus 服务器证书(此示例为 secure.lynxus),PEM 格式(lynxus.pem)

  • 匹配的私钥,PEM 格式(lynxus.key)

  • 指定用户的签名客户端证书(此示例为 CN=my_username, …​),PEM 格式(client.pem)

  • 匹配的私钥,PEM 格式(client.key)

  • CA 证书,PEM 格式(cacert.pem)

最终结果将包括自签名外部 CA(根)、包含 Lynxus 实例运行所需证书的密钥库和信任库,以及人类用户访问 Lynxus 的客户端证书。

Lynxus TLS 独立提供证书图
根据使用的 Java 版本,以下某些命令可能显示警告 Warning: The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.jks -deststoretype pkcs12". 截至版本 1.11.4,Lynxus 仍然比 PKCS12 密钥库更好地处理 JKS 密钥库,但两者都可以接受。这可能会在未来版本中更改。PKCS12 密钥库用于客户端证书和密钥,因为浏览器更喜欢加载此格式。
  1. 从 Lynxus 下载和解归档的目录开始。对于本节,将使用目录 /etc/lynxus-1.11.4。此目录将被称为"Lynxus 主目录",可以显式设置(Lynxus 不会自动执行此操作,也不是必需的)。

    • export LYNXUS_HOME="/etc/lynxus-1.11.4/" — 设置引用安装目录的环境变量($LYNXUS_HOME)(可选)

    • cd /etc/lynxus-1.11.4 — 将终端更改为 Lynxus 主目录

    • ls -alGh — 列出目录的内容(可选)

      Lynxus 主目录内容
  2. 确定服务器证书(lynxus.pem)是否包含完整的证书链或仅包含服务器证书。如果序列 -----BEGIN CERTIFICATE----- 仅出现一次,则这只是服务器证书。如果出现多次,则存在证书链。如果存在证书链,继续步骤 4。如果不存在,继续步骤 3。

    • cat lynxus.pem — 打印 Base64 编码的内容

  3. 连接服务器证书和 CA 证书以形成证书链。

    • cat cacert.pem >> lynxus.pem — 以正确的顺序将 CA 证书连接到 Lynxus 服务器证书

  4. 从证书链和私钥形成 PKCS12 密钥库。

    • openssl pkcs12 -export -out lynxus.p12 -inkey lynxus.key -in lynxus.pem -name lynxus-key — 生成包含私钥和证书链的 PKCS12 密钥库,别名为 lynxus-key。命令将提示输入*导出密码*。选择安全的密码并输入两次以确认(对于此场景,使用*坏*示例 passwordpassword)

    • keytool -list -v -keystore lynxus.p12 — 验证 PKCS12 密钥库的内容(可选)。此命令将提示输入上一步输入的相同密码

      证书链长度为 2,从服务器证书开始并包括 CA 证书。
      keytool -list -v -keystore lynxus.p12
      Enter keystore password:
      Keystore type: PKCS12
      Keystore provider: SUN
      
      Your keystore contains 1 entry
      
      Alias name: 1
      Creation date: Apr 5, 2020
      Entry type: PrivateKeyEntry
      Certificate chain length: 2
      Certificate[1]:
      Owner: CN=secure.lynxus, OU=ACAL Lynxus Walkthrough, O=ACAL Lynxus CA, L=Santa Monica, ST=CA, C=US
      Issuer: CN=ACAL Lynxus CA CA, OU=Secure Digital Certificate Signing, O=ACAL Lynxus CA, L=Santa Monica, ST=CA, C=US
      Serial number: 511b
      Valid from: Sun Apr 05 15:41:49 PDT 2020 until: Mon Apr 05 15:41:49 PDT 2021
      Certificate fingerprints:
      	 SHA1: C7:DD:26:7F:8E:25:45:2E:02:FE:34:FA:89:42:D8:BE:5B:88:AB:2D
      	 SHA256: 6E:A6:6C:BB:88:E3:24:99:5C:EB:C7:B8:02:D1:30:C4:AC:6D:0C:F2:40:46:DA:CB:6A:15:13:B7:49:40:FA:99
      Signature algorithm name: SHA256withRSA
      Subject Public Key Algorithm: 2048-bit RSA key
      Version: 3
      
      Extensions:
      
      #1: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
      AuthorityInfoAccess [
        [
         accessMethod: ocsp
         accessLocation: URIName: http://ocsp.tinycert.org/ca-2405
      ,
         accessMethod: caIssuers
         accessLocation: URIName: http://aia.tinycert.org/ca-2405.crt
      ]
      ]
      
      #2: ObjectId: 2.5.29.35 Criticality=false
      AuthorityKeyIdentifier [
      KeyIdentifier [
      0000: 64 A2 F6 E9 F1 1A 9B 0F   40 5E 0F 23 DC AC 16 20  d.......@^.#...
      0010: 6B 5A F3 74                                        kZ.t
      ]
      ]
      
      #3: ObjectId: 2.5.29.19 Criticality=false
      BasicConstraints:[
        CA:false
        PathLen: undefined
      ]
      
      #4: ObjectId: 2.5.29.31 Criticality=false
      CRLDistributionPoints [
        [DistributionPoint:
           [URIName: http://crl.tinycert.org/ca-2405.crl]
      ]]
      
      #5: ObjectId: 2.5.29.37 Criticality=false
      ExtendedKeyUsages [
        serverAuth
        clientAuth
        codeSigning
        emailProtection
        timeStamping
      ]
      
      #6: ObjectId: 2.5.29.15 Criticality=false
      KeyUsage [
        DigitalSignature
        Non_repudiation
        Key_Encipherment
        Data_Encipherment
        Key_Agreement
      ]
      
      #7: ObjectId: 2.16.840.1.113730.1.1 Criticality=false
      NetscapeCertType [
         SSL client
         SSL server
         S/MIME
         Object Signing
      ]
      
      #8: ObjectId: 2.5.29.17 Criticality=false
      SubjectAlternativeName [
        DNSName: secure.lynxus
        IPAddress: 127.0.0.1
        DNSName: localhost
      ]
      
      #9: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: F2 83 0F C6 05 4A EA 30   8F 34 81 8A 5D 96 1D CD  .....J.0.4..]...
      0010: 35 FC 2B 07                                        5.+.
      ]
      ]
      
      Certificate[2]:
      Owner: CN=ACAL Lynxus CA CA, OU=Secure Digital Certificate Signing, O=ACAL Lynxus CA, L=Santa Monica, ST=CA, C=US
      Issuer: CN=ACAL Lynxus CA CA, OU=Secure Digital Certificate Signing, O=ACAL Lynxus CA, L=Santa Monica, ST=CA, C=US
      Serial number: 0
      Valid from: Mon Feb 08 20:24:06 PST 2016 until: Thu Feb 05 20:24:06 PST 2026
      Certificate fingerprints:
      	 SHA1: E9:CA:EF:26:C7:2A:AF:7A:FD:BC:97:12:ED:F5:6B:3B:79:40:D2:A3
      	 SHA256: 4C:0A:2F:C4:D3:CC:B5:A8:0E:0B:95:EE:0C:E6:60:7C:85:78:7A:58:77:BB:87:58:12:9B:D1:E4:BA:E0:9B:67
      Signature algorithm name: SHA256withRSA
      Subject Public Key Algorithm: 2048-bit RSA key
      Version: 3
      
      Extensions:
      
      #1: ObjectId: 2.5.29.19 Criticality=true
      BasicConstraints:[
        CA:true
        PathLen:2147483647
      ]
      
      #2: ObjectId: 2.5.29.31 Criticality=false
      CRLDistributionPoints [
        [DistributionPoint:
           [URIName: http://crl.tinycert.org/ca-2405.crl]
      ]]
      
      #3: ObjectId: 2.5.29.18 Criticality=false
      IssuerAlternativeName [
        RFC822Name: andy@andylopresto.com
      ]
      
      #4: ObjectId: 2.5.29.15 Criticality=true
      KeyUsage [
        DigitalSignature
        Key_Encipherment
        Key_Agreement
        Key_CertSign
      ]
      
      #5: ObjectId: 2.5.29.17 Criticality=false
      SubjectAlternativeName [
        RFC822Name: andy@andylopresto.com
      ]
      
      #6: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: 64 A2 F6 E9 F1 1A 9B 0F   40 5E 0F 23 DC AC 16 20  d.......@^.#...
      0010: 6B 5A F3 74                                        kZ.t
      ]
      ]
      
      
      
      *******************************************
      *******************************************
  5. 将 Lynxus 实例的 PKCS12 密钥库转换为 Java KeyStore 文件(keystore.jks)。PKCS12 密钥库可由 Lynxus 使用,但 JKS 格式处理更稳健,导致更少的边缘情况。JKS 密钥库不能直接从 PEM 文件形成,因此 PKCS12 密钥库用作中间形式。

    • keytool -importkeystore -srckeystore lynxus.p12 -srcstoretype pkcs12 -srcalias lynxus-key -destkeystore keystore.jks -deststoretype jks -destalias lynxus-key — 将 PKCS12 密钥库转换为 JKS 密钥库。此命令将提示输入新密钥库密码两次,然后提示输入上一步在 PKCS12 密钥库上设置的密码

  6. 将 CA 证书转换为 Lynxus 信任库(truststore.jks)以允许受信任的传入连接。

    • keytool -importcert -alias lynxus-cert -file cacert.pem -keystore truststore.jks — 将 CA 证书导入信任库。此命令将提示输入新信任库密码两次

      % keytool -importcert -alias lynxus-cert -file cacert.pem -keystore truststore.jks
      Enter keystore password:
      Re-enter new password:
      Owner: CN=ACAL Lynxus CA CA, OU=Secure Digital Certificate Signing, O=ACAL Lynxus CA, L=Santa Monica, ST=CA, C=US
      Issuer: CN=ACAL Lynxus CA CA, OU=Secure Digital Certificate Signing, O=ACAL Lynxus CA, L=Santa Monica, ST=CA, C=US
      Serial number: 0
      Valid from: Mon Feb 08 20:24:06 PST 2016 until: Thu Feb 05 20:24:06 PST 2026
      Certificate fingerprints:
      	 SHA1: E9:CA:EF:26:C7:2A:AF:7A:FD:BC:97:12:ED:F5:6B:3B:79:40:D2:A3
      	 SHA256: 4C:0A:2F:C4:D3:CC:B5:A8:0E:0B:95:EE:0C:E6:60:7C:85:78:7A:58:77:BB:87:58:12:9B:D1:E4:BA:E0:9B:67
      Signature algorithm name: SHA256withRSA
      Subject Public Key Algorithm: 2048-bit RSA key
      Version: 3
      
      Extensions:
      
      #1: ObjectId: 2.5.29.19 Criticality=true
      BasicConstraints:[
        CA:true
        PathLen:2147483647
      ]
      
      #2: ObjectId: 2.5.29.31 Criticality=false
      CRLDistributionPoints [
        [DistributionPoint:
           [URIName: http://crl.tinycert.org/ca-2405.crl]
      ]]
      
      #3: ObjectId: 2.5.29.18 Criticality=false
      IssuerAlternativeName [
        RFC822Name: andy@andylopresto.com
      ]
      
      #4: ObjectId: 2.5.29.15 Criticality=true
      KeyUsage [
        DigitalSignature
        Key_Encipherment
        Key_Agreement
        Key_CertSign
      ]
      
      #5: ObjectId: 2.5.29.17 Criticality=false
      SubjectAlternativeName [
        RFC822Name: andy@andylopresto.com
      ]
      
      #6: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: 64 A2 F6 E9 F1 1A 9B 0F   40 5E 0F 23 DC AC 16 20  d.......@^.#...
      0010: 6B 5A F3 74                                        kZ.t
      ]
      ]
      
      Trust this certificate? [no]:  yes
      Certificate was added to keystore
  7. (可选)将 keystore.jks 和 truststore.jks 文件移动到 conf/ 目录。此步骤不是必需的,但有助于组织。

  8. 使用必要的值配置 lynxus.properties 文件。这包括设置主机名、端口以及密钥库和信任库路径和密码。

    • $EDITOR conf/lynxus.properties — 在文本编辑器中打开 lynxus.properties 文件

    • 更新以下行:

      • lynxus.remote.input.host= → lynxus.remote.input.host=secure.lynxus

      • lynxus.remote.input.secure=false → lynxus.remote.input.secure=true

      • lynxus.remote.input.socket.port= → lynxus.remote.input.socket.port=10443

      • lynxus.web.http.port=8080 → lynxus.web.http.port=

      • lynxus.web.https.host= → lynxus.web.https.host=secure.lynxus

      • lynxus.web.https.port= → lynxus.web.https.port=9443

      • lynxus.security.keystore= → lynxus.security.keystore=./conf/keystore.jks

      • lynxus.security.keystoreType= → lynxus.security.keystoreType=jks

      • lynxus.security.keystorePasswd= → lynxus.security.keystorePasswd=passwordpassword

      • lynxus.security.truststore= → lynxus.security.truststore=./conf/truststore.jks

      • lynxus.security.truststoreType= → lynxus.security.truststoreType=jks

      • lynxus.security.truststorePasswd= → lynxus.security.truststorePasswd=passwordpassword

  9. 从客户端证书和密钥生成客户端证书密钥库。

    • openssl pkcs12 -export -out CN=my_username.p12 -inkey client.key -in client.pem — 创建包含客户端证书和私钥的 PKCS12 密钥库。此命令提示输入*导出密码*两次

部署 Lynxus 集群

ACAL Lynxus 可以以 独立 或 集群 模式运行。独立节点通常足以满足数据流操作,但在生产或高容量环境中,集群更具性能和弹性。有关更多信息,请参阅 Lynxus 管理员指南:集群。

配置主机以解析任意 DNS 主机名

本节提供说明来配置单个主机机器以使用名为 dnsmasq 的工具通过 DNS 解析动态主机名。如果将 Lynxus 集群部署到单个主机机器以逻辑分离并排运行的节点,这很有用。有许多选项可以实现此结果;这是一种方法。

描述

安装和配置动态 DNS 主机名解析的说明

目的

具有多个节点的 Lynxus 集群需要在它们之间通信,如果所有节点都是 localhost,这会令人困惑且不支持唯一主机名的证书。

起点

不适用

预期结果

主机机器可以解析任意 DNS 主机名,而不影响正常网络连接

有用阅读

不适用

预计持续时间

5 分钟

机器将 DNS 主机名(例如 lynxus.acal.org.cn)解析为 IP 地址(95.216.24.32)。Lynxus 集群中的每个节点都需要一个主机名(例如 node1.lynxuscluster.com),用于服务 UI/API 并与对等节点通信。当在同一物理/虚拟主机上部署多个节点的集群时,每个节点可以接收不同的、不冲突的端口集,但主机名(localhost)会冲突。通过允许任意主机名解析,每个节点可以并排存在但被唯一标识。

对于本指南,任何以 .lynxus 结尾的主机名都将解析为 localhost。

先决条件:

  • *nix(或类似)操作系统

  • 包管理器(例如 apt-get、yum、brew)。以下说明使用 brew;用相关包管理器的命令内联替换

最终结果将把 *.lynxus 主机名解析到本地机器,所有其他名称使用预先存在的 DNS 解析服务。

  1. 安装和配置 dnsmasq。

    1. 安装 dnsmasq。

      • brew install dnsmasq

        host@macbook ~ % brew install dnsmasq
        ==> Fetching dnsmasq
        ==> Downloading https://ghcr.io/v2/homebrew/core/dnsmasq/manifests/2.89
        ########################################################################## 100.0%
        ==> Downloading https://ghcr.io/v2/homebrew/core/dnsmasq/blobs/sha256:490265bd8d3e8392380fff3b0fbb4caf65f918366b5cf8c613372d21844860aa
        ==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:490265bd8d3e8392380fff3b0fbb4caf65f918366b5cf8c613372d21844860aa
        ########################################################################## 100.0%
        ==> Pouring dnsmasq--2.89.arm64_ventura.bottle.tar.gz
        ==> Caveats
        To start dnsmasq now and restart at startup:
          sudo brew services start dnsmasq
        Or, if you don't want/need a background service you can just run:
          /opt/homebrew/opt/dnsmasq/sbin/dnsmasq --keep-in-foreground -C /opt/homebrew/etc/dnsmasq.conf -7 /opt/homebrew/etc/dnsmasq.d,*.conf
        ==> Summary
        🍺  /opt/homebrew/Cellar/dnsmasq/2.89: 10 files, 646.3KB
    2. 使用服务管理器启动 dnsmasq。

      • sudo brew services start dnsmasq

    3. 在 /opt/homebrew/etc/dnsmasq.d/ 中创建新文件 development.conf。此文件定义要解析的地址模式。这里,$EDITOR 是定义为文本编辑器路径的环境变量。您可以使用任何您选择的文本编辑器(Sublime Text、Atom、vi、emacs、nano 等)。

      • $EDITOR /opt/homebrew/etc/dnsmasq.d/development.conf — 创建并打开 development.conf 文件进行编辑

    4. 使用地址模式填充 development.conf。address/ 行定义模式,# Direct 行是描述模式的注释。

      • 将以下行添加到 development.conf:

        # 测试 Lynxus 实例
        address=/.lynxus/127.0.0.1
        # 将任何以 .lynxus 结尾的主机名定向到 127.0.0.1
    5. 在 /etc 目录中创建目录 resolver。

      • sudo mkdir /etc/resolver — 创建 'resolver' 目录

    6. 在 /etc/resolver/ 中创建新文件 lynxus。此文件名必须匹配要解析的顶级域 (TLD)(例如 hostname.lynxus → lynxus,hostname.example → example)。

      • sudo $EDITOR /etc/resolver/lynxus

    7. 填充 lynxus 文件并向操作系统注册新的 DNS 解析器(在此主机上运行的 dnsmasq)。

      • 将以下行添加到 lynxus:

        nameserver 127.0.0.1
    8. 重启 dnsmasq:

      • sudo brew services restart dnsmasq

  2. 要测试新 DNS 解析器的成功部署,ping 两个地址。一个是此机器未托管的外部站点,以演示常规 DNS 功能保持不变,另一个是此机器将响应的新主机名。

    1. Ping 外部托管的现有网站 (https://lynxus.acal.org.cn)。

      • ping -c 1 lynxus.acal.org.cn

        PING lynxus.acal.org.cn (95.216.24.32): 56 data bytes
        64 bytes from 95.216.24.32: icmp_seq=0 ttl=48 time=189.600 ms

        这里 lynxus.acal.org.cn 解析由系统的默认 DNS 解析器完成,并解析为 95.216.24.32(不是此机器)。

    2. Ping 此机器应在本地解析的不存在的网站 (http://imaginary.node.lynxus)。

      • ping -c 1 imaginary.node.lynxus

        PING imaginary.node.lynxus (127.0.0.1): 56 data bytes
        64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.026 ms

        这里 *.lynxus 解析重定向到主机机器的 IP(127.0.0.1),这是通过 /etc/resolver/lynxus 文件配置的。

使用 mTLS 保护 Lynxus

Lynxus 集群的安全设置涉及一组密钥库和信任库,以促进通过 mTLS 协议在集群节点之间的安全通信。每个集群节点将使用包含私钥和用于标识自身的证书的密钥库,以及具有指定受信任远程端点的证书的信任库。通常,信任库将指定单个证书颁发机构,这可以与由该机构签名的任何证书建立信任关系。

有多种选项可用于创建所需的密钥库和信任库:

在单节点 Lynxus 开发实例的特殊情况下,自 Lynxus 版本 1.14.0 以来,自动自签名证书生成已在 Lynxus 中可用。此实用程序在 freshly 构建的 Lynxus 程序集首次运行时执行所需的证书生成和配置。

手动密钥库生成

手动使用 openssl 和/或 Java keytool 实用程序也可以帮助提供密钥库和信任库来保护 Lynxus 集群通信。虽然鼓励使用前面提到的替代方案之一,但这些命令记录在案以提供信息,并在需要时作为额外替代方案。

以下 OpenSSL 版本已知支持生成带有"subjectAltName"的证书:OpenSSL 3.0.7 2022 年 11 月 1 日。以下 OpenSSL 版本已知不支持生成带有"subjectAltName"的证书:LibreSSL 2.8.3。
在以下说明中,subjectAltName IP 和 subjectAltName DNS 的值应根据用例适当替换。说明仅旨在传达语法。
以下许多命令将请求保护命令生成数据的密码。为用例选择适当强度的密码。以适合用例的方式保护密码和生成文件的安全。
  1. 生成证书颁发机构密钥。

    • openssl genrsa -aes256 -out ca.key 3072

  2. 生成集群节点密钥(每个节点一个)。

    • openssl genrsa -aes256 -out lynxus1.key 3072

    • openssl genrsa -aes256 -out lynxus2.key 3072

    • …​

  3. 生成证书颁发机构证书。

    • openssl req -new -x509 -days 1461 -key ca.key -sha256 -out ca.cer -subj "/CN=lynxus-ca/OU=lynxus/"

  4. 生成集群节点证书签名请求(每个节点一个)。

    • openssl req -new -key lynxus1.key -out lynxus1.csr -subj "/CN=lynxus1/OU=lynxus/" -addext "subjectAltName = IP:192.168.1.1,DNS:localhost"

    • openssl req -new -key lynxus2.key -out lynxus2.csr -subj "/CN=lynxus2/OU=lynxus/" -addext "subjectAltName = IP:192.168.1.2,DNS:localhost"

    • …​

  5. 使用证书颁发机构密钥生成集群节点证书(每个节点一个)。

    • openssl x509 -req -in lynxus1.csr -CA ca.cer -CAkey ca.key -CAcreateserial -out lynxus1.cer -days 365 -sha256 -copy_extensions=copyall

    • openssl x509 -req -in lynxus2.csr -CA ca.cer -CAkey ca.key -CAcreateserial -out lynxus1.cer -days 365 -sha256 -copy_extensions=copyall

    • …​

  6. 生成集群节点证书链(每个节点一个)。

    • cat lynxus1.cer ca.cer >lynxus1.chain.cer

    • cat lynxus2.cer ca.cer >lynxus2.chain.cer

    • …​

  7. 生成证书颁发机构密钥库。

    • keytool -importcert -keystore trust.p12 -storetype PKCS12 -file ca.cer -alias 1

  8. 生成集群节点密钥库(每个节点一个)。

    • openssl pkcs12 -export -out lynxus1.p12 -inkey lynxus1.key -in lynxus1.chain.cer

    • openssl pkcs12 -export -out lynxus2.p12 -inkey lynxus2.key -in lynxus2.chain.cer

    • …​

完成这些步骤后,按如下方式使用生成的密钥库和信任库:

节点 密钥库 信任库

lynxus1

lynxus1.p12

trust.p12

lynxus2

lynxus2.p12

trust.p12

…​

…​

trust.p12