https双向证书配置自签证书和购买的ca证书

Nginx的安装

  1. 下载nginx源码包。此次使用的是nginx-1.8.1.tar.gz
  2. 解压安装包。解压命令 tar -xvf nginx-1.8.1.tar.gz
  3. 进入解压包,检测环境。./configure –prefix=/etc/nginx –with-http_ssl_module
  4. 编译make
  5. 安装make install

证书生成

  1. 服务端证书制作。前提安装好openssl,如果没有安装则使用yum -y install install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel。
  2. 在nginx目录中创建keys目录,存放证书。进入keys目录
  3. 创建CA私钥 openssl genrsa -out ca.key 2048
  4. openssl req -new -x509 -days 36500 -key ca.key -out ca.crt

制作服务端证书:

  1. 还是在nginx的ke目录
  2. 创建服务端私钥
    openssl genrsa -out server.pem 2048
    openssl rsa -in server.pem -out server.key
  3. 生成签发请求openssl req -new -key server.pem -out server.csr
  4. 使用CA证书进行签发
    openssl x509 -req -sha256 -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 36500 -out server.crt
  5. 验证签发证书是否正确openssl verify -CAfile ca.crt server.crt
  6. 制作p12证书(导入浏览器)openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.p12

客户端证书制作

  1. 还是在nginx的ke目录
  2. 创建服务端私钥
    openssl genrsa -out client.pem 2048
    openssl rsa -in client.pem -out client.key
  3. 生成签发请求openssl req -new -key client.pem -out client.csr
  4. 使用CA证书进行签发
    openssl x509 -req -sha256 -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 36500 -out client.crt
  5. 验证签发证书是否正确openssl verify -CAfile ca.crt client.crt
  6. 制作p12证书(导入浏览器)openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

生成IOS需要的证书

IOS客户端需要服务证书的公钥,首先将server.p12导入到IE浏览器中。可以导出终端需要的证书类型cer。编码类型为base64编码,生成server.cer。为终端输出client.p12 server.cer


生成安卓需要的证书

  1. 使用jdk自带的keytool工具生成证书,需要额外导入一个jar包bcprov-ext-jdk15on-151.jar。此jar包导入到JAVA_HOME/jre/lib/ext下
  2. 生成bks证书keytool -importkeystore -srckeystore server.p12 -srcstoretype pkcs12 -destkeystore server.bks -deststoretype bks -provider org .bouncycastle.jce.provider.
    BouncyCastleProvider
  3. 验证bks证书keytool -list -keystore server.bks -provider org.bouncycastle.jce.provider.
    BouncyCastleProvider -storetype BKS -storepass 密码
  4. 为安卓用户输出client.p12 server.bks。

注意

生成上述三个证书文件的时候common name不能重复。
如果出现java.security.InvalidKeyException: Illegal key size需要替换JAVAHOME/jre/lib/security 下的两个jar包


开启nginx ssl功能

  1. nginx/conf/nginx.conf文件server节点增加如下配置
    ssl on; #开启ssl功能
    ssl_certificate /etc/nginx/keys/server.crt; #服务端的签发证书
    ssl_certificate_key /etc/nginx/keys/server.key; #服务端的私钥
    ssl_client_certificate /etc/nginx/keys/ca.crt; #根证书公钥
    ssl_verify_client on; #开启对终端的验证
    ssl_protocols TLSv1.2; #支持的TLS协议
    ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL'; #加密套件

注意:

  1. 如果完全是自己签名的证书按照以上证书生成规则和Nginx配置即可
  2. 如果使用ca机构颁发的证书ssl_certificate ssl_certificate_key 使用ca机构颁发的证书
    客户端证书ssl_client_certificate使用自己生成的证书即可。
  3. crt 证书转cer openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der
  4. 使用httpclient的https双向认证出现400 No required SSL certificate was sent,可能的原因为单个ip绑定多个域名多套证书,httpclient4.3.1及一下版本时不支持的,需要提升httpclient版本
  5. 域名加上端口session过期时,重新刷新页面后端口被改为80
    location /test/ {
    proxy_pass http://mgt;
    client_max_body_size 10m;
    proxy_set_header Host $host:19001;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值