Nginx配置https雙向認證

來源:互聯網
上載者:User

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來訪問了,第一次訪問,瀏覽器會詢問雙向認證時使用的認證,類似下圖

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.