使用Docker生成SSL證書
當聽到“Docker”和“SSL”這兩個詞的時候,你很可能會認為是在說創建SSL證書來保護Docker daemon本身。這很重要但是已經有很多文章詳細介紹過了。或者你可能認為我們在討論創建SSL證書供容器化的應用程序使用。如果你使用第三方工具(比如 這種 和 這種工具 )這也很簡單。但是你知道嗎,還可以使用Docker容器來為主機創建SSL證書?
使用Docker生成SSL證書
使用Docker生成SSL證書大多數開發人員并沒有想這么做過。但是這么做很簡潔也很方便。你可能會問為什么會想用Docker容器來為主機生成SSL證書呢。為什么不能在主機上完成呢?
是的,可以在主機上完成。但是你必須已經在主機上安裝了正確的工具(比如OpenSSL)。并且如果你想讓Docker服務器盡可能簡潔的話,你很可能不想安裝類似OpenSSl這樣的工具。另外,你可能并不是使用的生產環境Docker服務器,而是使用的Docker測試環境。如果你和我一樣,那么這個測試環境實際上就是你的個人筆記本,很可能沒有安裝OpenSSL或者其他服務器工具。
的確,我也可以apt-get來安裝openssl包(或者apache2-utils),但是我不想把我的筆記本變成服務器。最重要的是,我想讓事情盡可能簡潔。這也正是容器一開始就這么吸引人的主要原因。
從Docker容器生成SSL證書
不在主機上生成證書,而是使用Docker容器生成SSL證書,這對我來說很好。也很簡單,按照如下步驟即可。
首先,使用Docker Hub Nginx 鏡像拉取一個支持SSL證書創建的容器鏡像。該鏡像已經內建安裝了OpenSSL。(如果你的鏡像沒有包含OpenSSL,可以自行安裝到鏡像里,或者更簡單地在啟動容器時進行安裝)。
示例命令:
docker pull nginx
接下來,需要創建私鑰和證書簽署請求:
docker run -v $PWD:/work -it nginx openssl req -out /work/CSR.csr -new
-newkey rsa:2048 -nodes -keyout /work/privateKey.key
現在可以看到主機上的working目錄包含文件privateKey.key和CSR.csr。如果想要使用它們創建自簽名的證書,運行如下命令:
docker run -v $PWD:/work -it nginx openssl req -x509 -sha256 -nodes
-days 365 -newkey rsa:2048 -keyout privateKey.key -out
/work/certificate.crt
現在主機的working目錄已經有了簽名的證書, certificate.crt。
好啦。我們已經使用OpenSSL創建出了SSL證書,而實際上并沒有在主機系統上運行OpenSSL。
更進一步
使用上述命令還可以做更多事情。實際上,如果想要為Docker主機或者容器自動化SSL證書的創建,可以將這些命令集成進Dockerfile,然后使用它在使用Codefresh創建的容器化應用里構建SSL證書的創建。
來自:http://dockone.io/article/1789