nginx ssl 双向认证

来源:互联网 发布:新南威尔士奖学金知乎 编辑:程序博客网 时间:2024/05/21 12:50

一、安装Nginx和OpenSSL

  • yum install nginx openssl -y

二、SSL 服务器 / 客户端双向验证证书的生成

  • 创建一个新的 CA 根证书,在 nginx 安装目录下新建 ca 文件夹,进入 ca,创建几个子文件夹
mkdir ca && cd ca  mkdir newcerts private conf server# newcerts 子目录将用于存放 CA 签署过的数字证书(证书备份目录);private 用于存放 CA 的私钥;conf 目录用于存放一些简化参数用的配置文件;server 存放服务器证书文件。
  • conf 目录新建 openssl.conf 文件
[ ca ] default_ca      = foo                   # The default ca section [ foo ] dir            = ./         # top dir  database       = ./index.txt          # index file.  new_certs_dir  = ./newcerts           # new certs dir certificate    = ./private/ca.crt         # The CA cert  serial         = ./serial             # serial no file  private_key    = ./private/ca.key  # CA private key  RANDFILE       = ./private/.rand      # random number file default_days   = 365                     # how long to certify for  default_crl_days= 30                     # how long before next CRL  default_md     = sha1                     # message digest method to use  unique_subject = no                      # Set to 'no' to allow creation of                                           # several ctificates with same subject. policy         = policy_any              # default policy [ policy_any ] countryName = match  stateOrProvinceName = match  organizationName = match  organizationalUnitName = match  localityName            = optional  commonName              = supplied  emailAddress            = optional  
  • 生成私钥 key 文件
openssl genrsa -out private/ca.key 2048  输出Generating RSA private key, 2048 bit long modulus  .......+++.........................+++e is 65537 (0x10001)  private 目录下有 ca.key 文件生成。  
  • 生成证书请求 csr 文件
openssl req -new -key private/ca.key -out private/ca.csr  
  • 生成凭证 crt 文件
openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt  private 目录下有 ca.crt 文件生成。  
  • 为我们的 key 设置起始序列号和创建 CA 键库
echo FACE > serial  #可以是任意四个字符touch index.txt  
  • 为 "用户证书" 的移除创建一个证书撤销列表
openssl ca -gencrl -out ./private/ca.crl -crldays 7 -config "./conf/openssl.conf"  # 输出Using configuration from ./conf/openssl.conf  private 目录下有 ca.crl 文件生成。  

三、服务器证书的生成

  • 创建一个 key
openssl genrsa -out server/server.key 2048  
  • 为我们的 key 创建一个证书签名请求 csr 文件
openssl req -new -key server/server.key -out server/server.csr  
  • 使用我们私有的 CA key 为刚才的 key 签名
openssl ca -in server/server.csr -cert private/ca.crt -keyfile private/ca.key -out server/server.crt -config "./conf/openssl.conf"  # 输出Using configuration from ./conf/openssl.conf  Check that the request matches the signature  Signature ok  The Subject's Distinguished Name is as follows  countryName           :PRINTABLE:'CN'  stateOrProvinceName   :ASN.1 12:'GuangDong'  localityName          :ASN.1 12:'GuangZhou'  organizationName      :ASN.1 12:'le****'  organizationalUnitName:ASN.1 12:'dev'  commonName            :ASN.1 12:'le***'  emailAddress          :IA5STRING:'****@gmail.com'  Certificate is to be certified until Mar 19 07:37:02 2017 GMT (365 days)  Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]y  Write out database with 1 new entries  Data Base Updated  注:签名信息每次必须输入一致

四、客户端证书的生成 * 创建存放 key 的目录 users

mkdir users  


* 为用户创建一个 key

openssl genrsa -des3 -out ./users/client.key 2048  输出:Enter pass phrase for ./users/client.key:123  Verifying - Enter pass phrase for ./users/client.key:123  #要求输入 pass phrase,这个是当前 key 的口令,以防止本密钥泄漏后被人盗用。两次输入同一个密码(比如我这里输入 123),users 目录下有 client.key 文件生成。
  • 为 key 创建一个证书签名请求 csr 文件
