安全通信

安全通信

應用層協議大多數自己都沒有實現加解密功能,比如http等。http就是直接把數據加載進來然后做簡單編碼(也就是流式化)然后響應客戶端,然后數據在瀏覽器展示,這個數據在傳輸過程是明文的,你截獲就可以直接查看。這顯然不安全,要想做到安全那么就只能在發送端加密然后接收端還能把信息還原成原來的內容,這就是加密解密。其實這個事情很好理解,加密解密在古代就有也不是現代的概念。在安全通信里面我經常聽到的2個東西就是SSL和TLS,這2個有什么區別呢?以及HTTPS是怎么通信的?

SSL和TLS

SSL

SSL是網景公司研發的一種功能模塊這種模塊或者叫庫就在應用層和傳輸層之間又加了一層,而且不是一整層只是半層,這要做的好處是你調用這個庫就可以使用這個功能如果不調用則還是按照之前的方式來使用,這個半層的庫就是SSL,叫做安全套接字層。不過SSL只是一種規范和協議并不是具體實現。OpenSSL則是對SSL的實現而且眾多實現中的一種。什么叫做一種實現呢?比如httpd和Nginx這兩個應用都是http協議的實現或者說x86是一種標準那么DELL和HP都可以基于這種標準來設計自己的電腦。

如果你自己本身不具備開發這種加密解密的功能,那么你就可以使用SSL完成這個工作,不過無論你自己開發還是使用SSL,這些加密解密協議都需要具備2個基本功能:

  1. 加密和解密

  2. 秘鑰分發

在Web應用方面,http調用了ssl就變成了https,雖然就是調用了ssl,但是http和https這兩個在機制上有巨大的區別。

TLS

叫做傳輸層安全,為什么有了SSL還會有一個和SSL類似的TLS呢?因為SSL協議是發明者是網景公司,它擁有版權,而且互聯網公司很多都需要使用安全通信,所以國際標準化機構就參照SSL弄了一個TLS協議。兩者兼容。TLS由IETF在1999年發布。那么由于SSL的3個版本有漏洞所有很多不用了。現在主流都使用TLS。總之你可以把TLS當做SSL使用其原理都是一樣的。

早期使用SSL較多后來大部分使用TLS,雖然我們平時會說ssl它可能指的是SSL也可以是TLS,所以你不用糾結它指的是什么你只要理解為一種安全通信機制就可以。所以我們后面會不加區分的統稱SSL。

為什么現在都是全站啟用SSL呢

之前很多網站都不是https,也只有某些特殊階段才使用,比如支付階段、登錄驗證階段。那么后來為什么大家包括百度搜索首頁這種都變成https了呢?

如果使用SSL加密那么服務端就需要解密,加解密其實非常消耗CPU資源,早期處于性能考慮不會大面積使用SSL,比如只是普通的瀏覽網頁沒必要進行安全通信。但是后來服務器性能越來越強而且大規模使用x86服務器以及有些網卡也支持SSL卸載,所以全站使用SSL也成為可能。

不過由于http是明文傳輸的,用戶訪問什么網頁其實可以通過流量攔截,數據可以被修改,有些不法行為就可以利用這一點來實現廣告投放,但是使用https通信則不會出現這種情況。

安全通信到底怎么安全呢?

基本概念

為了解決安全問題實現安全目標比如保密性、完整性、可用性等其解決方案有兩類,就是技術和服務,技術指的是加密和解密;服務指的是認證機制和訪問控制機制。
針對加密和解密以及實現服務功能的所用到的加密算法和協議就有如下幾種:對稱加密、非對稱加密、單向加密和認證協議。

在Linux上實現上述算法和協議的工具有OpenSSL(ssl協議的實現)和GPG(pgp協議的實現)。

數字加密算法

先說一下算法,雖然加密用秘鑰但是如何用這個秘鑰來對數據加密或者解密這個是算法來決定的,但是通常算法是公開的比如RSA(個別安全公司有自己的獨有的算法除外)所以是否安全不取決于算法而是秘鑰。

