http協議改為https


項目自簽名ssl證書,配置https

一、自簽名證書:

准備ssl證書一份,這里使用JDK生成秘鑰證書:
Win+R 輸入cmd,調出命令行窗口
在這里插入圖片描述

在命令行窗口輸入,生成命令:

keytool -genkey -alias myssl -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore G:\ keystore.p12 -validity 365
(1)關鍵字解釋:
 * alias  密鑰別名
 * storetype 指定密鑰倉庫類型
 * keyalg 生證書的算法名稱,RSA是一種非對稱加密算法
 * keysize 證書大小
 * keystore 生成的證書文件的存儲路徑 (我這里選擇在G盤下)
 * validity 證書的有效期 (這里設置為一年)

(2)生成證書注意:
在輸入證書生成命令之后,會提示輸入:
 - 密鑰庫口令:證書密碼,在后面的項目中配置證書時用到
 - 姓氏:一般沒什么用,在瀏覽器中查看證書時會顯示,用於正式場合的證書還是需要填寫標准。
 - 組織單位:證書使用單位信息,一般沒什么用,在瀏覽器中查看證書時會顯示,用於正式場合的證書還是需要填寫標准。
 - 組織單位名稱:證書使用單位名稱,一般沒什么用,在瀏覽器中查看證書時會顯示,用於正式場合的證書還是需要填寫標准。
 - 所在的城市或區域名稱:瀏覽器中查看證書信息時會顯示。
 - 所在的省/市/自治區名稱:瀏覽器中查看證書信息時會顯示。
 - 單位的雙字母國家/地區代碼:國家或地區編碼,瀏覽器中查看證書信息時會顯示。

二、將生成的密鑰證書拷貝到項目中的resource中(也可以不拷貝到項目中,后面配置路徑時配置密鑰證書的絕對路徑即可)

在這里插入圖片描述

三、修改項目配置文件application.properties,增加如下配置項在這里插入圖片描述

server.ssl.key-store=classpath:keystore.p12  #證書文件路徑,也可以配置絕對路徑
server.ssl.key-store-password=jyd666  #證書密碼,證書生成時輸入的密鑰庫口令
server.ssl.keyStoreType=PKCS12   #證書類型,與證書生成命令一致
server.ssl.keyAlias=jydssl     #證書別名,與證書生成命令一致

如果是application.yml配置文件:
在這里插入圖片描述

server:
  # 服務器的HTTP端口,默認為80
  port: 9999
  ssl:
    key-store: classpath:keystore.p12 #證書文件路徑
    key-store-password: jyd666 #證書密碼
    key-store-type: PKCS12 #證書類型
    key-alias: jydssl #證書別名

四、之后啟動項目訪問https路徑即可

Linux-nginx配置https

一、需要的環境:

配置nginx支持https協議訪問,需要在編譯安裝nginx的時候添加相應的模塊--with-http_ssl_module
查看nginx編譯參數:/usr/local/nginx/sbin/nginx -V
在這里插入圖片描述)
如果沒有--with-http_gzip_static_module這個參數,需要重新編輯nginx

二、創建https證書:

確保機器上安裝了openssl 和 openssl-devel
yum install openssl openssl-devel # CentOS使用yum命令安裝
mkdir /usr/local/nginx/conf/ssl # 創建證書存放目錄
cd /usr/local/nginx/conf/ssl # 進入目錄

創建服務器私鑰:openssl genrsa -des3 -out server.key 1024 #根據提示輸入證書口令
在這里插入圖片描述)

  1. 創立根證書密鑰文件(自己做CA)root.key:
[root@linux ssl]# openssl genrsa -des3 -out root.key
Generating RSA private key, 512 bit long modulus
……………..++++++++++++
..++++++++++++
e is 65537 (0×10001)
Enter pass phrase for root.key: ← 輸入一個新密碼
Verifying – Enter pass phrase for root.key: ← 重新輸入一遍密碼
  1. 創立根證書的申請文件root.csr:
[root@linux ssl]# openssl req -new -key server.key -out server.csr
Enter pass phrase for root.key: ← 輸入前面創立的密碼
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.whflsc.com’, the field will be left blank.