openssl req -new -key ./users/client.key -out ./users/client.csr  #users 目录下有 client.csr 文件生成。
  • 使用我们私有的 CA key 为刚才的 key 签名
openssl ca -in ./users/client.csr -cert ./private/ca.crt -keyfile ./private/ca.key -out ./users/client.crt -config "./conf/openssl.conf"  
  • 将证书转换为大多数浏览器都能识别的 PKCS12 文件
openssl pkcs12 -export -clcerts -in ./users/client.crt -inkey ./users/client.key -out ./users/client.p12  输出Enter pass phrase for ./users/client.key:  Enter Export Password:  Verifying - Enter Export Password:  输入密码后,users 目录下有 client.p12 文件生成。

五、Nginx配置

  • vhosts.xxx.conf 在 server { }段国入如下代码
        listen       443;         server_name  localhost;         ssi on;         ssi_silent_errors on;         ssi_types text/shtml;         ssl                  on;         ssl_certificate      /usr/local/nginx/ca/server/server.crt;         ssl_certificate_key  /usr/local/nginx/ca/server/server.key;         ssl_client_certificate /usr/local/nginx/ca/private/ca.crt;         ssl_session_timeout  5m;         ssl_verify_client on;  #开户客户端证书验证         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDH:AES:HIGH:!aNULL:!MD5:!ADH:!DH;        ssl_prefer_server_ciphers   on; 
  • 重新启动Nginx

吊销客户端证书
openssl ca -revoke users/client.crt -cert private/ca.crt -keyfile private/ca.key -config "./conf/openssl.conf"
openssl ca -gencrl -out private/ca.crl -config "./conf/openssl.conf"
可通过openssl verify -crl_check -CRLfile private/ca.crl -CAfile private/ca.crt client.crt 验证是否被吊销

六、客户端访问验证

  • 谷歌打开 https://myops.imdst.com

* 这是因为 https 双向验证需要客户端安装证书。拿到生成的客户端证书 client.p12,直接双击它,进入 "证书导入向导": 
导入证书,直接双击下一步,下一步,输入密码,下一步,导入完成。重新打开浏览器测试

  • MAC下需要手动添加为信任钥匙串,并使用safari打开测试

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 将军令全部的序列号都忘记了怎么办 船员证被公司压着想自己换证怎么办 电子录入系统中无法打开影像怎么办 火车票退票后说银行退款失败怎么办 苹果4s玩游戏闪退怎么办 买了二手房原房主不迁户口怎么办 苹果禁反忘记工id密码了怎么办 玩英雄联盟用腾讯游戏平台卡怎么办 游戏代练接单了没有给我账号怎么办 华为手机进入设置立即闪退怎么办 股东发现公司有做假账现象怎么办 中国在服役期间有纹身被发现怎么办 脚碰了肿了紫了怎么办 外阴出血了怎么办去医院检查没问题 三个半月宝宝体检脚有的紧怎么办 肛门被红枣核刺了一个洞怎么办 肛门里面有棉签上的棉花怎么办 孩子裤子沾屎怎么洗下来怎么办 做完痔疮手术后有点肛门狭窄怎么办 孕妇做b超宝宝不配合怎么办 怀孕产检医生问的尴尬怎么办 带着节育环做的核磁怎么办 便秘洗肠后最一周未排便怎么办 用了开塞露后肚子疼拉不出来怎么办 冰点脱毛当天用沐浴露洗澡了怎么办 自体脂肪填充脸部但发红又痒怎么办 金矿受伤死亡不给开死亡证明怎么办 手机欠费了导致没信号了怎么办 金立手机指纹硬件无法使用怎么办 试管取卵医生说卵子碎片多怎么办 取卵腹水抽水后尿不通怎么办 手机锁屏密码忘了怎么办求解锁 苹果手表锁屏密码忘记了怎么办 苹果手表锁屏密码忘了怎么办 电脑输密码时点了用户账户怎么办 w7电脑锁屏密码忘记了怎么办 台式电脑w7锁屏密码忘记了怎么办 win7电脑锁屏密码忘记了怎么办 苹果手机4s开机密码忘记了怎么办 苹果4s下载东西忘记密码怎么办 苹果4s不记得开机密码怎么办?