什么叫密碼,什么叫秘鑰?我上面那段話肯定會有人迷糊,密碼是編碼和解碼的規則你可以理解為加密和解密規則而秘鑰則是改變密碼行為的外在參數,也就是說相同的規則當你使用不同的秘鑰加密相同內容時加密后的結果也是不同的。比如字母移位這就是密碼,而移動N位的這個N則是秘鑰。假設移動3位,那么ABC則變成DEF。所以這就是為什么上面那段話的結論是不取決于算法(密碼)而是秘鑰。

對稱秘鑰加密:對稱加密算法有很多,但是無論什么算法加密解密都使用相同的秘鑰,好處是簡單計算量小也就是不會對CPU產生太大壓力,缺點以及密碼過多(你要和很多人通信就需要很多人的密碼)、密碼分發困難。因為你要讓對方可以解密你就需要把密碼先給對方,這個給密碼的過程要不要加密呢?這就變成了先有雞還是先有蛋的事情永遠扯不清。常用算法DES(目前已經棄用)、AES等。

非對稱秘鑰加密:有公鑰和私鑰,使用公鑰加密私鑰解密。如果A和B通信每個人都有一對兒公鑰和私鑰,彼此還都有對方的公鑰。A發信息給B則使用B的公鑰加密,然后B收到后使用自己的私鑰解密,然后B回復信息給A則使用A的公鑰加密,A收到后使用自己的私鑰解密。這個過程看似完美,可是由于公鑰大家都能獲取,B怎么知道信息是來自A而不是來自其他冒名A的人呢?這就是數字簽名,這個后面再說。非對稱加密主要用于數字簽名和秘鑰交換。加密數據雖然它也能做但是通常不這么用,你看后面的HTTPS通信過程就知道了。非對稱加密主要用來做對稱秘鑰的交換,完成交換后大家其實就是使用對稱密碼來做數據加密和解密。常用算法RSA(加解密和簽名)、DSA(僅能簽名)等。

單向加密**:不可逆的,只能加密不能解密,比如MD5、SHA1等。其實主要用來提取數據摘要或者說指紋,所以并不能算作我們常規意義上的加密。它的特點是數據微小變化都會導致指紋的不同,所以主要用來做數據完整性驗證。

特別注意:并不是說只能用公鑰加密私鑰解密,非對稱加密方式的目的就是使用一種秘鑰加密的數據必須能使用另外一種秘鑰解密,所以無論是公鑰還是私鑰都可以加密,我們之所以說用公鑰加密用私鑰解密是首先是因為公鑰是從私鑰中提取出來的,其次公鑰是公開的如果你用私鑰加密那么任何擁有該私鑰對應公鑰的人都可以解密 。所以才有公鑰發給其他人私鑰自己留存且用公鑰加密私鑰解密,因為只有這樣才能發揮這種非對稱加密或者說公鑰加密的主要作用也就是密碼交換和數字簽名。不過使用私鑰加密數據可以證明一件事情就是如果用該私鑰的公鑰可以解密那就證明這個數據一定是私鑰持有人發來的。

秘鑰交換(IKE,互聯網秘鑰交換):IKE實現的方式有公鑰加密和DH算法。這種標準主要用來做秘鑰交換。不過對于秘鑰交換來說更加安全的其實是DH算法,雖然常用的是公鑰加密方式。

公鑰加密最大的問題是密碼是要從一方傳送到一方,雖然使用對方的公鑰加密了。但是DH的好處是雙方不用發密碼而且雙方還可以得到密碼。

數字簽名

數字簽名的主要作用是為了檢查數據是否被篡改以及數據是誰發的(就是向對方證明此時他收到的消息是來自消息宣稱的人本人而不是冒名頂替的第三人,當然真正驗證對方身份的還不能僅僅靠數字簽名這個后面再說)。

