?
This document uses PHP Chinese website manual Release
此文檔適用于任何想要運(yùn)行自己的公證服務(wù)%28的人,例如那些希望使用帶有私人碼頭注冊(cè)中心%29的公證的人。運(yùn)行公證服務(wù)需要您已經(jīng)熟悉使用碼頭發(fā)動(dòng)機(jī)和碼頭組成...
用于測(cè)試和開(kāi)發(fā)目的的完整公證服務(wù)的最快方法是在公證工程...
$ git clone https://github.com/docker/notary.git $ cd notary $ docker-compose up
這將構(gòu)建開(kāi)發(fā)公證服務(wù)器和公證簽字人映像,并為公證服務(wù)器、公證簽字人和它們共享的MySQL數(shù)據(jù)庫(kù)啟動(dòng)容器。MySQL數(shù)據(jù)存儲(chǔ)在卷中。
公證服務(wù)器和公證人簽名者使用存儲(chǔ)庫(kù)%29中的自簽名測(cè)試證書(shū)在相互驗(yàn)證的TLS%28上進(jìn)行通信,公證服務(wù)器在端口4443上偵聽(tīng)HTTPS通信量。
默認(rèn)情況下,此開(kāi)發(fā)公證服務(wù)器容器使用測(cè)試自簽名的tls證書(shū)運(yùn)行.。為了能夠成功地連接到它,您必須在fixtures/root-ca.crt
...
例如,要使用OpenSSL進(jìn)行連接:
$ openssl s_client -connect <docker host>:4443 -CAfile fixtures/root-ca.crt -no_ssl3 -no_ssl2
若要使用公證客戶端CLI進(jìn)行連接,請(qǐng)參見(jiàn)開(kāi)始文件。請(qǐng)注意,公證服務(wù)器和簽字人的版本應(yīng)大于或等于公證客戶端CLI,以確保功能兼容性,即如果您使用的是公證客戶端CLI 0.2。確保您使用的服務(wù)器和簽名者使用的是與0.2相同或更高版本的標(biāo)記。
自簽名證書(shū)的主題名稱(chēng)和主題可選名稱(chēng)為notary-server
,,,notaryserver
,和localhost
,因此,如果您的Docker主機(jī)不在localhost%28上--例如,如果您使用的是DockerMachine%29,則需要更新主機(jī)文件,使其名稱(chēng)notary-server
與您的Docker主機(jī)的IP地址關(guān)聯(lián)。
公證服務(wù)器和公證簽字人JSON配置文件.預(yù)置圖像,如上面的發(fā)展圖像為您提供這些配置文件,并提供一些正常的默認(rèn)設(shè)置。
但是,對(duì)于在生產(chǎn)中運(yùn)行,或者如果您只想更改開(kāi)發(fā)服務(wù)上的默認(rèn)設(shè)置,您可能希望更改這些默認(rèn)值。
您可以覆蓋docker run
如果要傳遞不同的命令行選項(xiàng),則為圖像發(fā)出命令。公證服務(wù)器和公證人簽名者都采用以下命令行參數(shù):
-config=<config file>
-指定JSON配置文件的路徑。
-debug
-傳遞此標(biāo)志使調(diào)試服務(wù)器在localhost:8080
調(diào)試服務(wù)器提供pprof和費(fèi)瓦端點(diǎn)。%28請(qǐng)記住,對(duì)于正在運(yùn)行的容器,這是本地主機(jī)--此端點(diǎn)不會(huì)從容器%29公開(kāi)。
也可以在配置文件中設(shè)置此選項(xiàng)。
-logf=<format>
-此標(biāo)志設(shè)置日志的輸出格式??赡艿母袷绞恰癹son”和“l(fā)ogfmt”。
無(wú)法在配置文件中設(shè)置此選項(xiàng),因?yàn)槟承┤罩鞠⑹窃谧x取配置文件之前在啟動(dòng)時(shí)生成的。指定您自己的配置文件您完全可以使用自己的配置文件運(yùn)行映像。您只需掛載配置目錄,然后將該配置文件的路徑作為參數(shù)傳遞給docker run
命令。使用環(huán)境變量重寫(xiě)配置文件參數(shù)還可以通過(guò)設(shè)置窗體的環(huán)境變量來(lái)覆蓋配置的參數(shù)。NOTARY_SERVER_<var>
或NOTARY_SIGNER_<var>
...var
全帽子,"_"
-從配置JSON的頂層分隔鍵路徑。例如,如果您想重寫(xiě)公證服務(wù)器配置的存儲(chǔ)URL:"storage": {
"backend": "mysql",
"db_url": "dockercondemo:dockercondemo@tcp(notary-mysql)/dockercondemo"
}您需要設(shè)置環(huán)境變量。NOTARY_SERVER_STORAGE_DB_URL
,因?yàn)?code>db_url在storage
節(jié)中的公證服務(wù)器配置JSON。請(qǐng)注意,不能覆蓋值為另一個(gè)映射的鍵。例如,設(shè)置NOTARY_SERVER_STORAGE='{"storage": {"backend": "memory"}}'
不會(huì)設(shè)置內(nèi)存存儲(chǔ)。只是沒(méi)能解析。您只能覆蓋其值為字符串或數(shù)字的鍵。例如,假設(shè)您想運(yùn)行一個(gè)單獨(dú)的公證服務(wù)器實(shí)例:
帶著你自己的TLS證書(shū)和鑰匙
使用本地、內(nèi)存中的簽名器服務(wù),而不是使用公證簽名器。
使用本地、內(nèi)存中的tuf元數(shù)據(jù)存儲(chǔ)而不是使用mysql。
生成JSON格式的日志
這樣做的一種方法是:
生成您自己的TLS證書(shū)和密鑰,如server.crt
和server.key
,并將它們放在目錄中。/tmp/server-configdir
...
將以下配置文件寫(xiě)入/tmp/server-configdir/config.json
*
{“服務(wù)器”:{“http”[醫(yī)]地址“:”:“4443”,“TLS”[醫(yī)]鍵[醫(yī)]文件“:”./server.key“,”TLS“[醫(yī)]CERT[醫(yī)]文件“:”/server.crt“},”信任“[醫(yī)]服務(wù):{“類(lèi)型”:“遠(yuǎn)程”,“主機(jī)名”:“公證人”,“端口”:“7899”,“tls”[醫(yī)]鈣[醫(yī)]文件“:”./root-ca.crt“,”key“[醫(yī)]算法:“ecdsa”,“tls”[醫(yī)]客戶[醫(yī)]證書(shū):./公證-Server.crt“,”TLS“[醫(yī)]客戶[醫(yī)]鍵“:”...“.公證-Server.key”},“存儲(chǔ)”:{“后端”:“MySQL”,“db”[醫(yī)]服務(wù)器@tcp%28 mysql:3306%29/notaryserver?parseTime=True}
請(qǐng)注意,我們包括遠(yuǎn)程信任服務(wù)和數(shù)據(jù)庫(kù)存儲(chǔ)類(lèi)型,以演示環(huán)境變量如何覆蓋配置參數(shù)。
假設(shè)您已經(jīng)構(gòu)建或調(diào)出了公證服務(wù)器??坑诚?29,則運(yùn)行以下命令%28:
$docker run\-p“4443:4443”\-v/tmp/server-configdir:/etc/docker/公證-server/\-e公證[醫(yī)]服務(wù)器[醫(yī)]信托[醫(yī)]服務(wù)[醫(yī)]類(lèi)型=本地\-e公證人[醫(yī)]服務(wù)器[醫(yī)]儲(chǔ)物[醫(yī)]后端=內(nèi)存\-e公證[醫(yī)]服務(wù)器[醫(yī)]測(cè)井[醫(yī)]級(jí)=調(diào)試\公證[醫(yī)]server\-config=/etc/docker/notra-server/config.json\-logf=json{“l(fā)evel”:“info”,“msg”:“version:0.2,Git COMMIT:619f8cf”,“Time”:“2016-02-25T00:53:59Z”}{“l(fā)evel”:“info”,“msg”:“使用本地簽名服務(wù),這需要ED25519。忽略所有其他信任[醫(yī)]服務(wù)參數(shù),包括keyAlgorithm“、”time“:”2016-02-25T00:53:59Z“}{”level“:”info“、”msg“:”使用內(nèi)存后端“、”時(shí)間“:”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“您可以使用碼頭組成通過(guò)設(shè)置卷、環(huán)境變量和重寫(xiě)組成文件中公證服務(wù)器容器的默認(rèn)命令。在生產(chǎn)中部署的建議在從開(kāi)發(fā)轉(zhuǎn)向生產(chǎn)時(shí),必須考慮許多因素,以確保安全性和可伸縮性。證書(shū)公證存儲(chǔ)庫(kù)將樣例證書(shū)包含在固定目錄中。當(dāng)您使用所提供的docker-Compose.yml文件初始化開(kāi)發(fā)服務(wù)時(shí),這些示例證書(shū)將用于創(chuàng)建更類(lèi)似于生產(chǎn)的環(huán)境。你必須獲得你的自己證書(shū)在生產(chǎn)部署中使用。公證存儲(chǔ)庫(kù)中的示例私鑰文件顯然是公共知識(shí),在生產(chǎn)部署中使用它們是高度不安全的。證書(shū)目錄公證是一個(gè)基于用戶/客戶端的系統(tǒng),它在用戶的主目錄中搜索證書(shū),~/.docker/trust
.要從命令行簡(jiǎn)化使用公證,請(qǐng)創(chuàng)建一個(gè)別名,該別名映射用戶的trust
目錄到系統(tǒng)的ca-certificates
目錄。$ alias notary="notary -s https://<dtr-url> -d ~/.docker/trust --tlscacert /usr/local/share/ca-certificates/<dtr-url>.crt"數(shù)據(jù)庫(kù)服務(wù)器和簽名者都需要一個(gè)數(shù)據(jù)庫(kù)。這些應(yīng)該是具有不同用戶的單獨(dú)數(shù)據(jù)庫(kù)。用戶的權(quán)限應(yīng)該受到限制。我們建議將以下MySQL%28或等效的%29權(quán)限授予僅限于自己數(shù)據(jù)庫(kù)的用戶:
公證服務(wù)器數(shù)據(jù)庫(kù)用戶:SELECT, INSERT, UPDATE, DELETE
公證人簽署人數(shù)據(jù)庫(kù)用戶:SELECT, INSERT, DELETE
大多數(shù)生產(chǎn)用戶都希望通過(guò)運(yùn)行服務(wù)器和簽名應(yīng)用程序的多個(gè)實(shí)例來(lái)提高可用性。這些可以任意和獨(dú)立地進(jìn)行縮放。數(shù)據(jù)庫(kù)也可以獨(dú)立地進(jìn)行縮放,但這是留給有經(jīng)驗(yàn)的DBA和運(yùn)營(yíng)團(tuán)隊(duì)使用的。典型的部署將如下圖所示:
二次
二次
在圖中,負(fù)載平衡器將外部通信量路由到公證服務(wù)器實(shí)例集群。如果需要%29簽名,或者需要b%29密鑰生成,這些用戶可以向公證人簽名實(shí)例發(fā)出請(qǐng)求。從公證服務(wù)器到公證簽字人集群的請(qǐng)求是通過(guò)內(nèi)部負(fù)載均衡器進(jìn)行路由器的。
公證可以與CDN或其他緩存系統(tǒng)一起使用。所有對(duì)JSON文件的GET請(qǐng)求都可能被無(wú)限期緩存除URL匹配:
*/root.json
*/timestamp.json
對(duì)JSON文件的所有其他請(qǐng)求都包括正在請(qǐng)求的文件的sha256校驗(yàn)和,因此是不可變的。對(duì)JSON文件的請(qǐng)求占所有公證請(qǐng)求的絕大多數(shù)。對(duì)JSON文件的GET以外的任何請(qǐng)求都不應(yīng)該緩存。
公證服務(wù)體系結(jié)構(gòu)
公證配置文件
? 2017 Docker, Inc.
根據(jù)ApacheLicense,版本2.0獲得許可。
Docker和Docker標(biāo)志是Docker公司在美國(guó)和/或其他國(guó)家的商標(biāo)或注冊(cè)商標(biāo)。
Docker,Inc.和其他各方也可以在這里使用的其他術(shù)語(yǔ)中擁有商標(biāo)權(quán)。