公证服务器配置文件

预计阅读时间:9分钟

本文档适用于正在运行自己的公证服务 并希望指定自定义选项的用户。

概述

公证服务器需要配置文件,并且必须使用-config命令行上的选项指定配置文件的路径。

公证服务器还允许您增加/减少日志记录级别,而不必重新启动。

这是完整的服务器配置文件示例:

{
  "server": {
    "http_addr": ":4443",
    "tls_key_file": "./fixtures/notary-server.key",
    "tls_cert_file": "./fixtures/notary-server.crt"
  },
  "trust-service": {
    "type": "remote",
    "hostname": "notarysigner",
    "port": "7899",
    "key_algorithm": "ecdsa",
    "tls_ca_file": "./fixtures/root-ca.crt",
    "tls_client_cert": "./fixtures/notary-server.crt",
    "tls_client_key": "./fixtures/notary-server.key"
  },
  "storage": {
    "backend": "mysql",
    "db_url": "user:pass@tcp(notarymysql:3306)/databasename?parseTime=true"
  },
  "auth": {
    "type": "token",
    "options": {
      "realm": "https://auth.docker.io/token",
      "service": "notary-server",
      "issuer": "auth.docker.io",
      "rootcertbundle": "/path/to/auth.docker.io/cert"
    }
  },
  "logging": {
    "level": "debug"
  },
  "reporting": {
    "bugsnag": {
      "api_key": "c9d60ae4c7e70c4b6c4ebd3e8056d2b8",
      "release_stage": "production"
    }
  },
  "caching": {
    "max_age": {
      "current_metadata": 300,
      "consistent_metadata": 31536000,
    }
  },
  "repositories": {
    "gun_prefixes": ["docker.io/", "my-own-registry.com/"]
  }
}

有关reportinglogging部分的详细信息,请参见有关常见公证配置部分的文档 。

服务器部分(必填)

例子:

"server": {
  "http_addr": ":4443",
  "tls_key_file": "./fixtures/notary-server.key",
  "tls_cert_file": "./fixtures/notary-server.crt"
}
范围 必需的 描述
http_addr 是的 要侦听的TCP地址(IP和端口)。例子:
  • ":4443"表示在所有IP上监听端口4443(因此监听所有接口,例如运行时列出的接口 ifconfig
  • "127.0.0.1:4443"表示仅在本地主机上监听端口4443。这意味着该服务器只能在本地(通过SSH隧道或仅在本地终端上)访问。
tls_key_file 用于HTTPS的私钥的路径。必须与一起提供tls_cert_file,或完全不提供。如果两者均未提供,则服务器使用HTTP而不是HTTPS。该路径是相对于配置文件目录的。
tls_cert_file 用于HTTPS的证书的路径。必须与一起提供tls_key_file,或完全不提供。如果两者均未提供,则服务器使用HTTP而不是HTTPS。该路径是相对于配置文件目录的。

trust_service部分(必填)

本部分配置远程信任服务(例如, 公证签名人)或本地内存ED25519信任服务。

远程信任服务示例:

"trust_service": {
  "type": "remote",
  "hostname": "notarysigner",
  "port": "7899",
  "key_algorithm": "ecdsa",
  "tls_ca_file": "./fixtures/root-ca.crt",
  "tls_client_cert": "./fixtures/notary-server.crt",
  "tls_client_key": "./fixtures/notary-server.key"
}

本地信任服务示例:

"trust_service": {
  "type": "local"
}
范围 必需的 描述
type 是的 必须是"remote""local"
hostname 是,如果远程 远程信任服务的主机名
port 是,如果远程 远程信任服务的GRPC端口
key_algorithm 是,如果远程 用于生成存储在签名服务上的密钥的算法。有效值是"ecdsa""rsa""ed25519"
tls_ca_file 签署远程服务的TLS证书的根CA的路径。如果所述根CA不在系统的默认信任根中,则必须提供此参数。该路径是相对于配置文件目录的。
tls_client_key 用于TLS相互认证的私钥的路径。必须tls_client_cert与否一起提供 。该路径是相对于配置文件目录的。
tls_client_cert 用于TLS相互认证的证书的路径。必须tls_client_key与否一起提供 。该路径是相对于配置文件目录的。

存储部分(必填)

存储部分指定服务器应使用哪个存储后端来存储TUF元数据。仅支持MySQL或内存存储。

数据库存储示例:

"storage": {
  "backend": "mysql",
  "db_url": "user:pass@tcp(notarymysql:3306)/databasename?parseTime=true"
}
范围 必需的 描述
backend 是的 必须为"mysql""memory"。如果"memory"选择,则将db_url 忽略。
db_url 是的,如果没有 memory 数据源名称来访问数据库。 (包括parseTime=true在DSN中)

身份验证部分(可选)

本节指定服务器的身份验证选项。目前,我们仅支持令牌身份验证。

例子:

"auth": {
  "type": "token",
  "options": {
    "realm": "https://auth.docker.io",
    "service": "notary-server",
    "issuer": "auth.docker.io",
    "rootcertbundle": "/path/to/auth.docker.io/cert"
  }
}

这整个部分是可选的。但是,如果您希望对服务器进行身份验证,则需要以下必需的参数来进行配置。

令牌认证:

这是与Docker Registry版本2相同的身份验证的实现 。

范围 必需的 描述
type 是的 必须是"token"; 所有其他值将导致不进行身份验证(其余参数将被忽略)
options 是的 令牌认证的选项。有关 参数的详细信息,请参阅 注册表令牌配置文档

缓存部分(可选)

例子:

"caching": {
  "max_age": {
    "current_metadata": 300,
    "consistent_metadata": 31536000,
  }
}
范围 必需的 描述
max_age 缓存服务的最大生存时间(以秒为单位),以缓存角色的最新元数据和角色的校验和的元数据。在GET-ting元数据的缓存控制标头上设置此值。还必须在当前元数据的缓存控制标头上设置“必须重新验证”,因为每当将新元数据签名到存储库中时,当前元数据都可能会更改。尽管一致的元数据可能会被删除,但它永远都不应更改,因此最长期限可以是一个更高的值。

存储库部分(可选)

例子:

"repositories": {
  "gun_prefixes": ["docker.io/", "my-own-registry.com/"]
}
范围 必需的 描述
gun_prefixes 此服务器接受的GUN前缀列表。以任何其他前缀开头的图像上的POST操作均以400拒绝,而GET / DELETE操作则以404拒绝。

热日志记录级别重载

目前,我们不支持完全重新加载公证配置文件。我们现在支持的是:

  • 通过信令提高日志记录级别 SIGUSR1
  • 通过信令降低日志记录级别 SIGUSR2

例子:

增加日志记录级别

$ kill -s SIGUSR1 PID

或者

$ docker container exec -i CONTAINER_ID kill -s SIGUSR1 PID

降低日志记录级别

$ kill -s SIGUSR2 PID

或者

$ docker container exec -i CONTAINER_ID kill -s SIGUSR2 PID

PID是它的进程ID,notary-server如果您使用某种包装程序启动脚本或类似的东西运行容器,则PID可能不是PID 1进程。

您可以notary-server通过获得PID

$ docker container exec CONTAINER_ID ps aux

或者

$ ps aux | grep "notary-server -config" | grep -v "grep"
码头工人公证人公证人客户公证人服务器公证人服务器公证人签名人公证人签名人