按照上面的例子A發消息給B,A使用B的公鑰加密,B通過自己的私鑰解密,可是公鑰大家都可以獲得那么B怎么知道這個消息是來自A呢?難道僅僅憑借消息內容說我是A就斷定消息來自A么?另外B怎么確定信息在傳遞過程中沒有被篡改呢?

為了解決這個問題A對消息做哈希摘要(MD5算法或者SHA1算法等)然后用A自己的私鑰對摘要進行加密(數字簽名),然后把加密后的摘要和消息本身一起使用B的公鑰加密發送給B,這樣B收到消息后用自己的私鑰可以解密,然后用A的公鑰可以解密簽名(上面提到的摘要)如果成功就說明消息來自A。這就是簽名和驗證簽名過程。消息來源確認了,此時就會擔心消息傳遞過程中如果被篡改怎么辦?這就是那段被加密的摘要的作用,如果B使用相同的算法來計算信息的摘要,如果B計算得到的值和解密簽名后的得到的值一致說明信息沒有被篡改。

上面的過程的確看起來很好但是有一個漏洞就是所有的公鑰都要自己保存和管理萬一被別人替換了呢,或者說A和B從未通信過現在要做第一次通信如何把公鑰給對方呢?難道就不怕有人冒充A把自己的公鑰給了B那么反過來也是一樣,另外A對信息做哈希摘要的時候用的什么算法,萬一B沒有這個算法怎么辦呢,所以這就引出了CA和證書的概念。

為什么需要CA、證書以及CA根證書

公鑰加密私鑰解密,私鑰肯定是自己保存其實也就保存一份,如果我需要給很多人通信難道我要保存很多人的公鑰么?如果這個數量達到一個量級在管理上也很困難另外就是如何防止公鑰被篡改呢也就是如何驗證這個公鑰是不是我要通信的那個人的公鑰而不是別人發來冒充他的。如果要是有一個第三方機構來統一管理就好了,這就是CA證書管理機構。CA的作用就是對申請人的公鑰進行認證和加密,加密后的公鑰就是數字證書,又稱CA證書,證書中包含了很多重要信息比如申請人、用途、申請人支持的加密算法、申請人使用hash算法,證書有效期等其中最重要的就是證書申請人的公鑰。當然前提是通信雙方都要信任同一個CA機構。

那有了CA之后該怎么做呢?申請者需要自己生成自己的公鑰和私鑰,然后把公鑰和其他申請信息發給證書頒發機構,證書頒發機構自己也有公鑰和私鑰,然后證書頒發機構提取申請者的公鑰和其他信息的特征碼,然后CA使用自己的私鑰加密這個特征碼也就是簽名, 這樣形成一個由CA簽名的證書然后發送給申請者 。此時還是A和B通信且為第一次通信并且雙方都信任同一CA頒發機構 。

  1. A把自己支持的對稱加密算法、單向加密算法、公鑰加密算法以及自己的證書發給B
  2. B拿到信息后需要對A的證書解密(這樣才能獲取A的公鑰),但證書是CA用私鑰加密的需要用CA的公鑰解密這怎么辦?這就是CA根證書(包含CA的公鑰)的作用,B需要下載CA根證書并且安裝到自己的電腦里通常只需要安裝一次(通常現在操作系統 MacOX、Windows都已經內置了國際著名CA的根證書,因為全球著名CA都是有限的,Linux沒有內置)。有了這個根證書也就有了CA的公鑰,這樣就可以解密A的證書來獲取A的公鑰。能解密成功說明A的證書是CA頒發的。然后使用證書中的單向加密算法來計算證書的特征碼如果和解密簽名得到的特征碼一致則表明內容沒有被篡改,所以這一步完成了對A的身份驗證和證書信息的完整性驗證。
  3. 驗證完之后還要看該證書的有效期以及證書主體名稱和該證書是否被吊銷
  4. 驗證都通過之后B選擇自己支持的對稱加密算法、單向加密算法、公鑰加密算法以及自己的證書發送給A
  5. A采用相同的步驟來驗證B,如果驗證通過,這時候大家就確定了使用哪種對稱加密算法、單向加密算法、公鑰加密算法并且完成了雙方的公鑰交換以及身份驗證
  6. A使用對稱加密算法生成一個密碼,然后對密碼計算摘要,然后用自己的私鑰對摘要進行簽名,之后用B的公鑰進行加密發送給B
  7. B收到信息后使用自己的私鑰解密,然后使用A的公鑰解密簽名得到摘要,如果解密成功則說明是A發來的,然后對密碼提取摘要并和解密簽名得到的摘要對比,如果一直則說明信息完整,這時候就完成了密碼交換,從此雙發就可以使用對稱加密方式來通信。