Country Name (2 letter code) [XX]:cn  #國家,中國輸入CN
State or Province Name (full name) []:zhejiang  #省份
Locality Name (eg, city) [Default City]:hangzhou  #城市
Organization Name (eg, company) [Default Company Ltd]:osyunwei  #公司
Organizational Unit Name (eg, section) []:sys  #部門
Common Name (eg, your name or your server's hostname) []:osyunwei   #主機名稱
Email Address []:xxx@qq.com  #郵箱

Please enter the following 'extra' attributes
to be sent with your certificate request

A challenge password []:123456  #證書請求密鑰,CA讀取證書的時候需要輸入密碼
An optional company name []:osyunwei  #公司名稱,CA讀取證書的時候需要輸入密碼
openssl rsa -in server.key -out server_nopassword.key  #對key進行解密

  1. 創立一個自目前日期起為期十年的根證書root.crt:
[root@linux ssl]# openssl x509 -req -days 3650 -in server.csr -signkey server_nopassword.key -out server.crt

三、修改nginx配置文件,加載ssl證書

修改nginx.conf配置:
[root@linux ssl]# vim /usr/local/nginx/conf/nginx.conf # 編輯
找到 HTTPS server塊,放開除HTTPS server的注釋
在這里插入圖片描述
進行如下修改:

# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      /usr/local/nginx/conf/ssl/server.crt;  #cert/證書名稱.pem;
	ssl_certificate_key  /usr/local/nginx/conf/ssl/server_nopassword.key; #cert/證書名稱.key;

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

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

    location / {
        proxy_pass https://127.0.0.1:9999/; #需要代理的項目路徑
		#root   html;
        #index  index.html index.htm;
    }
}

:wq! #保存退出

下面是個人的配置:
nginx端口為8888,代理項目端口9999,之后訪問項目只需訪問https://域名或ip/8888
(這里並沒有使用默認端口443,使用其他端口則需要在linux中開放對應的端口,因為linux默認不開放端口,開放端口的方法在后面↓)
在這里插入圖片描述
配置完成后退出編輯,重啟nginx:

/usr/local/nginx/sbin/nginx -s reload # 重啟nginx
/usr/local/nginx/sbin/nginx -t # 檢查nginx是否啟動成功
在這里插入圖片描述

四、linux防火牆開啟https協議端口8888

linux中輸入如下命令:
vi /etc/sysconfig/iptables # 編輯防火牆配置文件
添加以下代碼:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
之后,
:wq! # 保存退出
再重啟防火牆:
service iptables restart #重啟防火牆

鑒於linux版本不同,如果你的linux不支持上述命令,那么用下面的firewall命令:

# 打開8888/TCP端口
firewall-cmd --add-port=8888/tcp

# 永久打開8888/TCP端口
firewall-cmd --permanent --add-port=8888/tcp

# 永久打開端口需要reload一下,臨時打開不用,如果用了reload臨時打開的端口就失效了
# 重啟防火牆
firewall-cmd --reload

# 查看防火牆
firewall-cmd --list-all

ps:關閉端口
firewall-cmd --remove-port=80/tcp --permanent
firewall-cmd --reload

五、訪問項目

自此完畢,訪問項目路徑進行測試。

六、缺少SSL模塊錯誤

若出現nginx:[emerg]unknown directive ssl這個錯誤提示,是因為編譯Nginx的時候並沒有把SSL模塊一起編譯進去。

錯誤解決步驟:

我們只需要在原有的基礎上添加ssl模塊,不需要重新安裝Nginx。

首先,我們cd到當初下載nginx的包壓縮的解壓目錄,我這里的解壓目錄在“/usr/loacl/nginx/”。
進入到解壓目錄下后,按順序執行一下命令:

  • ./configure --with-http_ssl_module # 重新添加ssl模塊
    若執行上面這條命令出現錯誤:(./configure:錯誤:SSL模塊需要OpenSSL庫。),是因為缺少了OpenSSL,所以我們要先安裝一個openssl,執行:yum -y install openssl openssl-devel
    等待OpenSSL的安裝完成后,再執行./configure --with-http_ssl_module
  • 安裝好ssl后執行make命令,不要執行make install(make是用來編譯的,而make install是安裝,不然整個nginx會被重新覆蓋)。
  • 之后在nginx解壓目錄下,objs文件夾中多了一個nginx的文件,把這個新的nginx文件復制過去覆蓋之前的nginx(保險起見先備份一下之前的nginx)。
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
    cp objs/nginx /usr/local/nginx/sbin/nginx
  • 最后cd到Nginx安裝目錄下,查看ssl模塊安裝是否成功:./sbin/nginx -V
    在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM