zoukankan      html  css  js  c++  java
  • Nginx配置https双向认证

    1.      前期的准备工作:

    安装openssl和nginx的https模块

    cd  ~/
    mkdir ssl
    cd ssl
    mkdir demoCA
    cd demoCA
    mkdir newcerts
    mkdir private
    touch index.txt
    echo '01' > serial

    2.      制作CA证书(这个是信任的起点,根证书,所有其他的证书都要经过CA的私钥签名)。

    生成 CA私钥: ca.key

    命令:openssl genrsa -des3 -out ca.key 2048

    这样是生成rsa私钥,`des3`算法,openssl格式,2048位强度。`ca.key`是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。

    另外可以通过以下方法生成没有密码的key:

      

    openssl rsa -in ca.key -out ca_decrypted.key

    生成 CA根证书的公钥 ca.crt

    openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

    3.      制作网站的https证书,并用CA签名认证。

    假设我们需要为 test.com 域名制作证书,先生成 test.com的证书私钥 test.com.pem。

       命令:

    openssl genrsa -des3 -out test.com.pem 1024

       生成无密码的私钥:

    openssl rsa -in test.com.pem -out test.com.key

    生成 csr 签名请求:

    openssl req -new -key test.com.pem -out test.com.csr

    这里需要输入国家,地区,组织,email等。最重要的是**common name**,可以写你的名字或者域名。如果为了 https 申请,这个必须和域名一样,即,这里要写test.com,否则会引发浏览器警报,这里可以用 *.test.com 来做泛域名证书。

    最后要用CA证书进行签名:

    openssl ca -policy policy_anything -days 1460 -cert ./demoCA/ca.crt -keyfile ./demoCA/ca.key -in test.com.csr -out test.com.crt

    把 ca.crt 的内容追加到 test.com.crt后面,因为有些浏览似乎不支持:

    cat demoCA/ca.crt>> test.com.crt

    4.      制作客户端证书(跟制作网站的证书模式一样):

    准备客户端私钥:

    openssl genrsa -des3 -out clent.pem 2048
    生成客户端证书请求:
    openssl req -new -key client.pem -out client-req.csr

    CA签名客户端证书请求

    openssl ca -policy policy_anything -days 1460 -cert ca.crt  -keyfile ca.key -in client-req.csr -out client.crt
    客户端证书CRT转换为 PKCS #12格式(全称应该叫做 Personal Information Exchange,通常以 p12作为后缀):
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.pem -out client.p12

    点击刚才生成的p12文件输入证书的密码将安装。

    5.      nginx配置

    server {
      listen 443;
      server_name test.com www.test.com;
     
      root html;
      index index.html index.htm;
     
      ssl on;                                     #开启ssl
      ssl_certificate  /PATH/TO/test.com.crt;    #服务器证书位置
      ssl_certificate_key /PATH/TO/test.com.key;  #服务器私钥
      ssl_client_certificate /home/zhangyong/key/ca.crt;     #CA证书用于验证客户端证书的合法性
     
      ssl_verify_client       on;                      #开启对客户端的验证
     
      ssl_session_timeout 5m;                        #session有效期,5分钟
     
      ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
      ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';       #加密算法
      ssl_prefer_server_ciphers on;
     
      location / {
        try_files $uri $uri/ =404;
      }      
    }

    6.      测试

    当将一切都设置好,将 nginx启动成功后,就可以打开 IE来访问了,第一次访问,浏览器会询问双向认证时使用的证书,类似下图

     

    注意:服务器和客户端的在输入common server时,不要重名

  • 相关阅读:
    一张图告诉你为什么是服务网关,文末有现金抽奖。
    Java中的宏变量,宏替换详解。
    Java中创建String的两道面试题及详解
    JSON Web Token (JWT),服务端信息传输安全解决方案。
    jdk紧急漏洞,XMLDecoder反序列化攻击
    Java对象引用四个级别(强、软、弱、虚)
    Java7任务并行执行神器:Fork&Join框架
    (2)Django-pycharm部署
    批处理编写
    (1)Django安装
  • 原文地址:https://www.cnblogs.com/Mr-Rocker/p/6555270.html
Copyright © 2011-2022 走看看