TLS

SAS 資訊安全 (12)

教學目標

初步了解如何透過設定在 SAS Viya 平台中採用符合企業安全政策所簽發的憑證。

重點概念

首先 SAS Viya 平台主要使用的 Apache HTTP 伺服器當成反向代理伺服器,並且在部署時 Ansible 的 Playbook 將會自動安裝 Apache httpd 服務和 mod_ssl 模組,同時會使用預設 Apache 的安全設定,以及建立自簽憑證。然而在客戶端通常會需要透過客製憑證取代自簽憑證,以及強化預設加密強度,當我們進行任何變更之後,請務必重新啟動 httpd 服務和 SAS Viya 服務。

重新啟動 Apache 的 httpd 服務

1
# sudo service httpd restart

重新啟動 SAS Viya 的所有服務

1
2
3
# cd /etc/init.d
# sudo ./sas-viya-all-services stop
# sudo ./sas-viya-all-services start

接著 SAS Viya 平台進行完整部署時預設能夠透過 HTTPS 安全協定存取 SASHome 網站服務,其網址為「https://reverse-proxy-server/SASHome/」。但若是僅程式部署則 SAS Viya 使用者必須使用 HTTP 連接 SAS Studio 或 CAS Server Monitor,因為 Apache HTTP 伺服器預設沒有支援 HTTPS,以及沒有 SASHome 能夠進行存取。此外當我們透過瀏覽器以 HTTPS 安全協定存取 SASHome 網站服務時,瀏覽器將會顯示不安全,主要是因為憑證是由 SAS Viya 平台中的 Vault 服務產生的自簽憑證,還未加入至「受信任的根憑證授權單位」的憑證存放區中,因此顯示不安全。這時我們只要將自簽憑證安裝至「受信任的根憑證授權單位」的憑證存放區中重新啟動瀏覽器就能夠顯示安全存取。

再來在 Apache 伺服器中使用 TLS 加密協定主要是採用 OpenSSL 中的 mod_ssl 模組,因此 SAS Viya 建議使用 /etc/httpd/conf.d/sas-ssl.conf 檔案設定密碼的強度,並且在 /etc/httpd/conf.d/ssl.conf 檔案中的載入 sas-ssl.conf 設定檔。

編輯 sas-ssl.conf

1
2
3
4
5
6
7
8
9
10
11
12
Header set Strict-Transport-Security "max-age=31536000"
SSLProtocol TLSv1.2
SSLHonorCipherOrder On
# The line containing variable SSLCipherSuite and values
must not include line breaks
SSLCipherSuite
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:
ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:
AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:
AES128-SHA256

編輯 ssl.conf

1
2
3
4
5
<VirtualHost_default:443>

Include /etc/httpd/conf.d/sas-ssl.conf

</VirtualHost>

最後在企業中部署 SAS Viya 平台時建議使用符合企業安全政策所簽發的憑證取代 Apache httpd 服務中的憑證。首先必須將憑證檔案和信任鏈檔放置「/etc/pki/tls/certs」目錄中,並且更改權限為 644,以及將私密金鑰放置「/etc/pki/tls/private」目錄中,並且更改權限為 600,同時在 /etc/httpd/conf.d/ssl.conf 檔案中編輯相關檔案的路徑設定,以及重新啟動 SAS Viya 的 httpproxy 服務和 Apache 的 httpd 服務。

編輯 ssl.conf

1
2
3
4
5

SSLCertificateFile /etc/pki/tls/certs/custom.crt
SSLCertificateKeyFile /etc/pki/tls/private/custom.key
SSLCertificateChainFile /etc/pki/tls/certs/custom-chain.crt

重新啟動 SAS Viya 的 httpproxy 服務

1
2
# cd /etc/init.d
# sudo ./sas-viya-httpproxy-default start

重新啟動 Apache 的 httpd 服務

1
# sudo service httpd restart

