使用Docker生成SSL证书

KarenCatron 8年前
   <p>当听到“Docker”和“SSL”这两个词的时候,你很可能会认为是在说创建SSL证书来保护Docker daemon本身。这很重要但是已经有很多文章详细介绍过了。或者你可能认为我们在讨论创建SSL证书供容器化的应用程序使用。如果你使用第三方工具(比如 <a href="/misc/goto?guid=4959722756041866504" rel="nofollow,noindex">这种</a> 和 <a href="/misc/goto?guid=4959722756114190016" rel="nofollow,noindex">这种工具</a> )这也很简单。但是你知道吗,还可以使用Docker容器来为主机创建SSL证书?</p>    <h3>使用Docker生成SSL证书</h3>    <p>使用Docker生成SSL证书大多数开发人员并没有想这么做过。但是这么做很简洁也很方便。你可能会问为什么会想用Docker容器来为主机生成SSL证书呢。为什么不能在主机上完成呢?</p>    <p>是的,可以在主机上完成。但是你必须已经在主机上安装了正确的工具(比如OpenSSL)。并且如果你想让Docker服务器尽可能简洁的话,你很可能不想安装类似OpenSSl这样的工具。另外,你可能并不是使用的生产环境Docker服务器,而是使用的Docker测试环境。如果你和我一样,那么这个测试环境实际上就是你的个人笔记本,很可能没有安装OpenSSL或者其他服务器工具。</p>    <p>的确,我也可以apt-get来安装openssl包(或者apache2-utils),但是我不想把我的笔记本变成服务器。最重要的是,我想让事情尽可能简洁。这也正是容器一开始就这么吸引人的主要原因。</p>    <h3>从Docker容器生成SSL证书</h3>    <p>不在主机上生成证书,而是使用Docker容器生成SSL证书,这对我来说很好。也很简单,按照如下步骤即可。</p>    <p>首先,使用Docker Hub <a href="/misc/goto?guid=4958983814302627342" rel="nofollow,noindex">Nginx</a> 镜像拉取一个支持SSL证书创建的容器镜像。该镜像已经内建安装了OpenSSL。(如果你的镜像没有包含OpenSSL,可以自行安装到镜像里,或者更简单地在启动容器时进行安装)。</p>    <p>示例命令:</p>    <p>docker pull nginx</p>    <p>接下来,需要创建私钥和证书签署请求:</p>    <pre>  <code class="language-groovy">docker run -v $PWD:/work -it nginx openssl req -out /work/CSR.csr -new     -newkey rsa:2048 -nodes -keyout /work/privateKey.key  </code></pre>    <p>现在可以看到主机上的working目录包含文件privateKey.key和CSR.csr。如果想要使用它们创建自签名的证书,运行如下命令:</p>    <pre>  <code class="language-groovy">docker run -v $PWD:/work -it nginx openssl req -x509 -sha256 -nodes     -days 365 -newkey rsa:2048 -keyout privateKey.key -out     /work/certificate.crt  </code></pre>    <p>现在主机的working目录已经有了签名的证书, certificate.crt。</p>    <p>好啦。我们已经使用OpenSSL创建出了SSL证书,而实际上并没有在主机系统上运行OpenSSL。</p>    <h3>更进一步</h3>    <p>使用上述命令还可以做更多事情。实际上,如果想要为Docker主机或者容器自动化SSL证书的创建,可以将这些命令集成进Dockerfile,然后使用它在使用Codefresh创建的容器化应用里构建SSL证书的创建。</p>    <p> </p>    <p>来自:http://dockone.io/article/1789</p>    <p> </p>