第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

HTTP 協(xié)議安全

1. 前言

上節(jié)我們討論了 HTTP 請求中,如何通過配置其頭部參數(shù)達到安全性提升的效果,本節(jié)將討論 HTTP 協(xié)議層面的安全性提升方法。

HTTP 通訊協(xié)議是一種明文傳輸協(xié)議,存在安全隱患,所以通常我們會使用 TLS 方式保障其安全。

本節(jié)我們主要討論 Spring Security 中的 HTTP 安全。

2. 關(guān)于 TLS

2.1 TLS 基本概念

TLS 是指傳輸層安全(Transport Layer Security)。

TLS 的作用包括:

  • 機密性。保護消息的內(nèi)容不被攻擊者獲取。
  • 完整性。保護消息不被攻擊者篡改,是真實可靠的。
  • 防重放。保護消息不被攻擊者截獲并再次發(fā)送。
  • 身份識別。允許客戶端驗證服務器的可靠性(注意客戶端的真實性只有在客戶端認證開啟時才進行)。

TLS 同樣也被很多其他協(xié)議用于保護機密性和完整性,并且有多種用法。我們在這里主要關(guān)注的是基于 HTTP 協(xié)議的 B/S 應用,將它升級為 HTTPS。

2.2 SSL 和 TLS 的關(guān)系

我們常常聽到 HTTP + SSL = HTTPS 這樣的觀念,那 SSL 和 TLS 有什么關(guān)系呢?

SSL 的全稱是 Secure Socket Layer,安全套接字層。SSL 最初用于 HTTP 加密傳輸,也就是 HTTPS 的早期形態(tài),后來出現(xiàn)了 SSL v2 和 SSL v3,不過這兩個版本都有些瑕疵,于是出現(xiàn)了SSL v3.1,SSL v3.1 后該協(xié)議被重命名為 TLS,并從 1.0 從新編排版本,再往后出現(xiàn)了 v1.1、v1.2 和 v1.3。

所以,從某種意義上講 SSL、SSL/TLS、TLS 這三種寫法的含義是相同的,我們多數(shù)情況還是把 HTTP 的安全框架稱為 SSL。

3. TLS 的應用

Spring Security 作為一種安全框架,本身并不處理是否使用 HTTP 方式連接,也就是說它不能直接建立 HTTPS 連接。但是它提供了一系列方法,使我們的 HTTPS 操作更加遍歷。

3.1 重定向到 HTTPS

當客戶端使用 HTTP 向服務端發(fā)送請求時,Spring Security 可以將請求自動轉(zhuǎn)換為 HTTPS 的連接方式。

例如,如下代碼強制所有 HTTP 請求重定向為 HTTPS 請求:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) {
        http.requiresChannel(channel -> channel.anyRequest().requiresSecure());
    }
}

3.2 強制安全傳輸

Spring Security 提供了對強制安全傳輸?shù)闹С?,并且其在默認情況下是開啟的。此部分在 HTTP 安全響應頭中也有過介紹。

例如,當我們訪問某個銀行網(wǎng)站「mybank.example.com」,當我們使用 https 方式訪問時,便避免了出現(xiàn)中間人攻擊。在開啟強制安全傳輸?shù)那闆r下,瀏覽器將所有將要發(fā)送到服務端的請求都強制為 https 協(xié)議。

此功能默認被開啟,如果需要修改它的默認配置,可通過如下方式進行配置:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // ...
            .headers(headers -> headers
                .httpStrictTransportSecurity(hsts -> hsts
                    .includeSubDomains(true) // 包含子域名
                    .preload(true) // 增加到瀏覽器內(nèi)置的 HTTPS 列表
                    .maxAgeInSeconds(31536000) // 強制期限
                )
            );
    }
}

4. 小結(jié)

本節(jié)討論了通過 HTTP + SSL 的方式,規(guī)避 HTTP 協(xié)議在安全上的不足。

圖片描述

  • HTTP 協(xié)議存在安全隱患,容易遭到惡意攻擊,例如中間人攻擊;
  • HTTP 安全時傳輸層安全的范疇,可以通過重定向 HTTP 連接和強制安全傳輸?shù)姆绞皆黾悠浒踩裕?/li>
  • Spring Security 支持通過配置將 HTTP 請求轉(zhuǎn)換為 HTTPS 請求;
  • Spring Security 支持為 B/S 應用強制使用安全傳輸。

下節(jié)我們討論如果通過 Spring Security 統(tǒng)一不同 Web 容器間的訪問控制差異。