Nginx配置SSL证书-双向认证(HTTP转HTTPS)(可以参考,但是没看明白)

194 篇文章 18 订阅
27 篇文章 2 订阅

1.生成双向证书(server服务端,ca客户端)

1.1.openss生成所需证书

::==================生成服务器私钥==================
openssl genrsa -out server.key -passout pass:Abc123 2048
::生成服务器证书请求文件:
openssl req -new -key server.key -passin pass:Abc123 -out server.csr -subj "/CN=*.test.com/OU=xx Club/O=dy/L=nb/ST=Beijing/C=CN"
::==================生成服务器公钥证书(单向认证时使用)==================
openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650

::==================生成CA私钥==================
openssl genrsa -out ca.key -passout pass:123456 2048
::生成CA公钥证书及CA私钥转换p12(浏览器需要安装此证书,否则无法访问服务)
openssl req -new -x509 -key ca.key -passin pass:123456 -out ca.crt -days 3650 -subj "/CN=*.test.com/OU=xx Club/O=dy/L=nb/ST=Beijing/C=CN"
openssl x509 -in ca.crt -out ca.pem -outform PEM
::CA私钥转换p12(浏览器需要安装此证书,否则无法访问服务)
openssl pkcs12 -export -inkey ca.key -in ca.pem -out ca.p12 -password pass:123456

::==================生成服务端公钥(双向认证时使用)==================浏览器必须安装证书ca.p12
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
::生成服务端证书cer-客户端浏览器安装,不安装也可继续访问
openssl x509 -in server.crt -out server.cer -outform der

1.2.或openssl和keytool结合生成

::生成服务端私钥jks
keytool -genkeypair -alias server -keystore server.jks -storetype pkcs12 -keypass 123456 -storepass 123456 -keyalg RSA -keysize 2048 -validity 3650 -dname "CN=*.test.com, OU=xx, O=dy, L=nb,ST=Beijing,C=CN"
::keytool -export -alias server -keystore server.jks -storetype PKCS12 -storepass 123456 -rfc -file server.cer
::服务端jks先转换格式,再输出私钥keyjks转成pkcs12格式,“.pfx”等同于“.p12”)(jks->pfx->pem, pem输出私钥key)
keytool -importkeystore -srckeystore server.jks -destkeystore server.pfx -srcstoretype PKCS12 -deststoretype PKCS12 -srcstorepass 123456 -deststorepass 123456
openssl pkcs12 -in server.pfx -nodes -out server.pem -password pass:123456
openssl rsa -in server.pem -out server.key
::服务端key创建csr
openssl req -new -key server.key -passin pass:123456 -out server.csr -subj "/CN=*.test.com/OU=xx Club/O=dy/L=nb/ST=Beijing/C=CN"

 

::生成客户端私钥jks
keytool -genkey -v -alias ca -keystore ca.jks -storetype PKCS12 -storepass 123456 -keypass 123456 -keyalg RSA -validity 3650 -dname "CN=*.test.com,OU=cn,O=cn,L=cn,ST=Beijing,c=CN"
::生成客户端公钥
openssl pkcs12 -in ca.p12 -nodes -clcerts -out ca.crt -password pass:123456
::客户端jks先转换格式,再输出私钥keyjks转成pkcs12格式,“.pfx”等同于“.p12”)(jks->pfx->pem, pem输出私钥key)
keytool -importkeystore -srckeystore ca.jks -destkeystore ca.pfx -srcstoretype PKCS12 -deststoretype PKCS12 -srcstorepass 123456 -deststorepass 123456
openssl pkcs12 -in ca.pfx -nodes -out ca.pem -password pass:123456
openssl rsa -in ca.pem -out ca.key
::客户端jks私钥转换p12(浏览器需要安装此证书,否则无法访问服务)
keytool -importkeystore -srckeystore ca.jks -destkeystore ca.p12 -srcstoretype jks -deststoretype PKCS12 -srcstorepass 123456 -deststorepass 123456

 

::生成服务端公钥(必须根据ca公钥和私钥生成服务端公钥)
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
::生成服务端证书cer-客户端浏览器安装,不安装也可继续访问
openssl x509 -in server.crt -out server.cer -outform der

2.nginx配置证书

http{

……

    server {# 可以不要
        listen 80;
        server_name localhost;# 自己的域名
        rewrite ^(.*)$ https://$host$request_uri;
    }


    server {
        listen 443 ssl;
        server_name localhost;# 自己的域名
        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_session_timeout 20m;

        # 配置服务器可使用的加密算法
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;

        # 指定服务器密码算法在优先于客户端密码算法时,使用 SSLv3 和 TLS 协议
        ssl_prefer_server_ciphers on;

        # ssl 版本 可用 SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2 
        # ie6 只支持 SSLv2,SSLv3 但是存在安全问题, 故不支持
        #ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        location / {
            root /home/www.example.com/;
            try_files $uri /index.html;
            index index.html index.htm;
        }
    }

……

3.浏览器访问服务

 

3.1.未安装证书

用chrome浏览器访问:https://127.0.0.1

up-4044c6273c5595bd8b23139d0e89270d3f8.png

 

3.2.安装证书ca.p12

up-ba887051c528c2deba5b80616eed8b02c97.png

up-a85d0c156898ca92056e7bc4f098a689239.png

用chrome浏览器重新访问:https://127.0.0.1

提示:选择证书

up-fdcba08055af970e9fad7772fc21a736e2b.png

确定后,即可正常访问服务

up-988234844bd2bd315ffac9a9b14c2d6de6f.png

 

3.3.补充:删除已安装证书教程

up-21dd849e1fa2132d4ab6cbba8a0fcc6fb8b.png

up-278645abe0995cdd1867d4447dfcbe6ea52.png

up-27b7db0b8008a958eabaa7c8ff62d393f24.png

up-011507f44821d4ead867fdb4641f8ab24fc.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值