此外我們還必須修改 vars.yml 檔案中的 HTTPD_CERT_PATH 的路徑指向為 CA 根憑證或中繼憑證,並且透過 Ansible 工具將憑證部署至 CA 憑證目錄中和重新建立信任區域至每台機器中,最後重新啟動 SAS Viya 所有服務,就能夠在 SAS Viya 平台中採用符合企業安全政策所簽發的憑證。

編輯 vars.yml

1
HTTPD_CERT_PATH: '/install/sas/sas_viya_playbook/certs/custom_chain.crt'

執行 Ansible 指令

1
# ansible-playbook -i inventory.ini utility/distribute-httpd-certs.yml

重新啟動 SAS Viya 的所有服務

1
2
3
# cd /etc/init.d
# sudo ./sas-viya-all-services stop
# sudo ./sas-viya-all-services start

總結我們能夠透過設定在 SAS Viya 平台中採用符合企業安全政策所簽發的憑證。此外若是僅更換 httpd 服務的憑證,則雖然可以開啟 SAS Logon 的登入網站,但是登入之後將會發生 500 錯誤訊息,所以必須透過 Ansible 工具將憑證部署至 CA 憑證目錄中和重新建立信任區域至每台機器中完成,以利正常透過 HTTPS 安全協定存取 SAS Viya 平台。

相關資源

SAS 資訊安全 (3)

基本介紹

教學目標

初步了解 SAS 解決方案中有關加密協定和數位憑證的設定。

重點概念

所謂 TLS/SSL 加密協定主要是的建立安全連線的協定,其中包括:

  1. 數位識別憑證:由可被信任的憑證頒發機構簽署數位識別憑證,以利驗證確保機密性
  2. 公開/私有金鑰加密:秘密交換對稱金鑰,像是 SSL Hankshake。
  3. 加密演算法:訊息透過對稱金鑰搭配加密演算法進行加密,以利確保通訊的安全。
  4. 訊息驗證碼:透過訊息驗證碼確保資訊的完整性。

因此我們 TLS/SSL 加密協定主要是被設計於提供網路資料隱私、資料完整性和身份驗證,其主要是使用 X.509 數位憑證和非對稱加密驗證伺服器判斷是應用程式伺服器或使用者,當訊息進行交換時就會有被攔截和被仿冒的風險,憑證頒發機構主要針對伺服器提供可被信任的公開金鑰,簡單來說,憑證頒發機構會產生包括公開金鑰且已被簽署的數位憑證。此外憑證頒發機構主要有三種類型,第一種是自行簽署的憑證 (Self-Signed Certificate),第二種是網站簽署的憑證 (Site-Signed Certificate) ,像是由 IT 部門所簽署的憑證,以及第三種是第三方簽署憑證 (Third-Party-Signed Certificate),像是 GoDaddy、Comodo、Symantec、…第三方公司所簽署的憑證等。

在 SAS 9.4 平台的架構需要針對不同元件進行 SSL 設定,分別為 SAS Web Server、SAS Web Application Server、SAS Deployment Agents 和 SAS Environment Manager ,然而每個元件皆會需要進行不同的設定,因此是件非常複雜的設定,本篇主要說明如何進行 SAS Web Server 和 SAS Web Application Server 的安全連線設定,簡單來說,就是 SAS Web Server 會有憑證和私有金鑰,而 SAS Web Application Server 會有 CA 憑證和公開金鑰,透過 HTTPS 安全連線進行資訊加密和身份識別,請注意此時 SAS Web Application Server 為 SSL 客戶端所以沒有私有金鑰,其中 CA 憑證基本上需要透過 Keytool 或 SAS Deployment Manager 自動匯入至 JKS Trust Store 中。

