签证

  1. #!/usr/bin/env bash
  2. __main() {
  3. _subj="/C=CN/ST=Zhejiang/L=Hangzhou/O=lwmacct/OU=universal domain name/CN=lwm.icu"
  4. _openssl_conf=$(printf "[SAN]\nsubjectAltName=DNS:*.port.local.lwm.icu")
  5. # ca
  6. openssl genrsa -out ca.key 2048
  7. openssl req -x509 -new -nodes -key ca.key -days 100000 -out ca.crt -subj "$_subj"
  8. # 服务端
  9. openssl genrsa -out server.key 2048 # 创建私钥
  10. openssl req -new -key server.key -out server.csr -subj "$_subj" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(echo "$_openssl_conf")) # 生成 csr
  11. openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(echo "$_openssl_conf")) # 生成证书
  12. # 客户端
  13. openssl genrsa -out client.key 2048 # 创建私钥
  14. openssl req -new -key client.key -out client.csr -subj "$_subj" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(echo "$_openssl_conf")) # 生成 csr
  15. openssl x509 -req -days 3650 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -extensions SAN -extfile <(cat /etc/ssl/openssl.cnf <(echo "$_openssl_conf")) # 生成证书
  16. # 客户端公钥秘钥打包为 pfx
  17. openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt -passout pass:kuaicdn
  18. }
  19. __main

Nginx

  1. server {
  2. listen 80; #监听ipv4
  3. server_name *.port.local.lwm.icu; #虚拟主机域名
  4. rewrite ^(.*)$ https://$host$1 permanent; #rewrite跳转
  5. }
  6. server {
  7. listen 443 ssl http2;
  8. server_name ~^(?<port>\d+)\.port\.work\.kuaicdn\.cn$;
  9. # access_log /var/log/nginx/host.access.log main;
  10. ssl_verify_client on;
  11. ssl_verify_depth 2;
  12. ssl_client_certificate /etc/nginx/lwm.icu/openssl/ca.crt;
  13. ssl_certificate /etc/nginx/lwm.icu/openssl/server.crt; #证书在conf文件同级;
  14. ssl_certificate_key /etc/nginx/lwm.icu/openssl/openssl/server.key;
  15. ssl_session_timeout 5m;
  16. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  17. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  18. ssl_prefer_server_ciphers on;
  19. location / {
  20. proxy_pass http://$_ip:$port$request_uri;
  21. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
  22. proxy_set_header Host $host;
  23. proxy_http_version 1.1;
  24. proxy_set_header X-Real-IP $remote_addr;
  25. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  26. proxy_set_header X-Forwarded-Proto https;
  27. proxy_set_header Upgrade $http_upgrade;
  28. proxy_set_header Connection "upgrade";
  29. proxy_set_header Origin "";
  30. }
  31. error_page 500 502 503 504 /50x.html;
  32. location = /50x.html {
  33. root /usr/share/nginx/html;
  34. }
  35. }