點一下關注吧!!!非常感謝!!持續更新!!!
🚀 AI篇持續更新中!(長期更新)
目前2025年06月13日更新到:
AI煉丹日志-29 - 字節跳動 DeerFlow 深度研究框架 私有部署 測試上手 架構研究,持續打造實用AI工具指南!📐🤖
💻 Java篇正式開啟!(300篇)
目前2025年06月11日更新到:
Java-44 深入淺出 Nginx - 底層進程機制 Master Worker 機制原理 常用指令
MyBatis 已完結,Spring 已完結,深入淺出助你打牢基礎!
📊 大數據板塊已完成多項干貨更新(300篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余項核心組件,覆蓋離線+實時數倉全棧!
目前2025年06月13日更新到:
大數據-278 Spark MLib - 基礎介紹 機器學習算法 梯度提升樹 GBDT案例 詳解
Tomcat 與 HTTPS 支持
HTTPS 是用來加強數據傳輸安全的,HTTP超文本傳輸協議,明文傳輸是非常不安全的,HTTPS在傳輸的過程中會對傳輸的數據進行加密。
SSL協議
基本介紹
TLS(Stransport Layer Security)協議
HTTP協議是互聯網應用最廣泛的數據傳輸協議之一,但HTTP本身不具備加密功能,傳輸的數據為明文,存在被竊聽、篡改、偽造的風險。
HTTPS協議則通過TLS(舊稱SSL)加密通道,提供:
- 數據機密性(Confidentiality):確保數據在傳輸過程中不會被竊聽。
- 數據完整性(Integrity):確保傳輸過程中數據不會被篡改或破壞。
- 身份認證(Authentication):客戶端和服務端之間可進行身份驗證,確認通信雙方的真實性。
工作原理
HTTPS在HTTP基礎上,引入了一個TLS/SSL加密層。通信步驟如下:
- 客戶端請求連接:客戶端向服務器發送HTTPS請求。
- 服務器響應并發送證書:服務器返回一個包含其公鑰的數字證書。
- 客戶端驗證證書:客戶端校驗數字證書是否合法。驗證證書上的域名是否與當前訪問域名匹配。
- 協商加密方式并生成會話密鑰:客戶端生成隨機的對稱密鑰(Session Key),使用服務器證書中的公鑰加密后傳給服務器。服務器用自己的私鑰解密獲得會話密鑰。
- 建立安全連接并傳輸數據:客戶端和服務器端使用會話密鑰進行數據加密和解密,實現安全通信。
術基礎
非對稱加密(公鑰加密)
- 使用一對密鑰,分別是公開密鑰(Public Key)和私密密鑰(Private Key)。
- 公鑰用于加密數據,私鑰用于解密數據,私鑰永遠只存儲在服務器端。
常用算法:
- RSA(應用廣泛,但速度較慢)
- ECC(橢圓曲線算法,效率更高)
對稱加密
- HTTPS傳輸數據的主體使用對稱加密技術,即客戶端和服務器端擁有相同的密鑰用于加密和解密數據。
常用算法:
- AES(高級加密標準)
- ChaCha20(性能好,安全性高)
數字簽名與證書
數字證書一般由第三方權威機構(Certificate Authority,簡稱CA)頒發,包含以下內容:
- 網站擁有者身份信息
- 公鑰
- 簽發機構的信息
- 簽名和有效期
客戶端通過CA根證書確認服務器證書的真實性和有效性,從而信任通信的另一方。
TLS握手過程
TLS握手過程是建立HTTPS通信的關鍵步驟,其具體流程:
- 客戶端發起連接,提出支持的TLS版本與密碼套件。
- 服務器回應自己的證書、公鑰、選定的密碼套件。
- 客戶端驗證證書有效性后,生成隨機密鑰,用服務器公鑰加密發送給服務器。
- 服務器用私鑰解密出會話密鑰,完成握手。
優缺點
優點:
- 數據傳輸安全,防止中間人攻擊(MITM)。
- 保護用戶隱私與敏感數據。
- 提升用戶對網站的信任感。
- 符合現代瀏覽器與搜索引擎的要求。
缺點:
- 部署成本較高(需要申請和更新證書)。
- TLS握手階段會增加網絡延遲和服務器資源開銷。
- 需要額外配置和維護證書有效性。
應用場景
- 電子商務(支付類網站)
- 銀行金融業務系統
- 電子郵件傳輸(如Gmail)
- 社交網絡、即時通訊服務
- 各種Web應用、API接口服務
HTTPS與HTTP的主要區別
● HTTPS協議使用時需要到電子商務認證授權機構(CA)申請SSL證書
● HTTP默認端口是8080端口,HTTPS默認使用8443端口
● HTTPS則是具有SSL加密的安全性傳輸協議,對數據傳輸進行加密,效果上相當于HTTP的升級版本。
● HTTP的連接是無狀態的、不安全的,HTTPS是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比HTTP協議安全。
HTTPS工作原理
Tomcat HTTPS
生成證書
首先我們需要生成免密的秘鑰證書
keytool -genkey -alias wzkicu -keyalg RSA -keystore wzkicu.keystore
對應的截圖如下所示:
生成結束后,在當前目錄下有了keystore文件:
配置XML
vim /opt/servers/apache-tomcat-9.0.98/conf/server.xml
當中的內容如下所示:
我們需要修改,Connect的部分:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" schema="https" secure="true" SSLEnabled="true"><SSLHostConfig><Certificate
certificateKeystoreFile="/opt/wzk/wzkicu.keystore" certificateKeystorePassword="123123" type="RSA"
/></SSLHostConfig>
</Connector>
修改之后對應的內容如下所示:
訪問網站
https://server:8443
執行結果如下圖所示(由于證書是自簽的,所以會提示不安全)
Tomcat 性能優化
Tomcat的性能優化本質上是圍繞這些核心功能進行合理的參數調優,以提高吞吐量、降低延遲,最大程度地利用系統資源。
基本介紹
系統性能的衡量指標,主要是響應時間和吞吐量。
● 響應時間:執行某個操作的耗時
● 吞吐量:系統在給定時間內能夠支持的事務數量,單位TPS(Transaction PerSecond 的縮寫,也就是事務數/秒,一個事務是指一個客戶機向服務發送請求然后服務器做出反映的過程)
Tomcat優化主要從以下方面進行:
● JVM的虛擬機優化(優化內存模型)
● Tomcat自身配置的優化(比如是否使用了共享線程池?IO模型?)
Tomcat優化涉及的關鍵區域包括:
- 連接器(Connector)優化
- 線程池優化
- JVM內存優化(堆、棧)
- 垃圾回收(GC)優化
- 緩存優化(靜態資源緩存、類加載器)
參數調整
Java虛擬機的運行優化主要是內存分配和垃圾回收策略的優化:
● 內存直接影響服務的運行效率和吞吐量
● 垃圾回收機制會不同程度的導致程序運行中斷(垃圾回收策略不同,垃圾回收次數和回收效率都是不同的)
連接器(Connector)
常用的示例:
<Connector port="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"acceptCount="100"maxConnections="10000"maxThreads="200"minSpareThreads="10"enableLookups="false"compression="on"compressibleMimeType="text/html,text/xml,text/plain,text/javascript,text/css"/>
- maxThreads:最大請求處理線程數,200~500,取決于系統資源
- minSpareThreads:最小空閑線程數(始終準備好的線程數),10~50
- acceptCount:等待隊列中允許的最大連接數,100~300
- maxConnections:同時處理的最大連接數(包含等待連接),根據系統與并發需求設定
- connectionTimeout:連接超時(毫秒),20000(20秒)左右
- enableLookups:DNS反查開關,false(可提升速度)
- compression:是否啟用GZIP壓縮,on
- compressibleMimeType:允許壓縮的內容類型,文本類如text/html、text/css等
APR連接器優化
使用APR連接器(需安裝native庫)可大幅提升性能,尤其對于高并發和靜態資源較多的場景。
如果使用APR連接器(如protocol=“org.apache.coyote.http11.Http11AprProtocol”):
<Connector port="8080"protocol="org.apache.coyote.http11.Http11AprProtocol"connectionTimeout="20000"maxThreads="500"acceptCount="500"maxConnections="20000"enableLookups="false"keepAliveTimeout="15000"/>
Java虛擬機內存相關的參數
在Tomcat啟動腳本中優化JVM:
JAVA_OPTS="-server -Xms2G -Xmx2G -Xss512k \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError \
-Djava.awt.headless=true"
● server:啟動Server,以服務端模式運行(服務端模式建議開啟)
● Xms:最小堆內存(建議與Xmx設置相同)
● Xmx:最大堆內存(建議設置為可用內存80%)
● XX:MetaspaceSize:元空間初始值
● XX:MaxMetaspaceSize:元空間最大內存
● XX:NewRatio 年輕代和老年代大小比值,取值為整數,默認為2
● XX:SurvivorRatio Eden區與Survivor區大小的比值,取值為整數,默認為8
內存設置(Xms和Xmx)應根據機器物理內存與應用負載確定,一般兩者設定相同以減少GC頻繁調整。選擇合適的GC算法可有效減少垃圾回收暫停,提升應用響應性能。
Web應用參數優化
主要是 web.xml 的配置
<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><init-param><param-name>readOnly</param-name><param-value>true</param-value></init-param>
</servlet>
- listings:是否允許顯示目錄列表,false
- readOnly:是否禁止Tomcat鎖定靜態文件,true
禁用listings可防止目錄暴露,提高安全性;readOnly開啟后Tomcat不會鎖定靜態文件,從而提升文件訪問性能。
其他優化
- 連接池(如HikariCP):合理配置數據源連接池以減少連接頻繁創建銷毀的開銷;
- 負載均衡:通過Nginx或Apache httpd等反向代理實現負載均衡和靜態資源處理;
- 緩存技術:采用Redis、Memcached等緩存熱點數據;
- 操作系統層面優化:如打開系統TCP快速回收、減少TIME_WAIT、優化文件句柄數。