签证
#!/usr/bin/env bash
__main() {
_subj="/C=CN/ST=Zhejiang/L=Hangzhou/O=lwmacct/OU=universal domain name/CN=lwm.icu"
_openssl_conf=$(printf "[SAN]\nsubjectAltName=DNS:*.port.local.lwm.icu")
# ca
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -days 100000 -out ca.crt -subj "$_subj"
# 服务端
openssl genrsa -out server.key 2048 # 创建私钥
openssl req -new -key server.key -out server.csr -subj "$_subj" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(echo "$_openssl_conf")) # 生成 csr
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")) # 生成证书
# 客户端
openssl genrsa -out client.key 2048 # 创建私钥
openssl req -new -key client.key -out client.csr -subj "$_subj" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(echo "$_openssl_conf")) # 生成 csr
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")) # 生成证书
# 客户端公钥秘钥打包为 pfx
openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt -passout pass:kuaicdn
}
__main
Nginx
server {
listen 80; #监听ipv4
server_name *.port.local.lwm.icu; #虚拟主机域名
rewrite ^(.*)$ https://$host$1 permanent; #rewrite跳转
}
server {
listen 443 ssl http2;
server_name ~^(?<port>\d+)\.port\.work\.kuaicdn\.cn$;
# access_log /var/log/nginx/host.access.log main;
ssl_verify_client on;
ssl_verify_depth 2;
ssl_client_certificate /etc/nginx/lwm.icu/openssl/ca.crt;
ssl_certificate /etc/nginx/lwm.icu/openssl/server.crt; #证书在conf文件同级;
ssl_certificate_key /etc/nginx/lwm.icu/openssl/openssl/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://$_ip:$port$request_uri;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin "";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}