企業多系統集成需統一身份認證:用戶登錄一次,訪問所有受信應用無需再次登錄。CAS (Central Authentication Service) 耶魯大學開源,成熟穩定、协议标准(CAS 1.0/2.0/3.0、SAML、OAuth、OpenID Connect),Java 生態原生支持,是構建 SSO 平台的首選。
https://demo.testcas.com,強制 HTTPS 保護憑證傳輸。https://app1.testcas.com、https://app2.testcas.com,接入 CAS Client Filter 驗證 Ticket。編輯 C:\Windows\System32\drivers\etc\hosts(需管理員權限):
127.0.0.1 demo.testcas.com
127.0.0.1 app1.testcas.com
127.0.0.1 app2.testcas.com
為什麼不用 JDK keytool? Nginx 不支持 JKS 格式,需 PEM 格式(.crt/.key)。
yum install openssl)# 1. 生成 CA 私鑰(2048 位,AES-256 加密,設置密碼)
openssl genrsa -des3 -out ca.key 2048
# 2. 生成 CA 根證書(有效期 20 年)
openssl req -new -x509 -days 7305 -key ca.key -out ca.crt
# Common Name 輸入:CAS Root CA
# 1. 生成服務端私鑰(1024 位,加密)
openssl genrsa -des3 -out demo.testcas.com.pem 1024
# 2. 解密私鑰(Nginx 啟動不想輸入密碼)
openssl rsa -in demo.testcas.com.pem -out demo.testcas.com.key
# 3. 生成證書簽名請求 CSR
openssl req -new -key demo.testcas.com.pem -out demo.testcas.com.csr
# Common Name **關鍵**:輸入完整域名 demo.testcas.com
# 4. CA 簽名頒發證書(有效期 4 年)
openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key -in demo.testcas.com.csr -out demo.testcas.com.crt
# 提示確認簽名輸入 y
最終產物:demo.testcas.com.crt(公鑰證書)、demo.testcas.com.key(解密私鑰)、ca.crt(根證書,客戶端信任用)。
# 全局上下文
events { worker_connections 1024; }
http {
upstream cas_server { server 127.0.0.1:8781; } # CAS Server Tomcat 端口
upstream app1 { server 127.0.0.1:8380; }
upstream app2 { server 127.0.0.1:8680; }
# HTTP 80 端口:強制跳轉 HTTPS(僅 CAS Server 域名)
server {
listen 80;
server_name demo.testcas.com;
return 301 https://$host$request_uri; # 永久重定向
}
# 應用域名保持 HTTP(內網無需 SSL,或按需配置)
server { listen 80; server_name app1.testcas.com; location / { proxy_pass https://app1; } }
server { listen 80; server_name app2.testcas.com; location / { proxy_pass https://app2; } }
# HTTPS 443 端口:CAS Server SSL 終結
server {
listen 443 ssl;
server_name demo.testcas.com;
ssl_certificate /path/to/demo.testcas.com.crt;
ssl_certificate_key /path/to/demo.testcas.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass https://cas_server;
proxy_set_header Host $host;
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; # 關鍵:告知後端原協議為 HTTPS
}
}
}
https://demo.testcas.com:自簽證書會提示「不安全」,點擊「繼續訪問」見到 CAS 登錄頁即成功。生產環境**必須**申請受信 CA 證書(Let's Encrypt 免費或商業 CA)。openssl ca 報錯 failed to update database:創建 index.txt、serial 文件於 demoCA 目錄(openssl.cnf 指定路徑)。SSL_CTX_use_PrivateKey_file failed:證書與私鑰不匹配,檢查 .crt 是否對應 .key(openssl x509 -noout -modulus -in cert.crt | openssl md5 對比)。