ssl證書申請以及nginx證書的配置

準備知識

  • SSL/TLS:這兩個分別是Secure Socket Layer(安全套接字層),Transport Layer Security(傳輸層安全)的縮寫。TLS是SSL的繼承者,如果不是搞安全的專業人員,完全可以認爲他們是一樣的東西。

    關於這兩者的差異可以參考https://kb.cnblogs.com/page/197396/

  • key:因爲SSL/TLS使用非對稱加密算法進行認證,所以會有一對公鑰、私鑰。這裏我們說的key通常指的是私鑰。

    它長這個樣子

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UWEAyiTx-1591153845252)(https://img-blog.csdn.net/20180205155616129?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSG9sbW9meQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]

  • csr: Certificate Signing Request,即證書籤名請求。這個文件是我們在申請數字證書的過程中使用CSP(Cryptographic Service Provider,加密服務提供程序)生成私鑰的時候一起生成的。

    它一般張這樣:

    證書籤名請求

  • crt:Certificate的縮寫,這就是我們想要的證書。我們只要把CSR文件提交給證書頒發機構(CA)後,證書頒發機構使用其根證書私鑰簽名就生成了證書公鑰文件,也就是頒發給用戶的證書。

使用openssl自己頒發證書

openssl的命令詳細說明可以參考http://linux.51yip.com/search/openssl

1. 生成私鑰

openssl genrsa -out server.key -des3 -passout pass:123456 2048

生成2048位RSA私鑰,並用DES3對稱算法加密它,加密口令爲123456,將生成的私鑰輸出到server.key文件中。

2. 生成CSR請求

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

生成CSR請求

3. 生成CA證書

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

證書的認證者總是CA或者是CA指定的第三方,這裏我們只是生成一個CA證書自己玩玩。

4. 用CA證書給自己頒發一個證書

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

執行完成後server.crt就是我們要的證書了。

在Nginx中配置SSL證書

ngx_http_ssl_module模塊的配置參考鏈接:https://nginx.org/en/docs/http/ngx_http_ssl_module.html

要在nginx中使用ssl需要在編譯時安裝ssl模塊。可以用nginx -V命令檢查當前nginx安裝的模塊

查看Nginx安裝的模塊

如果沒有安裝過nginx,可以參考http://blog.csdn.net/holmofy/article/details/78639670

如果沒有http_ssl_module,需要重新編譯nginx源碼。在執行./configuration的時候加上該模塊

./configure --prefix=/usr/local/nginx --with-http_ssl_module

配置完成後用make && make install命令重新編譯安裝nginx。

安裝完成後在nginx.conf文件中添加如下配置:

server {
        listen 80;
        server_name  *.hufeifei.cn;
        # 告訴瀏覽器有效期內只准用 https 訪問
        add_header Strict-Transport-Security max-age=15768000;
        # 永久重定向到 https 站點
        return 301 https://$server_name$request_uri;
    }

    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  *.hufeifei.cn;

        # 證書文件路徑
        ssl_certificate      /usr/local/nginx/ssl/server.crt;
        # 私鑰文件路徑
        ssl_certificate_key  /usr/local/nginx/ssl/server.key;
        ssl_password_file    /usr/local/nginx/ssl/passwd.pwd;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

添加配置後,就可以啓動了。

如果啓動的時候有類似於下面的報錯信息,請檢查證書和私鑰文件路徑有沒有寫錯。

證書配置錯誤啓動失敗的情況

瀏覽器打開網站看看

自己申請的證書,不受瀏覽器信任

這是因爲我們的證書是我們自己頒發的,瀏覽器不信任自己頒發的證書,如果要信任該證書需要在Internet選項中添加信任的證書。自己頒發的證書玩玩就行,實際上我們並不會用自己頒發的證書。

使用免費的SSL證書

我們要向獲得受信任的證書,我們的csr必須得交給受信任的CA簽名纔行。要想獲取這樣的證書也很簡單,國內有很多CA代理,不過一般需要請毛爺爺幫忙纔行。

CA代理商

用不起花錢的,也有免費的給你用:https://letsencrypt.org/

letsencrypt有很多第三方工具提供了向(sha)導(gua)式的證書生成工具,這裏介紹一個zerossl

ZeroSSL

開始製作免費證書:

開始製作免費證書

生成證書籤名請求

在網站上添加相應的文件,驗證網站是受你管理。

驗證網站的真實性

證書申請成功

證書申請成功,可以在nginx中配置證書了。

注意是配置最後生成的domain-crt.txt和domain-key.txt兩個文件。而且這個證書的有效時間是90天,也就是說3個月後這個證書就過期了,到時候你可以用第一步生成的account-key.txt和domain-csr.txt再次申請。

除了這種方式手動申請,還有certbot提供的腳本自動申請:https://certbot.eff.org/,鏈接扔這了,你們自己玩吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章