#openssl配置文件路径vim/etc/pki/tls/openssl.cnf#下面只列出配置文件中和自建CA有关的几个关键指令dir=/etc/pki/CA#CA的工作目录database=$dir/index.txt#签署证书的数据记录文件new_certs_dir=$dir/newcerts#存放新签署证书的目录serial=$dir/serial#新证书签署号记录文件certificate=$dir/ca.crt#CA的证书路径private_key=$dir/private/cakey.pem#CA的私钥路径使用openssl制作CA的自签名证书
#切换到CA的工作目录cd/etc/pki/CA#制作CA私钥(umask077;opensslgenrsa-outprivate/cakey.pem2048)#制作自签名证书opensslreq-new-x509-keyprivate/cakey.pem-outca.crt#生成数据记录文件,生成签署号记录文件,给文件一个初始号。touchindex.txttouchserialecho"01">serial#自建CA完成准备服务器端证书
#制作服务器端私钥(umask077;opensslgenrsa-outserver.key1024)#制作服务器端证书申请指定使用sha512算法签名(默认使用sha1算法)opensslreq-new-keyserver.key-sha512-outserver.csr#签署证书opensslca-inserver.csr-outserver.crt-days3650准备客户端证书
#制作客户端私钥(umask077;opensslgenrsa-outkehuduan.key1024)#制作客户端证书申请opensslreq-new-keykehuduan.key-outkehuduan.csr#签署证书opensslca-inkehuduan.csr-outkehuduan.crt-days3650注意事项:
<strong>opensslreqxx-[digest]Digesttosignwith(seeopenssldgst-hforlist)</strong>查看使用的签名算法:
<strong>#使用-sha256指定算法opensslreq-new-keyserver.key-sha256-outserver.csr</strong>二、提供Nginx配置文件
<strong>server{listen443;server_namepro.server.com;ssion;ssi_silent_errorson;ssi_typestext/shtml;sslon;ssl_certificate/data/server/nginx/ssl/self/server.crt;ssl_certificate_key/data/server/nginx/ssl/self/server.key;ssl_client_certificate/data/server/nginx/ssl/self/ca/ca.crt;ssl_verify_clienton;ssl_protocolsTLSv1TLSv1.1TLSv1.2;ssl_ciphersECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:!RC4-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;ssl_prefer_server_ciphersOn;indexindex.htmlindex.htmindex.php;root/data/www;location~.*.(php|php5)?${#fastcgi_passunix:/tmp/php-cgi.sock;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;includefastcgi.conf;}location~.*.(gif|jpg|jpeg|png|bmp|swf)${expires30d;}location~.*.(js|css)?${expires1h;}###thisistouseopenwebsitelianjielikeonapache##location/{if(!-e$request_filename){rewrite^(.*)$/index.php?s=$1last;break;}keepalive_timeout0;}location~/.svn/{denyall;}###end##include/data/server/nginx/conf/rewrite/test.conf;access_log/log/nginx/access/access.log;}</strong>客户端证书格式转换
<strong>#将文本格式的证书转换成可以导入浏览器的证书opensslpkcs12-export-clcerts-inclient.crt-inkeyclient.key-outclient.p12</strong>三、将证书导入浏览器,这里以Chrome为例
2、在设置窗口中找到高级设置
3、找到管理证书
4、点击导入证书,然后选择证书路径就可以了
5、在导入证书之后就可以正常访问到服务器数据了
6、如果没有成功导入客户端证书就访问服务器的话,那么服务器验证客户端证书这步就会失败,然后返回如下错误
由于用的是自签证书不被公有CA信任,所以https那里会有红叉。
以上所述是小编给大家介绍的使用Nginx实现HTTPS双向验证的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!