©
本文档使用
php.cn手册 发布
此文档适用于任何想要运行自己的公证服务%28的人,例如那些希望使用带有私人码头注册中心%29的公证的人。运行公证服务需要您已经熟悉使用码头发动机和码头组成...
用于测试和开发目的的完整公证服务的最快方法是在公证工程...
$ git clone https://github.com/docker/notary.git $ cd notary $ docker-compose up
这将构建开发公证服务器和公证签字人映像,并为公证服务器、公证签字人和它们共享的MySQL数据库启动容器。MySQL数据存储在卷中。
公证服务器和公证人签名者使用存储库%29中的自签名测试证书在相互验证的TLS%28上进行通信,公证服务器在端口4443上侦听HTTPS通信量。
默认情况下,此开发公证服务器容器使用测试自签名的tls证书运行.。为了能够成功地连接到它,您必须在fixtures/root-ca.crt
...
例如,要使用OpenSSL进行连接:
$ openssl s_client -connect <docker host>:4443 -CAfile fixtures/root-ca.crt -no_ssl3 -no_ssl2
若要使用公证客户端CLI进行连接,请参见开始文件。请注意,公证服务器和签字人的版本应大于或等于公证客户端CLI,以确保功能兼容性,即如果您使用的是公证客户端CLI 0.2。确保您使用的服务器和签名者使用的是与0.2相同或更高版本的标记。
自签名证书的主题名称和主题可选名称为notary-server
,,,notaryserver
,和localhost
,因此,如果您的Docker主机不在localhost%28上--例如,如果您使用的是DockerMachine%29,则需要更新主机文件,使其名称notary-server
与您的Docker主机的IP地址关联。
公证服务器和公证签字人JSON配置文件.预置图像,如上面的发展图像为您提供这些配置文件,并提供一些正常的默认设置。
但是,对于在生产中运行,或者如果您只想更改开发服务上的默认设置,您可能希望更改这些默认值。
您可以覆盖docker run
如果要传递不同的命令行选项,则为图像发出命令。公证服务器和公证人签名者都采用以下命令行参数:
-config=<config file>
-指定JSON配置文件的路径。
-debug
-传递此标志使调试服务器在localhost:8080
调试服务器提供pprof和费瓦端点。%28请记住,对于正在运行的容器,这是本地主机--此端点不会从容器%29公开。
也可以在配置文件中设置此选项。
-logf=<format>
-此标志设置日志的输出格式。可能的格式是“json”和“logfmt”。
无法在配置文件中设置此选项,因为某些日志消息是在读取配置文件之前在启动时生成的。指定您自己的配置文件您完全可以使用自己的配置文件运行映像。您只需挂载配置目录,然后将该配置文件的路径作为参数传递给docker run
命令。使用环境变量重写配置文件参数还可以通过设置窗体的环境变量来覆盖配置的参数。NOTARY_SERVER_<var>
或NOTARY_SIGNER_<var>
...var
全帽子,"_"
-从配置JSON的顶层分隔键路径。例如,如果您想重写公证服务器配置的存储URL:"storage": {
"backend": "mysql",
"db_url": "dockercondemo:dockercondemo@tcp(notary-mysql)/dockercondemo"
}您需要设置环境变量。NOTARY_SERVER_STORAGE_DB_URL
,因为db_url
在storage
节中的公证服务器配置JSON。请注意,不能覆盖值为另一个映射的键。例如,设置NOTARY_SERVER_STORAGE='{"storage": {"backend": "memory"}}'
不会设置内存存储。只是没能解析。您只能覆盖其值为字符串或数字的键。例如,假设您想运行一个单独的公证服务器实例:
带着你自己的TLS证书和钥匙
使用本地、内存中的签名器服务,而不是使用公证签名器。
使用本地、内存中的tuf元数据存储而不是使用mysql。
生成JSON格式的日志
这样做的一种方法是:
生成您自己的TLS证书和密钥,如server.crt
和server.key
,并将它们放在目录中。/tmp/server-configdir
...
将以下配置文件写入/tmp/server-configdir/config.json
*
{“服务器”:{“http”[医]地址“:”:“4443”,“TLS”[医]键[医]文件“:”./server.key“,”TLS“[医]CERT[医]文件“:”/server.crt“},”信任“[医]服务:{“类型”:“远程”,“主机名”:“公证人”,“端口”:“7899”,“tls”[医]钙[医]文件“:”./root-ca.crt“,”key“[医]算法:“ecdsa”,“tls”[医]客户[医]证书:./公证-Server.crt“,”TLS“[医]客户[医]键“:”...“.公证-Server.key”},“存储”:{“后端”:“MySQL”,“db”[医]服务器@tcp%28 mysql:3306%29/notaryserver?parseTime=True}
请注意,我们包括远程信任服务和数据库存储类型,以演示环境变量如何覆盖配置参数。
假设您已经构建或调出了公证服务器停靠映像%29,则运行以下命令%28:
$docker run\-p“4443:4443”\-v/tmp/server-configdir:/etc/docker/公证-server/\-e公证[医]服务器[医]信托[医]服务[医]类型=本地\-e公证人[医]服务器[医]储物[医]后端=内存\-e公证[医]服务器[医]测井[医]级=调试\公证[医]server\-config=/etc/docker/notra-server/config.json\-logf=json{“level”:“info”,“msg”:“version:0.2,Git COMMIT:619f8cf”,“Time”:“2016-02-25T00:53:59Z”}{“level”:“info”,“msg”:“使用本地签名服务,这需要ED25519。忽略所有其他信任[医]服务参数,包括keyAlgorithm“、”time“:”2016-02-25T00:53:59Z“}{”level“:”info“、”msg“:”使用内存后端“、”时间“:”2016-02-25T00:53:59Z“}{”level“:”info“、”msg“:”start Server“、”time“:”2016-02-25T00:53:59Z“{”Level“:”info“、”msg“:”启用TLS“、”Time“:”2016-02-25T00:53}}}“}{”info“您可以使用码头组成通过设置卷、环境变量和重写组成文件中公证服务器容器的默认命令。在生产中部署的建议在从开发转向生产时,必须考虑许多因素,以确保安全性和可伸缩性。证书公证存储库将样例证书包含在固定目录中。当您使用所提供的docker-Compose.yml文件初始化开发服务时,这些示例证书将用于创建更类似于生产的环境。你必须获得你的自己证书在生产部署中使用。公证存储库中的示例私钥文件显然是公共知识,在生产部署中使用它们是高度不安全的。证书目录公证是一个基于用户/客户端的系统,它在用户的主目录中搜索证书,~/.docker/trust
.要从命令行简化使用公证,请创建一个别名,该别名映射用户的trust
目录到系统的ca-certificates
目录。$ alias notary="notary -s https://<dtr-url> -d ~/.docker/trust --tlscacert /usr/local/share/ca-certificates/<dtr-url>.crt"数据库服务器和签名者都需要一个数据库。这些应该是具有不同用户的单独数据库。用户的权限应该受到限制。我们建议将以下MySQL%28或等效的%29权限授予仅限于自己数据库的用户:
公证服务器数据库用户:SELECT, INSERT, UPDATE, DELETE
公证人签署人数据库用户:SELECT, INSERT, DELETE
大多数生产用户都希望通过运行服务器和签名应用程序的多个实例来提高可用性。这些可以任意和独立地进行缩放。数据库也可以独立地进行缩放,但这是留给有经验的DBA和运营团队使用的。典型的部署将如下图所示:
二次
二次
在图中,负载平衡器将外部通信量路由到公证服务器实例集群。如果需要%29签名,或者需要b%29密钥生成,这些用户可以向公证人签名实例发出请求。从公证服务器到公证签字人集群的请求是通过内部负载均衡器进行路由器的。
公证可以与CDN或其他缓存系统一起使用。所有对JSON文件的GET请求都可能被无限期缓存除URL匹配:
*/root.json
*/timestamp.json
对JSON文件的所有其他请求都包括正在请求的文件的sha256校验和,因此是不可变的。对JSON文件的请求占所有公证请求的绝大多数。对JSON文件的GET以外的任何请求都不应该缓存。
公证服务体系结构
公证配置文件
© 2017 Docker, Inc.
根据ApacheLicense,版本2.0获得许可。
Docker和Docker标志是Docker公司在美国和/或其他国家的商标或注册商标。
Docker,Inc.和其他各方也可以在这里使用的其他术语中拥有商标权。