上述這個過程就是大家通過CA來間接獲取通信雙方公鑰的過程。如果B使用CA的根證書無法解密A發來的證書說明就說明A的證書不是該CA簽發的,由于世界上公認的CA也就那么幾個所以如果B用這些CA的根證書都解密不了A的證書,那么就會提示風險,很有可能A這個證書就是一個自簽名的證書。

這里我們只是闡明概念,在實際應用中上述過程還有些不同,比如上面A發給B的包括簽名和證書以及信息,難道信息不加密么?如果加密用什么加密等。這些東西都會在具體應用場景中再說明。

既然明白了CA那么我們就說一下PKI。

PKI

公鑰基礎設施,以CA為中心所生成的一套體系就是PKI。它有四個重要組件:

  • 簽證機構,就是CA,這個是負責生成證書的

  • 注冊機構,就是RA,這個是負責接收證書申請的

  • 證書吊銷列表,就是CRL,這個是標記哪些證書已經不可用或者不可信了,相當于證書黑名單,這里的證書都不能被信任了。

  • 證書存取庫,就是CB,這里存放的是CA發的證書可以供其他人下載和使用

證書常用字段和格式

首先要說一下X.509,它就是證書標準,也叫做證書格式。所有證書都要符合這個標準,它定義了證書中包含那些內容。比如版本號、序列號(CA發的第幾個證書)、簽名算法ID(這個證書用什么算法做的簽名)、CA頒發機構名稱、證書有效期、申請者名稱、申請者公鑰、CA頒發機構的唯一標識、申請者的唯一標識、CA對該證書的簽名(用CA自己的私鑰對所有信息的摘要做簽名)等擴展信息。下面就看看證書中常見的字段:

字段含義
Common Name簡稱CN,對于SSL證書來說一般為網站域名;而對于代碼簽名證書則為申請單位名稱;而對于客戶端證書來說則是申請者名稱也可以當做用戶賬號名稱
Organization Name簡稱O,對于SSL證書來說一般為網站域名;而對于代碼簽名證書則為申請單位名稱;而對于客戶端證書來說則是申請者名稱也可當做用戶賬號所屬的組
Locality簡稱L,表示城市
State/Provice簡稱ST,表示省份
Country簡稱C,表示國家,比如中國為CN,美國為US

瀏覽器使用HTTPS訪問時它是怎么檢查證書和地址欄中的名稱呢?有下面三種方式

  1. 主機名(地址欄中的域名)與證書Subject中的CN字段完全匹配
  2. 主機名稱與通配符通用名稱相匹配,比如www.abc.com匹配通用名稱*.abc.co
  3. 主機名在主題備用名稱(Subject Alternative Name檢查sans)字段中列出

我們知道了X.509是證書格式,可是很多時候看到的.pem、.key都什么呢?,這里就要做一些區分,證書編碼格式和證書擴展名。

證書編碼格式

所有的證書都是通過X.509標準生成的證書,但是有2中編碼格式:

  • PEM(Privacy Enhanced Mail),它是基于X.509標準生成的,文件可讀可以直接打開查看,它是以"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"開頭和結尾且用Base64編碼的證書,這種編碼格式的證書通常是.pem擴展名。

    使用命令 openssl x509 -in XXX.pem -text -noout 來查看證書內容。

  • DER(Distinguished Encoding Rules),二進制格式的,無法直接讀取。

    使用命令 openssl x509 -in XXX.der -inform der -noout 來查看證書內容。