首先 SAS Web Server 主要是採用 Vmware 的 Pivotal Web Server (前身為 vFabric Web Server 5.2),基於 Apache 2.2 的開源網頁伺服器,主要會由部署精靈自動設定 Apache 中的 mod_proxy 模組,以利完成 SAS Web Application Server 之反向代理伺服器的設定, SAS Web Server 是由 OpenSSL 建立原生應用程式,所以不會使用 Java Keystore,其中會有憑證和私有金鑰,憑證主要是 X.509 格式其包含伺服器的公開金鑰,由 Base64 編碼 ASCII 的 PEM 格式檔案所儲存,私有金鑰主要是 RSA 格式,不被密碼所保護,由 Base64 編碼 ASCII 的 PEM 格式檔案所儲存 。但是若要針對 SAS Web Server 和 SAS Web Application Server 或 SAS Web Application Server Node 之間流量進行加密,則要進行後續手動的設定 Apache 中的 mod_ssl 模組,無法透過 SAS 部署精靈自動部署,同時 SAS 部署精靈僅不會針對自行簽署的憑證進行設定至 Trust Stores 中,SAS Web Application Server 主要是採用 Vmware 的 Pivotal tc Server,所以是採用 Java Keystore 儲存私有金鑰和伺服器憑證。部署精靈僅能設定 SAS Web Server 的單向 SSL,簡單來說就是伺服器端識別憑證以利驗證 SSL 客戶端,至於雙向 SSL ,簡單來說就是客戶端識別憑證以利進行單一登入驗證之應用,則僅能透過手動的方式進行設定。

接著當我們設定 SSL 時需要修改網頁伺服器的設定檔,其中 httpd.conf 為 Apache 主要設定檔,httpd_ssl.conf 為 SSL 安全連線設定檔,請先備份「\Web\WebServer\conf 」資料夾至新的資料夾,請保持資料夾結構一樣,以利之後還原直接複製貼上,其中主要設定檔有:

  • \Web\WebServer\conf\httpd.conf
  • \Web\WebServer\conf\extra\httpd_ssl.conf

再來我們會需要修改每個應用程式設定時將會針對不同網頁應用程式伺服器修改的設定檔,server.xml 為連接器的屬性,wrapper.conf 為 JKS TrustStore 位置主要進行 SAS Web Server 識別憑證的驗證,所以建議先備份 「\Web\WebAppServer\SASServerm_n\conf」 資料夾至新的資料夾,請保持資料夾結構一樣,以利之後還原直接複製貼上,其中主要設定檔有:

  • \Web\WebAppServer\SASServerm_n\conf\server.xml
  • \Web\WebAppServer\SASServerm_n\conf\wrapper.conf

最後我們會透過「SAS Management Console 工具」開啟「設定管理員」針對每個應用程式手動設定內部連線和外部連線,在此之前建議先進行中繼資料備份,以避免後續設定發生問題時快速還原,相關備份檔案會儲存至「 \Lev1\SASMeta\MetadataServer\Backups\ 」資料夾。

總結 TLS/SSL 加密協定搭配 X.509 憑證除了能夠針對網路傳輸的資料進行加密之外,更滿足網路資料隱私、資料完整性和身份驗證等需求。若已經確認要採用 HTTPS 安全連線,則建議在部署之前提供憑證,並且透過 SAS 部署精靈進行自動設定,自動設定主要會參考伺服器憑證和私有金鑰更新設定檔案,以及自動設定儲存至中繼資料中每個應用程式的內部連線和外部連線。

相關資源

SAS 資訊安全 (2)

基本介紹

教學目標

初步了解 SAS 解決方案中有關資料傳輸加密的設定。

重點概念

現今有越來越多來企業客戶非常關注資訊安全的議題,在 SAS 9 平台中有關資訊安全的應用功能主要包括稽核、驗證、授權、加密和角色存取等。其中對於加密應用功能而言,我們會專注於兩大領域,分別為資料儲存加密和資料傳輸加密,在 SAS 9 平台加密模型主要有兩大應用情境,分別為:

  • Data at rest:主要是強調保護中繼資料儲存體中的密碼和設定檔,像是加密 SAS 資料集。
  • Data in motion:主要是強調保護傳輸中的密碼,像是 設定 HTTPS 安全連線。

