跳到主要內容

Xampp在CentOS7上使用 Let's Encrypt建立ssl憑證及自動更新憑證的方法-教學撰寫:徐嘉裕Neil hsu

Xampp在CentOS7上使用 Let's Encrypt建立ssl憑證及自動更新憑證的方法

Let's Encryp是一個免費、自動化、開放,為了公眾利益而運作的憑證頒發機構 (Certificate Authority, CA)。它是由 Internet Security Research Group (ISRG) 所提供的服務。

Let's Encryp為傳輸層安全 (TLS) 加密提供免費證書,從而在 Web 服務器上啟用加密的 HTTPS。它通過提供可自動執行大部分步驟的軟件客戶端Certbot 來簡化證書的創建、驗證、簽名、安裝和更新過程。

如需申請Let's Encryp憑證需在伺服器端執行,以下為Xampp在CentOS7上使用 Let's Encrypt建立ssl憑證及自動更新ssl憑證方法

前置準備

1->安裝PuTTY 使用ssh連線進入伺服器端

如您有root權限,建議建議安裝以下自由軟體可更便利操作編輯設定,如果沒有root權限請跳過2.3

2->安裝filezilla 使用root->ssh連線進入伺服器端

3->安裝Notepad++,並吧filezilla預設編輯器設為Notepad++


開始設定(如有root權限不用輸入sudo)

1、首先要先關閉XAMPP伺服器,因為apache會占用80port或443port導致憑證申請驗證失敗,請輸入以下指令關閉Xampp

sudo /opt/lampp/lampp stop

2、安裝 Certbot Let's Encrypt 於伺服器端

要使用 Let's Encrypt獲取 SSL憑證,您首先需要安裝Certbot和mod_sslApache套件,它提供對SSLv3加密的支持。

增加 CentOS7 EPEL存儲庫,請輸入以下指令:

sudo yum install epel-release

3、安裝所有必需的套件:

sudo yum install certbot python2-certbot-apache mod_ssl

CENTOS 8需安裝certbot

sudo yum -y install epel-release mod_ssl certbot'

Ubuntu22.04需安裝certbot

sudo apt update

sudo apt install certbot



出現提示時輸入y並按下ENTER接受GPG密鑰

4、申請下載ssl證書(需使用正式網址,注意apache一定要是關閉狀態才不會被占用80port)

如為單一網址請輸入以下指令

sudo  certbot certonly --standalone -d example.com

如果有使用www請輸入以下指令

sudo certbot certonly --standalone -d example.com -d www.example.com

備註:example.com替換您目前的網址

過程中會提示輸入您的E-MAIL,請輸入實際使用的,之後憑證到期前會發送通知到此email

同意條款輸入A,然後其他提示輸入y,最後會顯示以下結果

IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at:

   /etc/letsencrypt/live/www.example.com/fullchain.pem

   Your key file has been saved at:

   /etc/letsencrypt/live/www.example.com/privkey.pem

   Your certificate will expire on 2021-12-17. To obtain a new or

   tweaked version of this certificate in the future, simply run

   certbot again. To non-interactively renew *all* of your

   certificates, run "certbot renew"

 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate

   Donating to EFF:                    https://eff.org/donate-le


Ubuntu22.04關閉自動更新(因為要重啟XAMPP需要使用自訂更新腳本)

sudo systemctl disable certbot.timer

sudo systemctl stop certbot.timer



到這裡就完成證書的申請流程,證書已經存放在伺服器的etc/letsencrypt/live/www.example.com/資料夾裡面,可以輸入以下指令觀看檔案

sudo cd /etc/letsencrypt/live/www.example.com/ 共有五個檔案

->cert.pem

->chain.pem

->fullchain.pem

->privkey.pem

->README

備註:www.example.com 改為您申請憑的網址

如果沒有這5個檔因該是第4項沒跑好,建議再重做一次

5、接下來要處理Xampp的部分,需指定憑證的位置,xampp的憑證設定是在 /opt/lampp/etc/extra/httpd-ssl.conf

如果有root權限直接用filezilla打開httpd-ssl.conf檔編輯,如果沒有請輸入sudo vi /opt/lampp/etc/extra/httpd-ssl.conf編輯

vi 編輯器操作教學:http://linux.vbird.org/linux_basic/0310vi/0310vi.php


搜尋以下三個關鍵字並做修改

->搜尋SSLCertificateFile 找到以下設定

SSLCertificateFile "conf/ssl.crt/server.crt"

替換為

SSLCertificateFile "/etc/letsencrypt/live/www.example.com/cert.pem"


->搜尋SSLCertificateKeyFile 找到以下設定

SSLCertificateKeyFile "conf/ssl.key/server.key"

替換為

SSLCertificateKeyFile "/etc/letsencrypt/live/www.example.com/privkey.pem"


->搜尋SSLCertificateChainFile 找到以下設定

#SSLCertificateChainFile "/opt/lampp/etc/server-ca.crt"

吧前面的#拿掉,替換為

SSLCertificateChainFile "/etc/letsencrypt/live/www.example.com/chain.pem"

備註:www.example.com 改為您申請憑證放置於/etc/letsencrypt/live/中的網址


另外還有三處要修改(不改亦可但SSL安全協定會使用TLSv1.0、SSLv3舊版的)修改完之後會是TLS 1.3

->搜尋SSLProtocol 找到以下設定

SSLProtocol all -SSLv3

替換為

SSLProtocol all -TLSv1.1 -TLSv1 -SSLv2 -SSLv3

httpd-ssl.conf中若無則增加此段設定


->搜尋SSLCipherSuite 找到以下設定

SSLCipherSuite HIGH:MEDIUM:!MD5:!RC4:!3DES

替換為

SSLCipherSuite ALL:+HIGH:!ADH:!EXP:!SSLv2:!SSLv3:!MEDIUM:!LOW:!NULL:!aNULL


->搜尋SSLHonorCipherOrder找到以下設定

#SSLHonorCipherOrder on 

吧前面的#拿掉,替換為

SSLHonorCipherOrder on


然後儲存檔案

完成以下步驟後重啟XAMPP

sudo /opt/lampp/lampp start

之後輸入https:網址進入網站https://www.example.com 會發現瀏覽器網址左邊出現一個鎖的圖案,點選後會顯示->已建立安全線練



不過如果您的網站表單網址還是http://,例如登入或聯絡我們post的網址是http://,左邊鎖的圖案點了會出現不安全的紅字,所以除了伺服器ssl憑證建立外,網站中全部的內連網址路徑包含資料表中的都要改成https://才行

6、最後是要做自動更新,如過沒有做 Let's Encrypt 憑證的效期90天後就會失效,當然您也可以手動驗證,到期之前Let's Encrypt 會寄通知信到您申請憑證的信箱。

以下是設定手動更新的方法

單一網址

sudo certbot certonly --standalone --renew-by-default -d example.com

www網址

sudo certbot certonly --standalone --renew-by-default -d example.com -d www.example.com

如果不想那麼麻煩,可以寫一個自動更新程式cron讓系統定時自己進renew!

首先先寫一個renew_ssl.sh =>請到root下面

sudo cd /root/

sudo vi renew_ssl.sh

然後貼上以下檔案

單一網址

/opt/lampp/lampp stop

certbot certonly --standalone --renew-by-default -d example.com

/opt/lampp/lampp start

www網址

/opt/lampp/lampp stop

certbot certonly --standalone --renew-by-default -d example.com -d www.example.com

/opt/lampp/lampp start

備註:www.example.com 改為您申請憑的網址

這樣在伺服器的root目錄底下就會建立一個renew_ssl.sh檔,然後裡面就會是我們需要執行的程式腳本

最後在設定自動更新時間

輸入以下指令

sudo crontab -e

輸入i編輯貼上以下內容

30 3 1 */2 * /root/renew_ssl.sh >> /root/renew_ssl.log 

按下 [ESC] 按鈕回到一般模式;

輸入:wq 儲存後離開 


Ubuntu22.04使用/bin/nano 編輯器

按下 Ctrl 鍵和 O 鍵以保存文件。會看到提示要求確認文件名,按 Enter 鍵確認。
然後,按下 Ctrl 鍵和 X 鍵以退出 nano。


