经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Nginx » 查看文章
nginx代理服务器配置双向证书验证的方法
来源:jb51  时间:2019/2/14 10:18:52  对本文有异议

生成证书链

用脚本生成一个根证书, 一个中间证书(intermediate), 三个客户端证书.

中间证书的域名为 localhost.

  1. #!/bin/bash -x
  2. set -e
  3. for C in `echo root-ca intermediate`; do
  4. mkdir $C
  5. cd $C
  6. mkdir certs crl newcerts private
  7. cd ..
  8. echo 1000 > $C/serial
  9. touch $C/index.txt $C/index.txt.attr
  10. echo '
  11. [ ca ]
  12. default_ca = CA_default
  13. [ CA_default ]
  14. dir = '$C' # Where everything is kept
  15. certs = $dir/certs # Where the issued certs are kept
  16. crl_dir = $dir/crl # Where the issued crl are kept
  17. database = $dir/index.txt # database index file.
  18. new_certs_dir = $dir/newcerts # default place for new certs.
  19. certificate = $dir/cacert.pem # The CA certificate
  20. serial = $dir/serial # The current serial number
  21. crl = $dir/crl.pem # The current CRL
  22. private_key = $dir/private/ca.key.pem # The private key
  23. RANDFILE = $dir/.rnd # private random number file
  24. nameopt = default_ca
  25. certopt = default_ca
  26. policy = policy_match
  27. default_days = 365
  28. default_md = sha256
  29. [ policy_match ]
  30. countryName = optional
  31. stateOrProvinceName = optional
  32. organizationName = optional
  33. organizationalUnitName = optional
  34. commonName = supplied
  35. emailAddress = optional
  36. [req]
  37. req_extensions = v3_req
  38. distinguished_name = req_distinguished_name
  39. [req_distinguished_name]
  40. [v3_req]
  41. basicConstraints = CA:TRUE
  42. ' > $C/openssl.conf
  43. done
  44. openssl genrsa -out root-ca/private/ca.key 2048
  45. openssl req -config root-ca/openssl.conf -new -x509 -days 3650 -key root-ca/private/ca.key -sha256 -extensions v3_req -out root-ca/certs/ca.crt -subj '/CN=Root-ca'
  46. openssl genrsa -out intermediate/private/intermediate.key 2048
  47. openssl req -config intermediate/openssl.conf -sha256 -new -key intermediate/private/intermediate.key -out intermediate/certs/intermediate.csr -subj '/CN=localhost.'
  48. openssl ca -batch -config root-ca/openssl.conf -keyfile root-ca/private/ca.key -cert root-ca/certs/ca.crt -extensions v3_req -notext -md sha256 -in intermediate/certs/intermediate.csr -out intermediate/certs/intermediate.crt
  49. mkdir out
  50. for I in `seq 1 3` ; do
  51. openssl req -new -keyout out/$I.key -out out/$I.request -days 365 -nodes -subj "/CN=$I.example.com" -newkey rsa:2048
  52. openssl ca -batch -config root-ca/openssl.conf -keyfile intermediate/private/intermediate.key -cert intermediate/certs/intermediate.crt -out out/$I.crt -infiles out/$I.request
  53. done

服务器

nginx 配置

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. stream{
  6. upstream backend{
  7. server 127.0.0.1:8080;
  8. }
  9. server {
  10. listen 8888 ssl;
  11. proxy_pass backend;
  12. ssl_certificate intermediate.crt;
  13. ssl_certificate_key intermediate.key;
  14. ssl_verify_depth 2;
  15. ssl_client_certificate root.crt;
  16. ssl_verify_client optional_no_ca;
  17. }
  18. }

客户端

  1. curl -I -vv -x https://localhost:8888/ --proxy-cert client1.crt --proxy-key client1.key --proxy-cacert ca.crt https://www.baidu.com/

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对w3xue的支持。如果你想了解更多相关内容请查看下面相关链接

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号