此篇文章主要先專注於資料傳輸加密,進行 HTTPS 安全連線設定,也就是 Data in motion 的情境。

首先最常用於資料傳輸加密主要是在 HTTP 傳輸協定上進行加密,也就是大家所知的 HTTPS 安全連線,然而在 SAS 9.4 平台可以根據不同需求進行不同伺服器的 HTTPS 安全連線,其加密演算法為 TLS,伺服器主要有:

  1. SAS Web Server
  2. SAS Workspace Server
  3. SAS Pooled Workspace Server
  4. SAS Stored Process Server
  5. SAS Web Application Server
  6. SAS Environment Manager Server

接著 SAS 網頁伺服器通常會在 DMZ 區域,我們將會修改 mod_ssl 和 mod_proxy 等模組進行 HTTPS 安全連線的設定,接著才會個別設定 SAS 網頁應用程式伺服器中的 server.xml 、wrapper.conf 、… 等設定檔,以及透過 SAS Management Console 分別設定內部連線和外部連線。此外 SAS Environment Manager 預設的 HTTPS 安全連線的連接埠預設為 7443,以及 LASR 驗證伺服器皆需要特別進行設定。

再來客戶端應用程式則透過連線設定檔將 HTTP 連線設定為 HTTPS ,像是我們會設定 SAS Management Console 與 SAS Content Server 進行安全連線,請注意透過 SAS 部署精靈僅能針對 SAS Web Server 和 SAS Environment Manager Server 進行自動設定,但是無法針對 SAS Web Application Server 進行自動設定。

最後我們再評估如何進行安全連線的設定時,通常會先分成三層,分別為 Internet 、 DMZ 和 SAS Middle Tier 三層,其中 DMZ 層主要為 SAS Web Server ,我們一般會設定連接埠為 443 的 HTTPS 安全連線,而 SAS Middle Tier,我們一般則會設定連接埠為 8443 的 HTTPS 安全連線,此外除非有要求否則不會特別設定 SAS Middle Tier 層的 HTTPS 安全連線,通常僅會設定至 DMZ 層的 HTTPS 安全連線。

總結我們透過設定 HTTPS 安全連線滿足企業在於加密應用功能的需求之外,更進一步透過憑證中的公開金鑰還可以進行識別與信任的應用功能,將會在後面的文章進行說明。

相關資源

SAS 資訊安全 (1)

基本介紹

教學目標

初步了解 SAS 解決方案中資訊安全相關設定。

重點概念

SAS 解決方案是否足夠安全這是個很好的問題,一般來說,我們對於安全的認知僅限於驗證帳號密碼和加密傳輸中的資料,然而在安裝 SAS 解決方案時則會有許多安全相關的設定,分別為:

  1. 設定傳輸層網路安全協定。
  2. 設定伺服器之間安全連線。
  3. 設定使用者帳戶和稽核記錄。

不論我們是否為需要關注關於公司安全政策 IT 專家,或者 SAS 管理需要有能力說明 SAS 功能和設定 SAS 軟體符合 IT 標準, 或者稽核人員需要審核特定有關安全弱點的問題,皆建議可以了解 SAS 解決方案是如何透過設定符合資安管理與政策規範。

設定傳輸層網路安全協定

傳輸層安全連線 (Transport Layer Security,TLS) 、安全 Socket 連線層 (Secure Socket Layer,SSL) 和加密協定皆是被設計於提供通訊安全,其中 TLS 和 SSL 協定主要皆是提供網路資料隱私,資料完整性和身份驗證的功能,其中若在 HTTP 超連結文字傳輸協定上加上 TLS 或 SSL 協定就會是所謂的 HTTPS 安全連線,主要提供網站伺服器已被加密的安全通訊。至於要如何進行身份驗證則主要會以憑證為基礎,主要是採用 X.509 憑證其中會有被使用於 TLS Handshake 的公開金鑰。所謂 TLS Handshake 協定主要責任是進行身份驗證和金鑰交換以利建立安全 Session。此外安全的應用程式資料主要會在建立 Handshake 期間透過對稱性金鑰進行加密,然而若想要深入了解憑證是如何被簽署、憑證如何被鏈結和憑證如何被驗證有效,則可以參考「Tips and Techniques for Using Site-Signed HTTPS with SAS 9.4」 文章會有更詳細的解說,此外有關 TLS 憑證細節則可參考 RFC 5280 技術標準

當訊息在伺服器之間進行資料交換時將可能會發生被攔截訊息或被模擬行為的風險。當我們進行安全連線設定流程時,管理者需要建立適當的憑證格式,請注意一定要被組織中的第三方單位進行簽署,或者向憑證頒發機構發出請求產生包括公開金鑰的憑證,同時進行簽署,所謂憑證頒發機構 (Certificate Authorities,CA) 是可被信任的單位,主要包括公開金鑰,此時我們僅需要根據伺服器傳送時被簽署的憑證就能夠持續進行識別。然而 SAS 官方所提供的文件主要皆是假設憑證皆是建立被網站簽署的憑證,此外在部署時第三方簽署憑證會以 Mozilla CA 憑證清單 為主。

對於 TLS Handshake 主要會要驗證 X.509 憑證,像是網站簽署或第三方簽署的憑證,此外驗證演算法還會確認憑證是否有問題,直到被信任憑證頒發機構被找到時,此時就會建立安全連線,至於客戶端則會持有被信任憑證頒發機構的清單。然而不同類型的客戶端會有不同信任提供者,像是 SAS 9.4 M3 版本中新的信任提供者主要為 SAS Security Certificate Framework,其被使用於 Java 應用程式和 SAS 網頁應用程式伺服器,此外我們在 SAS 9.4 M3 版本中可以透過 SAS Deployment Manager 加入網站簽署和 Root CA 的憑證至 SAS Security Certificate Framework 中。

在 SAS 9.4 M3 版本中任何安全皆會包括 SAS Private Java Runtime Environment 和 SAS Security Certificate Framework,因此任何在 SAS 中被安全的 Java 程序皆會使用 SAS Security Certificate Framework 當成信任提供者,請注意 SAS 已經不再使用預設 JSSE Truststore (cacerts) 為信任提供者,至於 SAS Private Java Runtime Environment 主要則是使用 JRE Truststore 建立信任。

至於 SAS Deployment Manger 是如何安裝 Trusted CA Bundle,第一步安裝 Mozilla Bundle 主要會將 Mozilla CA Certificate List 相關的兩個憑證檔案 cacerts.pem 和 cacerts.jks 儲存至 SASHome/SASSecurityCertificateFramework/1.1/cacerts 的目錄中,第二步建立 Trusted CA Bundle 主要會將 Mozilla CA Certificate List 轉換為 Trusted CA Bundle 相關的兩個憑證檔案 trustedcerts.pem 和 trustedcerts.jks 儲存至 SASHome/SASSecurityCertificateFramework/1.1/cacerts 的目錄中,第三步在 SAS Private JRE 中建立 Trusted CA Bundle 主要會將 Trusted CA Bundle 相關的憑證檔案 trustedcerts.jks 轉換為 jssecacerts 儲存至 SASHome/SASPrivateJavaRuntimeEnvironment/9.4/jre/lib/security 的目錄中,第四步將客戶的 CA 憑證匯入至 Trusted CA Bundle 中,主要是將客戶的 CA 憑證轉換為 trustedcerts.pem 和 trustedcerts.jks 憑證檔案儲存至 SASHome/SASSecurityCertificateFramework/1.1/cacerts 的目錄中,接著再將 trustedcerts.jks 憑證檔案轉換為 jssecacerts 憑證檔案儲存至 SASHome/SASPrivateJavaRuntimeEnvironment/9.4/jre/lib/security 目錄中。

