CA認證完整實現步驟

(本文參考https://blog.csdn.net/tuzongxun/article/details/88647172)

1、什麼是系統安全管理

置於公網的系統,通常都需要一定的安全管理,據我個人理解,這裏的安全管理主要分三個方面:
一是應用內的權限控制,比如具體應用的用戶名、密碼等;
二是應用數據傳輸過程中的安全機制,例如各種報文的加解密方案;
三是數據傳輸前的通訊安全機制,保證通訊雙方都是可靠可信任的,PKI就是其中一個解決方案。

2、什麼是PKI
PKI是 Public Key Infrastructure的簡稱,意思是公鑰基礎設施。
公鑰基礎設施是提供公鑰加密和數字簽名服務的系統或平臺,目的是爲了管理密鑰和證書。通過證書和祕鑰來確認通訊雙方是否可信任。

3、什麼是CA
CA是Certificate Authority的簡稱,即證書的簽發機構,它是PKI的核心。
正常情況來說,CA是具有權威性的機構,通過CA獲取證書需要給錢。
但是有的時候可能不想用CA機構的證書,又想要使用https站點,那麼可能就需要自己生成證書,但是這種證書瀏覽器是認爲不安全的,本文檔後邊的具體步驟即針對這種場景。

4、什麼是https
https是http+ssl,通俗點說,就是採用http通訊的安全傳輸協議,用來保證http傳輸過程中數據的機密性、完整性和可靠性,ssl需要證書。

5、單向認證
網絡通訊是雙向的,但是安全認證不一定都是雙向。大多數情況下可能都是單向的,只需要客戶端確認服務端是可靠的,而服務端不管客戶端是否可靠。即客戶端,比如瀏覽器會驗證服務端證書,服務端不需要客戶端證書。

6、雙向認證
雙向認證相對於單向認證,即客戶端需要確認服務端是否可信,服務端也需要確認客戶端是否可信。雙方都要驗證對方的證書。

二、實現步驟
1、本地環境
本次技術調研過程全程都在自己的電腦上,採用物理機加虛擬機的方式:
物理機:win10+ie+Chrome
虛擬機:centeros6.8+nginx+tomcat+openssl

2、nginx安裝
2.1、安裝包準備
nginx安裝需要依賴其他的一些組件,網上說有以下三個必要依賴:

openssl
pcre
zlib

但實際安裝過程發現只有openssl是必要的,其他兩個可以排除,因此實際安裝時下載了兩個安裝包:

nginx-1.12.2.tar.gz
openssl-1.0.0a.tar.gz

2.2、安裝openssl
2.2.1、解壓

tar -zxvf openssl-1.0.0a.tar.gz

2.2.2、配置
進入解壓後目錄

./configure

2.2.3、編譯

make

2.2.4、安裝

make install

2.3、安裝nginx
2.3.1、解壓

tar -zxvf nginx-1.12.2.tar.gz

2.3.2、配置
進入解壓後的文件夾配置,這裏需要注意的是,使用參數排除了pcre和zlib,同時指定了openssl的安裝目錄,並指定安裝ssl模塊

./configure --without-http_rewrite_module --without-http_gzip_module  --with-http_ssl_module --with-openssl=/home/tuzongxun/openssl/openssl-1.0.0a

2.3.3、編譯

make

2.3.4、安裝

make install


安裝後會看到/usr/local目錄中多了一個nginx目錄,即nginx的安裝目錄

3、證書生成
3.1、生成根證書

mkdir ssl 創建證書存放的目錄
cd ssl 進入證書存放目錄
openssl genrsa -out ca.key 2048 生成根證書私鑰

å¨è¿éæå¥å¾çæè¿°

製作根證書

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

3.2、生成服務端證書

先生成服務端私鑰

openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key

生成簽發請求,注意這裏的common name必須需要訪問的域名(也可以是IP),其他的內容可以和根證書填寫的一樣

openssl req -new -key server.pem -out server.csr

openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt

4、單向認證

CA單向認證,只需要驗證服務端是否可信即可,因此也就只需要上邊的步驟生成了根證書和服務端證書即可,然後就可以配置nginx了。

4.1、nginx配置

進入nginx的安裝目錄找到nginx.conf文件更改配置
在這裏插入圖片描述
主要是更改server裏的內容,更改後如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen   443 default_server;        
	server_name _ ;
	ssl on;
	ssl_certificate /usr/local/nginx/ssl/server.crt;
	ssl_certificate_key /usr/local/nginx/ssl/server.key;
	ssl_session_timeout 5m;
	#ssl_client_certificate /usr/local/nginx/ssl/ca.crt;
	#ssl_verify_client on;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
        proxy_pass   http://192.168.4.20:8082/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

主要更改如下:
默認的 listen 80爲 listen 443 default_server;
server_name _;
使用 ssl on開啓ssl安全認證功能;
ssl_certificate指定服務端證書的地址,如/usr/local/nginx/ssl/server.crt;
ssl_certificate_key指定服務端私鑰地址,如/usr/local/nginx/ssl/server.key;
ssl_session_timeout設置ssl session超時時間5m;

更改默認的跟訪問路徑/的路由爲實際需要訪問的資源,例如這裏指向了tomcat默認端口(啓動了tomcat才能訪問,或者其他具有8080端口的可訪問資源)。

4.2、啓動nginx

在nginx的sbin目錄中啓動nginx

4.4、客戶端安裝根證書

上邊啓動nginx,並配置hosts之後,ie瀏覽器中就可以訪問https://192.168.4.20了,但是會提示不安全的站點,點擊之後才能繼續訪問:

 5、雙向認證(自測只能IE內核瀏覽器訪問)

單向認證是客戶端根據ca根證書驗證服務端提供的服務端證書和私鑰;雙向認證還要服務端根據ca根證書驗證客戶端證書和私鑰,因此雙向認證之前還需要生成客戶端證書和私鑰。

5.1、生成客戶端證書

客戶端證書生成步驟和服務端基本一樣,填寫的信息中,comm name也要是訪問的域名,其他信息最好是和服務端的不一樣。

雙向認證命令:
openssl genrsa -out client.pem 1024
openssl rsa -in client.pem -out client.key
openssl req -new -key client.pem -out client.csr
填寫信息
openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

 下面是將nginx中配置文件的這兩個打開。

 修改後重啓nginx

訪問地址,報錯:

將打包生成的client.p12文件拷貝至客戶端,雙擊安裝證書.

關閉瀏覽器=>再次訪問=>提示確認證書=>點擊確定即可.

雙向認證完成。再次提醒,雙向認證只能適用於IE內核,其他瀏覽器解決方案暫時未研究。

發佈了57 篇原創文章 · 獲贊 35 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章