运维笔记(二)—— 部署应用

安装了node环境之后,就开始部署代码的阶段了。

生成SSH公钥

大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。

SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录下。

在该目录下查看 something 和 something.pub 来命名的一对文件,这个 something 通常就是 id_dsa 或 id_rsa。有 .pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,或者干脆连 .ssh 目录都没有,可以用 ssh-keygen 来创建。该程序在 Linux/Mac 系统上由 SSH 包提供。

ssh-keygen -t rsa -b 4096 -C "xxxx@xx.com"  

生成了一对公私钥之后,要把共钥内容复制在git托管服务商那里(比如 github,bitbucket等等),具体如何操作参见服务商的文档。

将私钥添加到服务器上的 ssh-agent

eval "$(ssh-agent -s)"
ssh-add -k ~/.ssh/xxxx_rsa

之后就可以直接执行git clone了。

客户端证书验证

因为这次部署的是一个内部管理系统。为了安全性和后期管理的方便着想,我们使用了客户端向服务器发送证书来验证身份的方式登陆。

在创建客户端证书之前,我们需要自建一个CA(Certificate Authority)
首先我们来生成一个CA的密钥

openssl genrsa -out path/ca.key 2048

接着我们用这个 key 生成一个 CA 的证书

openssl req -new -x509 -key path/ca.key -out ca.crt

这里只是最简易版本的CA,如果想实现一个严谨的CA,请参考这篇文章 OpenSSL Certificate Authority

当然最好使用自己的 openssl 的 config 文件,组织好 CA 目录的层次,因为后期有很多管理命令会用到。

接着创建客户端证书,首先我们为客户端证书生成一个密钥

openssl genrsa -des3 -out path/users/user1.key 2048

接着使用这个密钥生成一个证书请求csr文件

openssl req -new -key path/users/user1.key -out path/users/user1.csr -config openssl.conf

然后使用ca的证书和key来签发这个客户端证书

openssl ca -in path/users/user1.csr -cert path/ca.crt -keyfile path/ca.key -out path/users/user1.crt -config openssl.conf

最后为客户端证书生成一个浏览器可识别的p12文件

openssl pkcs12 -export -clcerts -in path/users/user1.crt -inkey path/users/user1.key -out /path/users/user1.p12

最后在nginx的配置中加入这几个字段就可以实现客户端验证的功能了。

  ssl_crl                   /;
  ssl_client_certificate    /etc/nginx/certs/ca.crt;
  ssl_verify_client  on;

如果需要作废一个客户端证书

openssl ca -revoke clients/carrie.crt

然后重新生成crl (证书废弃列表)

openssl ca -gencrl -out intermediate/crl/intermediate.crl.pem\

验证一下客户端证书是否被真的作废:

 openssl verify -CAfile ca.crt demoCA/certs/bob@example.com.cert.pem

然后生成的 crl 文件上传服务器,并在nginx中加入ssl_crl 字段,地址指向服务器上的 crl 文件。

推荐阅读更多精彩内容