HTTPS證書驗證流程及SSL證書生成步驟【附nginx開啓https配置】

------------------------------------------------------------html

HTTPS證書驗證流程(極簡化版)
    1.客戶端向服務端請求證書(server.crt)
    2.服務端下發證書(server.crt)
    3.客戶端用預製的受信任機構的證書(ca.crt)來驗證服務端下發的證書(server.crt)是否合法,而且還會校驗下發下來的證書裏的域名與要請求的域名是否一致
    【如下步驟開啓雙向驗證後纔會觸發】
    4. 客戶端選擇一個由受信任的機構(ca.crt)頒發的證書(client.crt)發送給服務端
    5.服務端用預製的受信任機構的證書(ca.crt)來驗證客戶端傳來的證書(client.crt)是否合法node

-----------------------------------------------------------------nginx

如下是證書生成步驟及說明:git

------------------------CA證書-------------------------------apache

1. 建立根證書密鑰文件(本身作CA)ca.key:
    openssl genrsa -des3 -out ca.key 2048
    #去除密碼
    openssl rsa -in ca.key -out ca.key

2. 建立根證書的申請文件ca.csr:
    openssl req -new -key ca.key -out ca.csr

3. 建立一個自當前日期起爲期十年的根證書ca.crt【用來簽名其它證書,並配置在客戶端信任列表,若是開啓雙向驗證,也須要配置在服務端】:
    openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt

------------------------Server端要下發的證書---------------------------------
4. 建立服務器證書密鑰server.key:
    openssl genrsa -des3 -out server.key 2048
    #去除密碼
    openssl rsa -in server.key -out server.key

5. 建立服務器證書的申請文件server.csr:
    openssl req -new -key server.key -out server.csr

6. 建立自當前日期起有效期爲期兩年的服務器證書server.crt【配置在服務端,將會在客戶端請求時下發給客戶端】:
    openssl x509 -req -days 730 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt


------------------------Client端要下發的證書【開啓雙向驗證後才須要】---------------------------------
7. 建立客戶端證書密鑰文件client.key:
    openssl genrsa -des3 -out client.key 2048
    #去除密碼
    openssl rsa -in client.key -out client.key

8. 建立客戶端證書的申請文件client.csr:
    openssl req -new -key client.key -out client.csr

9. 建立一個自當前日期起有效期爲兩年的客戶端證書client.crt【配置在客戶端】:
    openssl x509 -req -days 730 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in client.csr -out client.crt

------------------------各類格式轉換---------------------------------

a. crt+key轉pfx【pfx是證書安裝包,方便在電腦上直接雙擊按嚮導安裝證書】
    openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx

b. pfx轉化爲pem【curl須要pem格式文件】
    openssl pkcs12 -in client.pfx -nodes -out client.pem

c. crt+key轉p12【apache的cxf客戶端支持jks和p12證書】
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

d. crt轉jks【jks支持存放信任證書,而pkcs12不支持,因此tomcat環境下配置ca只能使用jks才能保證ca密鑰不泄露】
    keytool -import -v -trustcacerts -storepass defaultpwd -keypass defaultpwd -file ca.crt -keystore ca_only.jks

---------------------------------------------------------
關於建立證書的申請文件(.csr)時的輸入內容
    Country Name (2 letter code) [AU]:CN【國家代號,中國輸入CN】
    State or Province Name (full name) [Some-State]:BeiJing【省的全名,拼音】
    Locality Name (eg, city) []:BeiJing【市的全名,拼音】
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp.【公司英文名】
    Organizational Unit Name (eg, section) []: 【能夠不輸入】
    Common Name (eg, YOUR name) []:【對於server.csr須要輸入網站的域名以做校驗,其他的csr可隨意填寫】
    Email Address []:admin@mycompany.com【電子郵箱,可隨意填】

    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []:【能夠不輸入】
    An optional company name []:【能夠不輸入】tomcat

---------------------------------------------------------
多域名及域名通配符的支持方案
    域名通配符:
        「*」號爲域名通配符,域名通配符僅做用在同級域名下,沒法跨級
        例如:*.mydomain.com可匹配a.mydomain.com、b.mydomain.com等域名,不可匹配mydomain.com、a.b.mydomain.com等域名

    多域名:
        在生成server.crt的步驟添加以下參數:
            -extensions ext -extfile mydomain.com.ini服務器

mydomain.com.ini文件內容:session

 
  1. [ ext ]dom

  2. subjectAltName = @dnscurl

  3.  
  4. [ dns ]

  5. DNS.1 = mydomain.com

  6. DNS.2 = *.mydomain.com

-----------------------nginx開啓https配置--------------------------

 

 
  1. server {

  2. #上線請將端口改成默認443

  3. listen 8443 ssl;

  4. server_name your_domain;

  5. index index.html index.htm;

  6.  
  7. ssl on;

  8. ssl_certificate /your/certs/path/server.crt;

  9. ssl_certificate_key /your/certs/path/server.key;

  10.  
  11. #如下兩行註釋用來開啓雙向驗證

  12. #ssl_client_certificate /your/certs/path/ca.crt;

  13. #ssl_verify_client on;

  14.  
  15. ssl_session_timeout 5m;

  16.  
  17. location /your_https_path/ {

  18. proxy_pass_header Server;

  19. proxy_set_header Host $http_host;

  20. proxy_set_header X-Real-IP $remote_addr;

  21. proxy_set_header X-Scheme $scheme;

  22. proxy_pass http://your_http_host:port/your_http_path/;

  23. }

  24.  
  25. }

 

-------------------------tomcat開啓https配置【clientAuth用來開啓雙向驗證】-----------------------------------

 

 
  1. <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"

  2. maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

  3. clientAuth="true" sslProtocol="TLS"

  4. keystoreType="PKCS12"

  5. keystoreFile="c:/server/certs/path/server.p12" keystorePass="defaultpwd"

  6. truststoreType="JKS"

  7. truststoreFile="c:/ca/certs/path/ca_only.jks" truststorePass="defaultpwd" />

相關文章
相關標籤/搜索