儲存離開後將renew.sh給予執行權限。

chmod 755 /root/renew_ssl.sh

這樣每兩個月的1號清晨3點30分,執行/root/renew_ssl.sh 並且把 執行的結果紀錄放到/root/renew_ssl.log下,執行有問題可看此log

但有可能遇到更新失敗,例如伺服器網路剛好斷線,以上腳本執行一次後就不會執行,導致SSL憑證更新失敗,所以要加上遞迴處理程式!!

#!/bin/bash

echo "SSL renewal started at $(date)" >> /root/renew_ssl.log

/opt/lampp/lampp stop

certbot certonly --standalone --renew-by-default -d example.com

RENEWAL_STATUS=$?

/opt/lampp/lampp start

if [ $RENEWAL_STATUS -eq 0 ]; then
  echo "SSL renewal succeeded at $(date)" >> /root/renew_ssl.log
else
  echo "SSL renewal failed at $(date)" >> /root/renew_ssl.log
  sleep 1d
  /root/renew_ssl.sh
fi

以上內容貼到root/renew_ssl.sh

example.com 改為您的網址

//如果更新失敗會在隔天同一時間再次執行 /root/renew_ssl.sh,如果更新成功,則不會再遞迴執行。

最後如果是用編輯器換行符和 Linux 環境下不同,可能會導致檔案無法讀取,輸入以下指令轉換為 Unix 格式

sed -i 's/\r//' /root/renew_ssl.sh

7、最後在網站跟目錄/opt/lampp/htdocs放置一個.htaccess設定自動轉HTTPS://用編輯器打開輸入

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

然後是設定HSTS(一樣貼在.htaccess)

<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</IfModule>

這樣如果user輸入http://進入網站.htaccess會自動轉為https://,也支持嚴格的傳輸安全 (HSTS)



到這裡Xampp在CentOS7上使用 Let's Encrypt建立ssl憑證及自動更新ssl憑證工作就全部完成了,您可以用以下網址檢測憑證是否有效

https://www.ssllabs.com/ssltest/analyze.html?d=example.com

※吧example.com替換您的網址即可測試

https://check.twnic.tw/

由於前面已修改SSL安全協定為 TLS 1.3.,也設了HSTS,所以測試結果為A+,若無修改使用 TLSv1.0、SSLv3會顯示B



如果還沒申請憑證各大瀏覽器都會顯示不安全的紅色圖標,而且沒有ssl加密連線的網站於搜尋中排名也會下降,既然Let's Encrypt是免費的也不難申請,建議大家快去申請來使用吧。

參考資料來源

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-centos-7

https://pixlilen.pixnet.net/blog/post/1494496-%E5%AE%89%E8%A3%9Dlet%27s-encrypt%E5%85%8D%E8%B2%BB%E6%86%91%E8%AD%89%E5%9C%A8xampp%E4%B8%8A_2019?utm_source=PIXNET&utm_medium=Hashtag_article

https://www.brilliantcode.net/1229/apache-advance-settings-tlsv1-2-tlsv1-1-sslv3/


以上工作心得分享,有需要的朋友參考看看

工作心得撰寫:徐嘉裕 Neil hsu

留言

這個網誌中的熱門文章

好用的windows備份檔案dos指令XCOPY-教學撰寫:徐嘉裕Neil hsu