證書擴展名

雖然證書編碼格式有2種,但是擴展名有很多:

擴展名說明
.der用于DER編碼的證書
.pem它是基于X.509標準生成的,它是以"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"開頭和結尾且用Base64編碼的證書
.crt這種擴展名的證書可以是DER編碼也可以是PEM編碼,在Unix系統中常見。
.cer微軟系統常見,在微軟系統中可以將.crt轉換為.cer。同樣可以是DER編碼也可以是PEM編碼。
.key用于存儲公鑰和私鑰,同樣可以使用DER或者PEM編碼。
.csr這個不是證書文件,而是證書簽名請求文件,向CA申請獲得簽名證書時需要提供的申請文件。

HTTPS通信過程

雙向認證

1448094-20190511193638560-469048088.png

上圖為SSL的雙向驗證過程

  1. 瀏覽器發起https請求,生成隨機數(用于稍后生成會話秘鑰),并發送client_hello信息里面將自己支持的加密協議版本、加密算法、壓縮算法和生成的隨機數發送給服務端。
  2. 服務端收到信息以后,也生成隨機數(用于稍后生成會話秘鑰),并發送server_hello信確認自己客戶端發送來的協議版本、算法等。如果不支持那么就無法通信了。
  3. 服務端發送服務器證書給客戶端,并且要求客戶端也發送證書過來
  4. 客戶端檢查服務端證書合法性和有效性,通過以后,發送客戶端證書給服務端
  5. 服務器檢查客戶端的證書合法
  6. 客戶端把所有之前收到的信息做HASH,然后使用自己私鑰做簽名,發送給服務器端
  7. 服務端檢查哈希值和簽名
  8. 客戶端使用對稱加密算法生成一個加密密碼,然后使用客戶端公鑰進行加密發送給服務端
  9. 服務端收到以后就可以使用對稱加密密碼和客戶端通信
  10. 斷開連接

單向認證

