1. 程式人生 > >【HTTPS】自簽CA證書 && nginx配置https服務

【HTTPS】自簽CA證書 && nginx配置https服務

什麽 serve 其中 keepalive 構建 root openss nginx配置 {}

  首先,搭建https服務肯定需要一個https證書。這個證書可以看做是一個應用層面的證書。之所以這麽說是因為https證書是基於CA證書生成的。對於正式的網站,CA證書需要到有資質的第三方證書頒發機構去申請獲取。對於我們自建的一些小項目,可以使用自己的服務器自簽CA證書。這類證書構建出來的HTTPS服務在訪問的時候瀏覽器會發出不可信任的警告,對於自身項目無視即可。

  參考文:【https://blog.csdn.net/xizaihui/article/details/53178897】

■  自簽CA證書

  以下命令(包括自簽CA證書以及HTTPS證書簽名的所有命令)都可在同一個目錄下完成。

  1. 生成CA私鑰

  # openssl genrsa -des3 -out ca.key 2048

  此命令應該會要求你輸入一個ca.key對應的加密密碼。輸入後密碼需要記下來後面還要用。

  2. 生成不加密的CA私鑰(可不做)

  # openssl genrsa -out ca_decrypted.key 2048

  3. 生成CA公鑰即CA根證書

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

  輸入命令後應該會需要你輸入一些證書相關的周邊信息。比如證書頒發機構所在地址,機構名稱等等。這裏可以都直接回車不填,唯一需要註意的是Common Name那一欄。為了後面操作順利,按照我現有的實踐將這裏填寫主機名或者主機IP

■  生成HTTPS證書並且用CA證書簽名

  在生成HTTPS證書的時候需要明確主機名或者主機IP,也就是上面生成CA根證書時輸入的那玩意兒。

  1. 生成HTTPS證書私鑰

  # openssl genrsa -des3 -out xxxx.pem 1024

  這裏的xxxx指的就是上面說的主機名或者主機IP。下面類似不重復說明了

  2. 生成不加密的https主機證書私鑰(可不做)

  # openssl rsa -in xxxx.pem -out xxxx.key

  3. 生成簽名請求

  # openssl req -new -key xxxx.pem -out xxxx.csr

  4. 用CA進行簽名

  # openssl ca -policy policy_anything -days 3650 -cert ca.crt -keyfile ca.key -in xxxx.csr -out xxxx.crt

  其中,policy參數允許簽名的CA和網站證書可以有不同的國家、地名等信息,days參數則是簽名時限。

  在簽名的時候很可能會碰到

  I am unable to access the /etc/pki/CA/newcerts directory
  /etc/pki/CA/newcerts: Permission denied

  的錯誤。這主要是因為當前執行簽名的用戶不是root而openssl默認需要將CA相關的一些信息文件放到/etc/pki/CA這個root權限的目錄下。要解決這個問題,可以用root用戶修改/etc/pki/tls/openssl.cnf文件中的dir配置項。這個配置默認值是/etc/pki/CA,只要改成./CA即可。

  然後還要回到之前在生成https證書的目錄下,進行如下操作

  # mkdir -p CA/newcerts

  # touch CA/index.txt

  # echo ‘01‘ > CA/serial

  之後再次運行剛才CA簽名的命令。

■  配置nginx

  在nginx的server配置塊中(或者新建一個server配置塊)修改或新增如下:

listen 443;
ssl on;
ssl_certificate /path/to/xxxx.crt;
ssl_certificate_key /path/to/xxxx.key;
keepalive_timeout 70;

  最後一項據說是優化項,可加可不加。

  還有兩個優化項可以加入到http{}配置塊中:

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

  修改完成之後可以使用nginx -t命令檢查配置文件格式是否正確。

  如果報錯說unknown directive ssl什麽的話,主要是因為nginx當時編譯安裝的時候沒有將ssl部分的模塊編譯裝進去。解決的辦法是找到當時nginx源碼包的目錄(或者新下載一個也行)

  進入後./configure --with-http_ssl_module重新編譯,然後make。註意不要make install,,此時如果make install會把當前nginx以及相關配置文件都覆蓋掉!

  然後將源碼包目錄下的objs/nginx可執行文件替換系統中目前的nginx可執行文件。(註意備份)

  之後在nginx -t應該就可以了。

【HTTPS】自簽CA證書 && nginx配置https服務