設定伺服器之間安全連線

在 SAS 解決方案中的伺服器需許我們透過網頁瀏覽器存取資料和執行多種任務,其中針對 SAS 網頁伺服器和 SAS 網頁應用程式伺服器會需要網路安全和隱私,所謂 SAS 網頁伺服器主要是被設定單一連線至 SAS 網頁應用程式伺服器的入口,通常我們將會需要啟用 TLS 安全,同時設定 SAS 網頁伺服器支援 HTTPS 安全連線,基本上 SAS 部署精靈皆會自動完成這些安全安裝與設定。

至於 SAS 網頁應用程式伺服器主要是透過 SAS 網頁伺服器與外部網路進行溝通,然而有些企業會要求設定 SAS 網頁伺服器和 SAS 網頁應用程式伺服器皆要支援 HTTPS 安全連線,也就是在每個伺服器中設定 HTTPS 安全連線確保 SAS 網頁應用程式皆是在安全環境中進行溝通。一般來說,SAS 網頁伺服器可以在透過 SAS 部署精靈和 SAS 部署管理員自動進行設定,然而 SAS 網頁應用程式伺服器必須手動設定 HTTPS,主要步驟為:

  1. 設定 SAS 網頁應用程式伺服器中連接資訊。
  2. 設定 SAS 網頁應用程式伺服器中 JVM 選項。
  3. 設定 SAS 網頁伺服器。
  4. 重新啟動 SAS 網頁伺服器和網頁應用程式伺服器。

此外 SAS 網頁伺服器也能夠進行手動設定,主要步驟為:

  1. 設定 SAS 網頁伺服器之 httpd-ssl.conf 設定檔。
  2. 設定 SAS 網頁應用程式伺服器中連接資訊。
  3. 設定 SAS 內容伺服器連線資訊。
  4. 設定 SAS 視覺分析伺服器,確認更新 SAS LASR 授權服務。
  5. 設定 SAS 環境檔案。
  6. 設定 SAS 環境管理員。
  7. 設定 SAS 內容伺服器中 JVM 選項。
  8. 重新啟動 SAS 網頁伺服器和網頁應用程式伺服器。

設定使用者帳戶和稽核記錄

在企業通常會需要 IT 單位執行有關於系統使用情況的稽核報表,一般來說內部稽核主要被設計於監控系統和軟體使用的情況,外部稽核則主要會皆對外部稽核員的要求提供符合規範的報表,像是 SOX、PCI-DSS、HIPAA、…等,然而現今許多規範和稽核審查還是主要專注於使用者活動和哪個人存取什麼樣的資訊。

在 SAS 解決方案中主要能夠整合不同外部使用者的帳號進行驗證,像是 Active Directory 、 LDAP 、… 等目錄服務,接著針對 SAS 中繼資料進行授權,主要授權哪些使用者可以存取什麼資料和應用程式,同時建議針對每個使用者在 SAS 中繼資料中建立個別的識別,同時關聯外部使用者的帳號進行驗證 ,此外 sasadm@saspw 和 sastrust@saspw 則是沒有關聯外部使用者帳號的內部使用者帳號屬於特殊情況,請注意針對 SAS 中繼資料進行使用者的存取控制將會是一門深奧的學問,將會再之後進行深入的介紹。

至於報表的呈現主要則會透過 SAS 環境管理員和 SAS 視覺分析管理員進行報表樣版的設定,請注意通常系統會收集與分析在系統層級與使用者相關的活動,像是在 SAS 環境管理員中則有 Auditing and the Service Architecture Framework 主要收集稽核矩陣的相關資料,以及報表中主要提供標準報表和摘要報表,此外 SAS 視覺分析管理員中也有提供使用者操作行為的稽核報表,以及 SAS 網頁應用程式伺服器也可以透過設定的方式產生稽核報表所需的資料。

