安裝openssl和nginx的https模塊nginx
cd ~/ mkdir ssl cd ssl mkdir demoCA cd demoCA mkdir newcerts mkdir private touch index.txt echo '01' > serial
2. 製做CA證書(這個是信任的起點,根證書,全部其餘的證書都要通過CA的私鑰簽名)。算法
生成 CA私鑰: ca.key瀏覽器
命令:openssl genrsa -des3 -out ca.key 2048
這樣是生成rsa私鑰,`des3`算法,openssl格式,2048位強度。`ca.key`是密鑰文件名。爲了生成這樣的密鑰,須要一個至少四位的密碼。服務器
另外能夠經過如下方法生成沒有密碼的key:session
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。加密
命令:spa
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來訪問了,第一次訪問,瀏覽器會詢問雙向認證時使用的證書,相似下圖
注意:服務器和客戶端的在輸入common server時,不要重名