讓服務器啓用HTTPS-自己頒發證書-適用於非公網

一些概念

在動手操作前先明確一些概念與原理。首先是http與https,簡單來說http使用的是明文傳輸,不安全,而https傳輸的信息是加密過的,比較安全。提到https,它又牽扯到SSL/TLS, 在此一併講一講,https的字母s代表安全(secure),安全這個功能由SSL/TLS協議來實現。SSL("Secure Sockets Layer)出現的時間比較早,由netspace公司搞出來的,有趣的是它從未發佈過1.0版本,直接在1995年的時候隨着netspace瀏覽器發佈了2.0版本,當年netspace和微軟的瀏覽器之爭在《浪潮之巔》中描述的比較精彩。1999年TLS 1.0發佈(其實就是SSL 3.1,SSL改名了!),再到後來2006年TLS1.1發佈,2018年TLS1.3已經發布,而SSL作爲一個古董已經退出了歷史舞臺。

https是如何工作的?

來看看https是如何工作就能知道爲什麼說它是安全的。參考博客[6]

實踐

實踐前須知

以下操作參考文章[3],將在CentOS7上執行,使用Nginx作爲web服務器,使用自己頒發的證書,所以,由於它不是CA頒發的,瀏覽器無法驗證服務器的身份,當我們訪問服務器的時候瀏覽器會提示它不安全。之所以要自己給自己頒發證書是有原因的,例如沒有域名,或者服務器在私網內,如果是在公網有域名最好用CA頒發的證書,其操作與本文有差異,需要另行參考。

安裝Nginx並配置防火牆

安裝Nginx:

yum install epel-release
yum install -y nginx
systemctl start nginx
systemctl status nginx
systemctl enable nginx

配置防火牆

#如果使用的是firewalld
firewall-cmd --add-service=http
firewall-cmd --add-service=https
firewall-cmd --runtime-to-permanent
#如果使用的是iptables
iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

現在,在瀏覽器中輸入服務器的ip就可以看到Nginx的默認頁面了。

創建SSL證書

TLS/SSL採用非對稱加密,服務器拿着私鑰,客戶端拿着公鑰(公共證書)。

在服務器上/etc/ssl/certs目錄用來存放公鑰(公共證書),檢查其是否存在,不存在則創建,再創建一個/etc/ssl/private目錄用來存入私鑰:

mkdir /etc/ssl/private
chmod 700 /etc/ssl/private

使用OpenSSL創建證書:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

執行命令後會提示輸入一些信息,注意其中的Common Name,輸入域名或者服務器IP,後面會用這個。

生成Diffie-Hellman(DH)組:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

生成的文件將會用於Nginx的配置。

配置Nginx

/etc/nginx/conf.d目錄下創建一個ssl.conf文件並編輯它:

vi /etc/nginx/conf.d/ssl.conf

輸入如下內容:

server {
    listen 443 http2 ssl;
    listen [::]:443 http2 ssl;

    server_name server_IP_address; # 修改爲前面寫的server_name

    ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
    ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    # 額外配置
    # ...
    
    # 自己的一些配置
    # ...
}

server_name即前面生成證書的時候填的,ssl_certificate_keyssl_certificate_keyssl_dhparam也是前面生成的文件,填寫相應的路徑。

到此最基本的配置就完成了,當然,這個配置文件裏可能還有一些額外配置(例如加強安全、將http重定向到https)以及自己項目所需配置,可自行配置。接下來讓Nginx生效:

# 檢查配置文件是否有錯
nginx -t
# 重啓Nginx
systemctl restart nginx

這個時候在瀏覽器中輸入https://IP就可以訪問了,瀏覽器會提示網站不安全繼續瀏覽就好了,需要注意的是http不會被禁止掉,輸入http依然能夠訪問,需要不想讓人使用http需要配置重定向,將http重定向到https。

Nginx額外配置(可選)

將http重定向到https

新建文件:

vi /etc/nginx/default.d/ssl-redirect.conf

輸入如下內容:

return 301 https://$host$request_uri/;

然後重啓Nginx即可。

參考:

[1] https://www.geeksforgeeks.org/whats-difference-http-https/

[2] https://howhttps.works/https-ssl-tls-differences/

[3] https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-on-centos-7

[4] https://en.wikipedia.org/wiki/X.509

[5] https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange

[6] https://blog.csdn.net/sean_cd/article/details/6966130

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