總結 SAS 解決方案有許多安全相關的設定,像是設定傳輸層網路安全協定、設定伺服器之間安全連線和設定使用者帳戶和稽核記錄,主要專注於 SSCP 認證中資訊安全通識體系中的存取控制和網路與通訊安全的兩大領域,因此我們可以先透過設定的方式讓 SAS 解決方案更安全,接著針對無法符合資安規範的部份進行客制化 Java 程式開發,理應就能夠滿足企業大部份資安管理與政策規範的要求。

相關資源

技術標準 SSL/TLS (1)

教學目標

初步了解 SSL 和 TLS 安全協定的基本概念。

重點概念

基本介紹

安全通訊協定 (Secure Socket Layer,SSL) 和傳輸層安全協議 (Transprot Layer Security,TLS) 皆是安全協定,主要目的在於提供安全的網際網路通訊。SSL 目前已經普遍應用於 HTTP 連線,主要是以「HTTPS://」網址開頭進行連線,目前 SSL 3.0 主要是在 1996 年就進行定義,但是在 2014 年 Google 就發現 SSL 3.0 的設計缺陷,將會導致 SSL POODLE 攻擊,因此禁用 SSL 3.0 而建議採用 TLS 安全協定,至於相關安全機制的演算法主要可分為金鑰交換、加密和資料完整性三大部份。

金鑰交換演算法

演算法 SSL 3.0 TLS 1.2
RSA
DH-DSS
ECDH-ECDSA

加密演算法

演算法 SSL 3.0 TLS 1.2
AES 不適用 安全
DES 不安全 不適用
RC4 不安全 不安全

資料完整性演算法

演算法 SSL 3.0 TLS 1.2
HMAC-MD5
HMAC-SHA1
HMAC-SHA256/384

處理流程

接著 SSL 安全協定的處理流程主要有九步驟,分別為:

  1. 客戶端傳送 Client Hello 訊息將相關資訊發送給伺服器。
  2. 伺服器收到訊息進行確認之後將傳送 Server Hello 訊息給客戶端。
  3. 伺服器透過 Certificate 訊息將本身公錀的數位憑證傳給用戶端。
  4. 伺服器傳送 Server Hello Done 訊息,通知客戶端協商已結束,準備開始進行私密金鑰交換。
  5. 客戶端驗證憑證合法之後,透過憑證中公開金鑰加密客戶端隨機產生的亂數,接著再傳送 Client Key Exchange 訊息給伺服器。
  6. 客戶端傳送 Change Cipher Spec 訊息告知伺服器端之後將採用協商的私密金鑰和加密套件進行加密。
  7. 客戶端透過協商好的私密金鑰和加密演算法處理雜湊值 並且傳送 Finished 訊息給伺服器,此時伺服器會在利用同樣的方法計算雜湊值進行解密結果的比對,若兩者相同,則證明私密金鑰和加密套件協商成功。
  8. 伺服器傳送訊息,並且傳送 Change Cipher Spec 訊息通知客戶端之後傳輸將採用協商的私密金鑰和加密套件進行加密。
  9. 伺服器端透過協商好的私密金鑰和加密演算法處理雜湊值 並且傳送 Finished 訊息給客戶端,此時客戶端會在利用同樣的方法計算雜湊值進行解密結果的比對,若兩者相同和訊息鑑別碼也相同時,則證明私密金鑰和加密套件協商成功。

此外若客戶端接收到伺服器所傳送的訊息,若解密成功,則可以判斷伺服器是數位憑證的擁有者,也就代表伺服器身分驗證成功。

總結 SSL 網站連線可以滿足機密性和完整性之外,更能夠協助使用者驗證伺服器的身分,同時讓使用者相信資料在傳輸的過程中不會外洩和被更改資料,將資料傳送至正確的網站。

相關資源