HTTPS訪問通常使用單向認證,比如你訪問百度、淘寶、京東等雖然是https通信但是它們不會去驗證客戶端證書,客戶端只會去驗證服務端證書。為什么呢?因為證書花錢啊,哪個網站要是需要做客戶端證書認證那么估計就沒有人去訪問了,再有對于服務端來說它不在乎你是誰來的人越多越好。當然也有通信雙方要求做雙向認證的比如登錄網銀的U盾就是客戶端證書。

  1. 瀏覽器發起https請求,生成隨機數將自己支持的一套加密規則、協議版本發送給服務端。
  2. 服務端從中選出一組加密算法與HASH算法,服務端也生成一個隨機數并將自己的身份信息以證書的形式發回給瀏覽器。證書里面包含了服務端地址,加密公鑰,以及證書的頒發機構等信息。
  3. 客戶端獲得服務端證書之后瀏覽器要做以下工作:(驗證我訪問的www.abc.com是不是真正的那個www.abc.com,這個驗證過程就通過服務端證書和自己的CA根證書來完成)
    • 驗證證書的合法性和有效性(使用客戶端保存的CA根證書的公鑰解密服務端發來的證書的簽名,解密成功說明服務端證書可以信任,然后使用HASH算法計算證書摘要然后對比解密簽名后得到的摘要,如果一致則說明內容沒有篡改,然后 檢查證書中的其他信息,可以檢查證書中的域名和我訪問的域名是否一致 (這里防止釣魚網站)、檢查是否過期、檢查是否被吊銷等,如果檢查都通過則證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示。

    • 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數,然后把隨機數、編碼變更通知(表示隨后的通信都使用雙方商定的協議版本以及加密算法)和客戶端握手結束通知發送給服務器

  4. 服務端接收瀏覽器發來的數據之后要做以下的操作:
    • 這時候服務端會有3個隨機數,2個是客戶端發來的,一個是服務端自己產生的,用著三個隨機數并結合對稱加密算法生成“會話密碼”

    • 生成編碼變更通知、服務端握手結束通知

    • 使用商定好的HASH算法對會話密碼、編碼變更通知、握手結束通知計算摘要,然后使用自己的私鑰進行對摘要進行簽名,最后使用客戶端公鑰加密信息并發送給客戶端

  5. 瀏覽器解密,然后得到消息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之后所有的通信數據都使用得到的“會話密碼” 加密。

這里為什么在認證通過后的數據傳輸使用認證過程產生的隨機密碼呢?這是因為使用對稱加密解密性能要比非對稱的高,尤其是對服務端的CPU壓力比較小,但是如果使用一個長期固定的對稱密碼就很不安全而隨機生成的就會有一個如何告訴通信雙方且傳遞過程中不被竊取的問題所以就使用非對稱加密方式這樣不但保證了隨機密碼的安全同時也可以驗證服務端身份的真實性。

為什么會產生這么多隨機數呢?為了避免計算機上產生的隨機數不是真的隨機數,所以雙方都產生隨機數然后使用大家的隨機數來生成密碼。

轉載于:https://www.cnblogs.com/rexcheny/p/10849757.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448999.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

出現 java.lang.NullPointerException 的幾種原因、可能情況

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。一般報 java.lang.NullPointerException的 原因有以下幾種:1. 字符串變量未初始化 。 2. 接口類型的對象沒有用具體的類初始化…

純JPA 入門小案例(2)

2019獨角獸企業重金招聘Python工程師標準>>> JPA中的主鍵生成策略 通過annotation(注解)來映射hibernate實體的,基于annotation的hibernate主鍵標識為Id, 其生成規則由GeneratedValue設定的.這里的id和GeneratedValue都是JPA的標準用法。 JPA…

spring IoC/DI

一、spring創建對象的三種方式&#xff1a;1、通過構造方法創建無參構造創建&#xff1a;默認情況有參構造創建&#xff1a;需要明確配置<constructor-arg>中配置index&#xff1a;參數索引name&#xff1a;參數名type&#xff1a;參數類型&#xff08;區分基本數據類型和…

并發不是并行,它更好!

原文鏈接&#xff0c;譯文鏈接&#xff0c;譯者&#xff1a;雷哥&#xff0c;饒命&#xff0c;校對&#xff1a;李任 現代社會是并行的&#xff1a;多核、網絡、云計算、用戶負載&#xff0c;并發技術對此有用。 Go語言支持并發&#xff0c;它提供了&#xff1a;并發執行&…

詳解設計模式在Spring中的應用

設計模式作為工作學習中的枕邊書&#xff0c;卻時常處于勤說不用的尷尬境地&#xff0c;也不是我們時常忘記&#xff0c;只是一直沒有記憶。 今天&#xff0c;在IT學習者網站就設計模式的內在價值做一番探討&#xff0c;并以spring為例進行講解&#xff0c;只有領略了其設計的思…

開大你的音響,感受HTML5 Audio API帶來的視聽盛宴

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 話說HTML5的炫酷真的是讓我愛不釋手&#xff0c;即使在這個提到IE就傷心不完的年代。但話又說回來&#xff0c;追求卓越Web創造更美世界…

Microsoft Visual Studio 2010(vs2010) 中文版安裝

Microsoft Visual Studio 2010(vs2010) 中文版安裝 日期&#xff1a;2019-05-12 時間&#xff1a;20:03:36 編輯&#xff1a;張國富 下載地址 基本簡介 Microsoft Visual Studio&#xff08;vs2010是簡稱&#xff09;是微軟公司推出的開發環境。visual studio 2010…

JVM的幾點性能優化

HotSpot&#xff0c;家喻戶曉的JVM&#xff0c;我們的Java和Scala程序就運行在它上面。年復一年&#xff0c;一次又一次的迭代&#xff0c;經過無數工程師的不斷優化&#xff0c;現在它的代碼執行的速度和效率已經逼近本地編譯的代碼了。 它的核心是一個JIT&#xff08;Just-I…

IDEA配置 及 快捷鍵

出處&#xff1a; https://www.cnblogs.com/hero123/p/10120552.html 快捷鍵&#xff1a; 格式化代碼 CtrlaltL 后退Ctrlalt <- 格式化代碼快捷鍵&#xff1a;Ctrl Alt L 刪除整行&#xff1a;CtrlX 實現類 ctrl alt CtrlN 查找類 CtrlShiftN 查找文件 CTRLSHIFTALTN 查找…

LeetCode Decode Ways

123123轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/10854545.html

SpringBoot 之集成 Spring AOP

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 在開始之前&#xff0c;我們先把需要的jar包添加到工程里。新增Maven依賴如下&#xff1a; <dependency><groupId>org.spri…

9件事把你從消極情緒中解救出來

也許你很難相信&#xff0c;但是情緒可以通過重復形成習慣。消極情緒甚至可以變成某種嵌入你每日生活的東西。 如何將它們趕跑? 你發現你不斷地埋怨世界和自己?你可以輕易地生氣并且對人變得刻薄?那憤怒又是否成為你對事情本能的回應了?如果你對所述問題中的一個回答了“是…

數據庫主鍵自增插入顯示值

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主同意不得轉載。 https://blog.csdn.net/nwsuaf2009012882/article/details/32703597 SQL Server 2008 數據庫主鍵自增插入顯示值 前幾天在工作的時候遇到在刪除數據庫中表的數據的時候。刪除之后&#xff0c;又一次…

解決: This application has no explicit mapping for /error, so you are seeing this as a fallback.

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff0c;出現這個異常說明了跳轉頁面的url無對應的值. 原因1: Application啟動類的位置不對.要將Application類放在最外側…

Selenium自動化獲取WebSocket信息

性能日志 ChromeDriver支持性能日志記錄&#xff0c;您可以從中獲取域“時間軸”&#xff0c;“網絡”和“頁面”的事件&#xff0c;以及指定跟蹤類別的跟蹤數據。啟用性能日志 默認情況下不啟用性能日志記錄。因此&#xff0c;在創建新會話時&#xff0c;您必須啟用它。 Desir…

零負債之人的10個習慣

無論你是已下定決心要于今年實現零負債&#xff0c;還是距離這個目標的實現有很長的路要走&#xff0c;能受到啟發總是好事。 看看你認識的已經過上“無債一身輕”生活的人──朋友、家人、同事或是你認為可能與其他無負債之人具有類似品質的人。 下文為無負債之人的10個共同…

《App后臺開發運維與架構實踐》第3章 App后臺核心技術

2019獨角獸企業重金招聘Python工程師標準>>> 3.1 用戶驗證方案 3.1.1 使用HTTPS協議 HTTPS協議是“HTTP協議”和“SSL/TLS”的組合。SSL&#xff08;Secure Sockets Layer&#xff09;&#xff0c;即安全套接層&#xff0c;是為了解決因HTTP協議是明文而導致傳輸內容…

IntelliJ IDEA 配置 JDK

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 提前安裝jdk&#xff0c;配置環境變量 一、配置jdk 1、依次點開File -->Project Structure&#xff0c;點擊左側標簽頁&#xff0c…

xml編輯無提示?這么破!

在學習testng這個單元測試框架時&#xff0c;如果咱們碰到了編輯測試套件xml&#xff0c;不提示的情況&#xff08;有提示方便咱們學習&#xff0c;并且testng的測試套件定義必須按照他的dtd文件約束來&#xff09;&#xff0c;咱們可以按照下面的步驟去解決這個問題。 1.檢查t…

“云棲直播”升級為“公開課”

直播平臺是面向廣大開發者的視頻學習平臺&#xff0c;幫助廣大開發者學習最新技術&#xff0c;了解最新阿里云產品以及最新技術發展趨勢&#xff0c;幫助開發者們不斷學習與成長。截止到2019年3月&#xff0c;直播共進行800余場&#xff0c;觀看人次100萬。  社區將對“云棲直…