要快速的備份某個硬碟全部資料到備份硬碟中,雖然是可以用windows內建的備份與還原,但如果重灌windows可會有key不同而無法還原的問題,還要改一堆設定煩死了,直接用dos指令XCOPY來做檔案的複製就很快了,資料也不會丟失,好朋友可以參考看看!! 首先開啟windows所有程式->附屬應用程式->開啟命令提示字元! 然後輸入以下指令 XCOPY C:\xxx   F:\xxx /s 藍字的 C:\xxx  為複製檔案來源位置例如要複製整個C槽就輸入 C:\ 綠色的   F:\xxx 為複製目的位置,例如要放到F槽的備份資料夾,就輸入  F:\ 備份 紅字的 S 為複製類型參數,可以自行修改為以下的參數設定: ================================================================= /A    只複製設定成保存屬性的檔案,不要改變屬性的設定。 /M    只複製設定成保存屬性的檔案,並清除保存屬性。 /D:m-d-y  複製指定日期當天或之後變更的檔案。如果沒給日期,只複製那些來源檔案日期比目的檔案日期為新的檔案。 /EXCLUDE:file1[+file2][+file3]...         指定檔案清單字串。每個字串應在不同行。如果有字串對應到要進行複製的檔案絕         對路徑的任何部分,這個檔案會被排除複製。例如,指定字串         \obj\ 或 .obj 的話,會排除所有在 obj 目錄下副檔名是.obj 的檔案複製。 /P    在建立每個目的檔案時顯示提示。 /S    複製每個目錄及其包含的子目錄,不複製空目錄。 /E    複製每個目錄及其包含的子目錄,也複製空目錄。/S 與 /E相同,能夠用來修改 /T。 /V    驗證每個新檔案。 /W    在複製之前提示您按鍵繼續。 /C    如果錯誤發生時也繼續複製。 /I    如果目的不存在且複製一個以上的檔案的話,就假設指定的目的一定是目錄。 /Q    在複製時不要顯示檔名。 /F    在複製時顯示來源及

jQuery取得下拉選單selected中數值與內容的方法

假設選單狀態為: <select id='selectname '> <option value='v1' data-id="d1">選單A</option> <option value='v2' data-id="d2">選單B</option> <option value='v3' data-id="d3">選單C</option> </select> 以jQuery取得選單數值與內容方法如下: 1、取得下拉選單 value 數值的方法 $selectname=$('#selectname').val(); alert($selectname); //顯示選單中 selected 狀態的value數值v1 or  v2  or  v3。 2、取得下拉選單中 data-id 數值的方法 $data-id= $(this).find(':selected').attr('data-id'); alert($data-id); //顯示選單中 selected 狀態的data-id數值d1 or  d2 or  d3。 3、取得下拉選單中 文字 的方法 $selecttext=$(this).find(':selected').text(); alert($selecttext); //顯示選單中 selected 狀態的文字內容,如選單A or  選單B or 選單C。 教學撰寫:徐嘉裕 Neil hsu

CentOS7啟用ssh的設定方法-教學撰寫:徐嘉裕Neil hsu

安裝好CentOS7後可以在圖形化介面中點選右鍵->開啟服務器修改設定後啟用SSH設定,方法如下: 1、先安裝openssh套件 sudo yum install openssh* 2、用 gedit 開啟sshd_config編輯 (不要用vi很難編輯的) sudo gedit /etc/ssh/sshd_config 3、增加可連線SSH帳號 AllowUsers admin (此欄位需要自行新增) 4、修改PORT吧 # 註解拿掉 (可以改成8022PORT或其他PORT都可以) Port 22 搜尋PermitRootLogin吧 # 註解拿掉 PermitRootLogin no 再來把這兩行的 # 註解拿掉 PermitEmptyPasswords no PasswordAuthentication yes 搜尋Protocol設定使用SSHv2連線 Protocol 2 sudo systemctl restart sshd.service    重新啟動service sudo systemctl enable sshd.service    設定開機啟動SSH sudo semanage port -a -t ssh_port_t -p tcp 22      防火牆允許22 PORT 或 sudo firewall-cmd --permanent --zone=public --add-port=22/tcp 重新載入防火牆設定 sudo firewall-cmd --reload sudo  netstat -ant | grep :22 查看 22PORT 查詢現在SELinux設定清單中的SSH服務有哪些Port sudo semanage port -l | grep ssh ssh_port_t tcp 8022, 22 怎麼測試? 格式:登入帳號@IP或主機名稱 指令:-p SSH服務Port號 sudo ssh -p 22 admin@192.168.1.100 如設定的Port在清單中 ,那就表示SSH設定完成防火牆也開啟列外了,之後再用遠端的PuTTY輸入 IP/Port 連線,然後輸入 帳號/密碼,就能用SSH連線進入主機了, 在透