1. 前期的準備工作:
安裝openssl和nginx的https模組
cd ~/mkdir sslcd sslmkdir demoCAcd demoCAmkdir newcertsmkdir privatetouch index.txtecho '01' > serial
2. 製作CA認證(這個是信任的起點,根憑證,所有其他的認證都要經過CA的私密金鑰簽名)。
產生 CA私密金鑰: ca.key
命令:openssl genrsa -des3 -out ca.key 2048
這樣是產生rsa私密金鑰,`des3`演算法,openssl格式,2048位強度。`ca.key`是密鑰檔案名稱。為了產生這樣的密鑰,需要一個至少四位的密碼。
另外可以通過以下方法產生沒有密碼的key:
openssl rsa -in ca.key -out ca_decrypted.key
產生 CA根憑證的公開金鑰 ca.crt:
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
3. 製作網站的https認證,並用CA簽名認證。
假設我們需要為 test.com 網域名稱製作認證,先產生 test.com的認證私密金鑰 test.com.pem。
命令:
openssl genrsa -des3 -out test.com.pem 1024
產生無密碼的私密金鑰:
openssl rsa -in test.com.pem -out test.com.key
產生 csr 簽章要求:
openssl req -new -key test.com.pem -out test.com.csr
這裡需要輸入國家,地區,組織,email等。最重要的是**common name**,可以寫你的名字或者網域名稱。如果為了 https 申請,這個必須和網域名稱一樣,即,這裡要寫test.com,否則會引發瀏覽器警報,這裡可以用 *.test.com 來做泛網域名稱認證。
最後要用CA認證進行簽名:
openssl ca -policy policy_anything -days 1460 -cert ./demoCA/ca.crt -keyfile ./demoCA/ca.key -in test.com.csr -out test.com.crt
把 ca.crt 的內容追加到 test.com.crt後面,因為有些瀏覽似乎不支援:
cat demoCA/ca.crt>> test.com.crt
4. 製作用戶端認證(跟製作網站的認證模式一樣):
準備用戶端私密金鑰:
openssl genrsa -des3 -out clent.pem 2048
產生用戶端認證請求:
openssl req -new -key client.pem -out client-req.csr
CA簽名用戶端認證請求
openssl ca -policy policy_anything -days 1460 -cert ca.crt -keyfile ca.key -in client-req.csr -out client.crt
用戶端認證CRT轉換為 PKCS #12格式(全稱應該叫做 Personal Information Exchange,通常以 p12作為尾碼):
openssl pkcs12 -export -clcerts -in client.crt -inkey client.pem -out client.p12
點擊剛才產生的p12檔案輸入認證的密碼將安裝。
5. nginx配置
server { listen 443; server_name test.com www.test.com; root html; index index.html index.htm; ssl on; #開啟ssl ssl_certificate /PATH/TO/test.com.crt; #伺服器憑證位置 ssl_certificate_key /PATH/TO/test.com.key; #伺服器私密金鑰 ssl_client_certificate /home/zhangyong/key/ca.crt; #CA認證用於驗證用戶端認證的合法性 ssl_verify_client on; #開啟對用戶端的驗證 ssl_session_timeout 5m; #session有效期間,5分鐘 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL'; #密碼編譯演算法 ssl_prefer_server_ciphers on; location / { try_files $uri $uri/ =404; } }
6. 測試
當將一切都設定好,將 nginx啟動成功後,就可以開啟 IE來訪問了,第一次訪問,瀏覽器會詢問雙向認證時使用的認證,類似下圖