轉載請註明出處html
在網絡傳輸數據信息時,對數據的加密是相當重要的,不然全部傳輸的數據都是能夠隨時被第三方看到,徹底沒有機密性可言。nginx
利用算法web
爲了保證數據的機密性,首先能夠採用的方法就是將數據經過相應算法,轉換爲其它的數據信息,而後再經過相應算法反推出真正的數據是什麼,這樣一來就保證了數據在網絡傳輸過程當中安全性,不會被其它人輕易的看到傳輸過程當中的數據信息。數據加密前的信息稱爲明文數據(plaintext),通過加密算法轉換後進行傳輸的信息稱爲密文數據(ciphertext);反之經 過解密算法轉換後,會將密文數據恢復爲明文數據進行顯示接收。算法
優勢:實現了數據機密傳輸,避免了明文傳輸數據的危險性。shell
缺點:利用加密算法,將明文改密文,若是第三方得到加密算法,便可將傳輸密文再次變爲明文。vim
利用對稱加密算法解決機密性瀏覽器
普通算法雖然已經解決了明文數據的機密性,能夠在網絡傳輸過程當中不被直接看到明文數據。 可是新的問題又產生了,既然明文數據是經過算法改變成了新的數據信息,若是第三方得到 了算法,利用算法也是能夠將密文數據信息,再次轉換爲明文數據信息,所以出現了對稱加 密算法。形象比喻來講:數據加密算法就比如是一本密碼規則手冊,而對稱加密算法就是將手冊放在了一個保險櫃中進行了上鎖傳輸,只有傳遞數據信息的雙方知道打開保險櫃的密碼。緩存
網絡傳輸數據的完整性,也是安全領域中須要考慮的重要環節,若是不能保證傳輸數據的完整性,那傳輸過程當中的數據就有可能被任何人所篡改,而傳輸數據雙方又不能及早的進行發現。將會形成互連通信雙方所表達信息的意義徹底不一致。所以,對於不完整的數據信息,接收方應該進行相應判斷,若是完整性驗證錯誤,就拒絕接受相應的數據。安全
利用單向加密算法服務器
利用數據的單項加密算法(提取數據指紋),進行提取數據特徵碼的方式,從而完成數據傳 輸的完整性驗證。實際的算法實現過程爲:在一段明文數據信息後加上敎據信息的特徵碼, 這個特徵碼是經過結合數據信息進行相應算法得到的數據特徵碼,接收方當收到數據信息後, 會利用相同的加密算法對獲取的數據進行加密,確認加密後獲得的特徵碼是否與傳送過來數 據後面描述的特徵碼一致;若是一致,能夠表示數據沒有被篡改過,若是不一致表示數據完 整性遭到了破壞,數據一律不予以接收處理。
利用單項加密算法(加密特徵碼)
因爲可能存在中間人攻擊的可能性,所以能夠對傳輸過程當中數據特徵碼進行加密,發送方利用對稱密鑰方式對手中的特徵碼進行加密,接收方會利用相同的密鑰對手中的特徵碼進行解密,從而確認特徵碼是否一致。若是中間人將新的特徵碼也進行了加密,發送給接收方,但接收方沒法利用和發送方協商好的解密密鑰對特徵碼進行解密,最終沒法識別中間人發送過來的數據特徵碼信息。
單項加密算法特徵:
單項加密算法常見的有:
非對稱加密算法常見的有:
網絡中傳輸數據時,頗有可能傳輸的雙方是第一次創建鏈接,進行相互通信,既然是第一次 見面溝通,如何確認對方的身份信息,的確是我要進行通信的對象呢?若是不是正確的通信 對象,在通過通信後,豈不是將全部數據信息發送給了一個陌生人。
默認公鑰在網絡中進行傳遞時,默認狀況下也是會出現問題的以下圖所示:
對發送方的公鑰信息進行公正步驟:(藉助第三方安全機構)
目前標準的證書存儲格式是X509,還有其餘的證書格式,須要包含的內容爲:
互聯網上使用的SSL和TLS證書管理機制均使用X509的格式
Netscape網景公司生產了最初的瀏覽器,但爲了提升瀏覽器訪問頁面的安全性,對TCP/IP模型進行了必定改進,在傳輸層與應用層之間,建立了一個3.5層的概念,稱爲SSL((Secure Sockets Layer安全套接層))層,SSL不是一個軟件,只是一個庫,讓應用層將數據傳輸到傳輸層前,調用了ssl層的功能對數據進行了加密,目前比較流行的版本是(SSLv2 V3),可是SSL是netscape公司進行定義的,不夠開放性,所以爲了使加密功能更加開放,TSL(傳輸層安全協議)協議就出現了,目前比較流行的版本是(TSLv1==ssl v3),TSL更像是傳輸層上實現的數據加密。
一、獲取OpenSSL軟件的版本信息:
[root@web01 html]# openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 [root@web01 html]# rpm -qa openssl openssl-1.0.1e-57.el6.x86_64
二、獲取OpenSSL配置文件信息:
/etc/pki/tls/openssl.cnf <- openssl配置文件,主要用於配置成私有ca時進行使用
三、獲取OpenSSL命令詳細信息:
[root@web01 html]# openssl ? openssl:Error: '?' is an invalid command. Standard commands # 標準命令: asn1parse ca ciphers cms crl crl2pkcs7 dgst dh dhparam dsa dsaparam ec ecparam enc engine errstr gendh gendsa genpkey genrsa nseq ocsp passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand req rsa rsautl s_client s_server s_time sess_id smime speed spkac ts verify version x509 # 單向加密命令(信息摘要命令): Message Digest commands (see the `dgst' command for more details) md2 md4 md5 rmd160 sha sha1 # 加密命令: Cipher commands (see the `enc' command for more details) aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx idea idea-cbc idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 seed seed-cbc seed-cfb seed-ecb seed-ofb zlib # openssl speed <- 測試當前主機對全部openssl支持的加密算法的加密速度進行測試顯示,同時也對服務器性能作一個測試 # openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id] ciphername <- 指定加密的算法 [-in filename] <- 指定要加密的文件 [-out filename] <- 指定加密後輸出的文件 [-e] [-d] <- e是加密文件,d是解密文件,不指定默認就是加密的 [-a] <- 基於base64位進行編碼,可選參數 # 舉例說明,加密一個文件 # openssl enc -des3 -salt -a in inittab -out initab.des3 <- 輸入密碼後便可加密成功 # openssl enc -des3 -d -salt -a -in -initab.des3 -out inittab <- 輸入密鑰後便可解密成功 說明:其中命令中的salt參數,主要用於避免密碼加密後,對密鑰串的反推 # 輸出一個文件的特徵碼方式 md5sum inittab sha1sum inittab openssl dgst-sha1 inittab <- 利用openssl生成文件特徵碼 dgst - 表示指定使用信息摘要命令 -sha1 - 表示指定摘要命令選用sha1算法 # 生成和用戶同樣的密碼串 openssl passwd -1 <- 採用md5加密用戶密碼串 # 生成僞隨機數方法 openssl rand -base64 45 <- 給出一個任意的數字,就會生成任意的隨機數
須要先給ca證書頒發機構生成證書,即生成一對密鑰;genrsa - generate an RSA private key利用genrsa生成密鑰信息。雖然只是生成私鑰,但須要清楚公鑰是經過私鑰進行提取獲得的,因此只要有私鑰,就能夠有公鑰。私鑰信息是很是重要的,所以生成的私鑰文件應該是600的權限
# openssl genrsa 2048 >server.key <- 建立私鑰信息,並指定私鑰的長度爲2048,並將生成的私鑰信息保存在一個文件中 # openssl genrsa -out server.key 2048 <- 將私鑰信息直接進行保存,加密長度必定要放在輸出文件後面 # (umask 077;openssl genrsa -out server1024.key 1014) <- 利用小括號,實現子shell功能,臨時修改umask,使子建立的私鑰文件權限爲600 說明:密鑰文件也能夠進行加密,而且支持後期手工加密,但不建議加密,每次使用私鑰文件還要進行解密,比較麻煩 # openssl rsa -in server.key -pubout <- 讀取私鑰文件選擇非對稱密鑰加密算法rsa,進行公鑰的生成
實操私鑰與公鑰創建
[root@web01 ~]# openssl genrsa 2048 >server.key Generating RSA private key, 2048 bit long modulus .......................................................................+++ .................................................................+++ e is 65537 (0x10001) [root@web01 ~]# openssl rsa -in server.key -pubout >server.cty writing RSA key [root@web01 ~]# ll total 48 -rw-------. 1 root root 1073 Sep 29 22:20 anaconda-ks.cfg -rw-r--r--. 1 root root 21736 Sep 29 22:20 install.log -rw-r--r--. 1 root root 5890 Sep 29 22:18 install.log.syslog -rw-r--r-- 1 root root 451 Jan 18 21:35 server.cty -rw-r--r-- 1 root root 1675 Jan 18 21:34 server.key
[root@web01 ~]# openssl req -new -x509 -key server.key -out server.crt -days 365 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:BJ Locality Name (eg, city) [Default City]:BJ Organization Name (eg, company) [Default Company Ltd]:o Organizational Unit Name (eg, section) []:ol Common Name (eg, your name or your server's hostname) []:web01 Email Address []:admin@qq.com req <- 用於建立新的證書 new <- 表示穿件的是新的證書 x509 <- 表示定義證書的格式爲標準格式 key <- 表示調用的私鑰文件信息 out <- 表示輸出證書文件信息 days <- 表示證書的有效期
ca頒發機構的私鑰和證書是不能隨便放置的,而且須要配置私有頒發機構的配置文件
vim /etc/pki/tls/openssl.cnf
[CA_default]模塊參數說明:
參數 |
配置 |
官方配置說明 |
解釋配置說明 |
dir |
=/etc/pki/CA |
#Where everthing is kept |
建立並定義CA目錄信息 |
certs |
= $dir/certs |
#Where the issued certs are kept |
證書文件保存目錄 |
crl_dir |
= $dir/crl |
#Where the issued crl are kept |
證書吊銷文件保存目錄 |
database |
= $dir/index.txt |
# data index file |
表示發過哪些證書,都要文件進 行記錄 |
new_certs_dir |
= $dir/newcerts |
#default place for new certs |
默認新證書的存放路徑 |
certificate |
= $dir/cacert.pem |
#The CA certificate |
定義CA機構本身的證書 |
serial |
= $dir/serial |
#The current serial number |
表示證書對應的序列號,通常從 01開始 |
crinumber |
= $dir/crinumber |
#The current crl number |
表示吊銷證書對應的序列號 |
crl |
= $dir/crl.pem |
#The current CRL |
表示當前證書吊銷列表文件 |
private_key |
= $dir/private/cakey.pem |
#The private key |
表示CA機構目身的私鑰文件 |
RANDFILE |
= $dir/private/.rand |
#private random number file |
私鑰隨機數文件,此文件會默認本身創建 |
在/etc/pki/CA的證書路徑下,還須要有certs crl newcerts三個子目錄信息 |
指定證書相關的有效期限配置:
參數 |
配置 |
官方配置說明 |
解釋配置說明 |
default_days |
= 365 |
#how long to certify for |
定義證書的有效期限 |
default_crl_days |
= 30 |
#how long before next CRL |
默認證書放罝到吊銷列表中的保存時間 |
default_md |
= default |
#use public key default MD |
指定單向加密算法採用的是默認的 |
定義[req_distinguished_name]模塊參數信息,即指定證書中的一些基本屬性信息
參數 |
配置 |
舉例配置 |
解釋配置說明 |
countryName_default |
=XX |
= CN |
默認的國家改成本地區域名稱 |
stateOrProvinceName_default |
= Default Province |
= beijing |
默認的省份名稱改成本地區域名稱 |
localityName_default |
=Default City |
= beijing |
默認的城市名稱改成本地區域名稱 |
0.orgzanizationName_default |
=Default Company Ltd |
= o |
默認的公司組織名稱 |
organizationalUnitName_default |
= |
=ol |
默認的公司部分名稱 |
server { listen 443; # https的端口爲443,要指定 server_name www.erlianzhang.com; ssl on; # 開啓ssl,下兩行第一行是引用證書,第二行是引用私鑰 ssl_certificate /application/nginx/conf/keys/server.crt; ssl_certificate_key /application/nginx/conf/keys/server.key; location / { root html/; index index.html index.htm; } }
每次都要輸入https很煩,因此設置自動跳轉
在本來的server模塊上在加一個server:
server { listen 80; server_name www.erlianzhang.com; rewrite ^(.*)$ https://$host$1 permanent; }
說明:在https配置server基礎上再添加http跳轉server
server { listen 443; listen 80; server_name www.erlianzhang.com; ssl on; ssl_certificate /application/nginx/conf/key/server.crt; ssl_certificate_key /application/nginx/conf/key/server.key; location / { root html/www; index index.html index.htm; } error_page 497 https://$host$uri; }
說明:497爲內置錯誤碼,當訪問http沒法處理,須要利用https處理時
將端口改成https的默認443端口
upstream www_server_pools { server 10.0.0.7:443; server 10.0.0.8:443; server 10.0.0.9:443; }
引用地址池時也要把http改爲https
proxy_pass https://web_pools;
注意,負載上也要有key證書與私鑰文件
server { listen 443; server_name www.erlianzhang.com; ssl on; ssl_certificate /application/nginx/conf/key/server.crt; ssl_certificate_key /application/nginx/conf/key/server.key; location / { proxy_pass https://www_server_pools; } }
server { listen 80; server_name www.erlianzhang.com; rewrite ^(.*)$ https://$host$1 permanent; }
語法: ssl on | off;
默認: ssl off
語境: http,server
功能: ssl功能啓用/不啓用
爲給定的虛擬服務器啓用HTTPS協議。
句法: ssl_buffer_size size; 默認: ssl_buffer_size 16k; 語境: http, server 該指令出如今1.5.9版本中。 功能: 設置用於發送數據的緩衝區的大小。
默認狀況下,緩衝區大小爲16k,這對應於發送大響應時的最小開銷。爲了最小化第一個字節的時間,使用較小的值多是有益的,例如:
ssl_buffer_size 4k;
句法: ssl_certificate file; 默認: - 語境: http, server 功能: 指定當前虛擬主機所使用的證書文件
指定file具備給定虛擬服務器的PEM格式的證書。若是除了主要證書以外還應該指定中間證書,則應該按照如下順序在同一個文件中指定它們:主要證書首先是中間證書,而後是中間證書。PEM格式的密鑰能夠放在同一個文件中。
從版本1.11.0開始,能夠屢次指定該指令來加載不一樣類型的證書,例如RSA和ECDSA:
server { listen 443 ssl; server_name example.com; ssl_certificate example.com.rsa.crt; ssl_certificate_key example.com.rsa.key; ssl_certificate example.com.ecdsa.crt; ssl_certificate_key example.com.ecdsa.key; ... }
注意:應該記住的是,因爲HTTPS協議限制了最大的互操做性,虛擬服務器應該監聽不一樣的IP地址。
句法: ssl_certificate_key file; 默認: - 語境: http, server 功能: 當前虛擬主機與其證書文件匹配的私鑰文件,用來解密
指定file給定虛擬服務器的PEM格式密鑰。
能夠指定值engine:name:id能夠指定代替file(1.7.9),該文件從OpenSSL引擎名稱加載具備指定標識的密鑰id。
句法: ssl_ciphers ciphers;
默認: ssl_ciphers HIGH:!aNULL:!MD5;
語境: http, server
功能: 指定支持加密算法
指定啓用的密碼。密碼以OpenSSL庫理解的格式指定,例如:
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4 + RSA:+ HIGH:+ MEDIUM:+ LOW:+ SSLv2:+ EXP;
完整列表可使用「 openssl ciphers」命令查看。
之前版本的nginx 默認使用不一樣的密碼。
句法: ssl_client_certificate file; 默認: - 語境: http, server 功能: 制定一個受信任的CA證書用於驗證客戶端證書
若是啓用了ssl_stapling,則指定包含filePEM格式的可信CA證書,用於驗證客戶端證書和OCSP響應。
證書列表將被髮送給客戶。若是不須要,可使用ssl_trusted_certificate指令。
句法: ssl_crl file; 默認: - 語境: http, server 該指令出如今0.8.7版本中。 功能: 證書吊銷列表
指定file用於驗證客戶端證書的PEM格式的撤銷證書(CRL)。
句法: ssl_dhparam file; 默認: - 語境: http, server 該指令出如今0.7.2版本中。
指定fileDHE密碼的DH參數。
句法: ssl_ecdh_curve curve; 默認: ssl_ecdh_curve auto; 語境: http, server 該指令出如今版本1.1.0和1.0.6中。
指定一個curve用於ECDHE密碼。
當使用OpenSSL 1.0.2或更高版本時,能夠指定多條曲線(1.11.0),例如:
ssl_ecdh_curve prime256v1:secp384r1;
特殊值auto(1.11.0)指示nginx在使用OpenSSL 1.0.2或更高prime256v1版本時使用OpenSSL庫中內置的列表,或使用舊版本。
在版本1.11.0以前,prime256v1曲線是默認使用的。
句法: ssl_password_file file; 默認: - 語境: http, server 該指令出如今版本1.7.3。 功能: 指定password文件
指定file使用密碼對密鑰 ,其中每一個密碼都在單獨的行中指定。加載密鑰時會依次嘗試密碼。例:
http { ssl_password_file /etc/keys/global.pass; ... server { server_name www1.example.com; ssl_certificate_key /etc/keys/first.key; } server { server_name www2.example.com; # 命名管道也能夠用來代替文件 ssl_password_file /etc/keys/fifo; ssl_certificate_key /etc/keys/second.key; } }
句法: ssl_prefer_server_ciphers on | off;
默認: ssl_prefer_server_ciphers off;
語境: http, server
功能: 服務端傾向使用的加密算法
指定在使用SSLv3和TLS協議時,服務器密碼應優先於客戶端密碼。
句法: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3]; 默認: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 語境: http, server 功能: 使用什麼樣的加密協議,支持ssl協議版本
啓用指定的協議。
TLSv1.1和TLSv1.2參數(1.1.13,1.0.12)僅在使用OpenSSL 1.0.1或更高版本時才起做用。
僅當使用支持TLSv1.3的OpenSSL 1.1.1時 ,TLSv1.3參數(1.13.0)才起做用。
句法: ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
默認: ssl_session_cache無;
語境: http, server
功能: ssl會話緩存
設置存儲會話參數的高速緩存的類型和大小。緩存能夠是如下任何一種類型:
off
嚴禁使用會話緩存:nginx明確告訴客戶端會話可能不會被重用。
none
會話緩存的使用被輕輕地禁止:nginx告訴客戶端會話可能被重用,但實際上不會將會話參數存儲在緩存中。
builtin
創建在OpenSSL中的緩存; 僅由一個工做進程使用。緩存大小在會話中指定。若是沒有給出大小,則等於20480個會話。內置緩存的使用可能致使內存碎片。
shared
全部工做進程之間共享的緩存。緩存大小以字節爲單位指定; 一兆字節能夠存儲大約4000個會話。每一個共享緩存都應該有一個任意的名字。具備相同名稱的緩存能夠在多個虛擬服務器中使用。
兩種緩存類型均可以同時使用,例如:
ssl_session_cache builtin:1000 shared:SSL:10m;
注意:但只使用沒有內置緩存的共享緩存應該更有效率。
句法: ssl_session_ticket_key file; 默認: - 語境: http, server 這個指令出如今1.5.7版本中。
file使用用於加密和解密TLS會話票據的密鑰設置a。若是必須在多個服務器之間共享相同的密鑰,則該指令是必需的。默認狀況下,使用隨機生成的密鑰。
若是指定了多個密鑰,則只使用第一個密鑰來加密TLS會話票據。這容許配置密鑰旋轉,例如:
ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;
在file
必須含有80或48個字節的隨機數據,而且可使用下面的命令建立:
openssl rand 80> ticket.key
根據文件大小,AES256(80字節密鑰,1.11.8)或AES128(48字節密鑰)用於加密。
句法: ssl_session_tickets on | off; 默認: ssl_session_tickets; 語境: http, server 該指令出如今1.5.9版本中。 功能: 禁用或啓用會話恢復
經過TLS會話票據啓用或禁用會話恢復。
句法: ssl_session_timeout time;
默認: ssl_session_timeout 5m;
語境: http, server
功能: ssl參數的有效時長,會話超時時間
指定客戶端能夠從新使用會話參數的時間。
句法: ssl_stapling on | off; 默認: ssl_stapling off; 語境: http, server 這個指令出如今1.3.7版本中。
啓用或禁用 服務器對OCSP響應的裝訂。例:
ssl_stapling on; resolver 192.0.2.1;
要使OCSP裝訂工做,應該知道服務器證書頒發者的證書。若是ssl_certificate文件不包含中間證書,則服務器證書頒發者的證書應存在於ssl_trusted_certificate文件中。
對於OCSP響應者主機名的解析,也應指定解析器指令。
句法: ssl_stapling_file file; 默認: - 語境: http, server 這個指令出如今1.3.7版本中。
設置時,裝訂好的OCSP響應將取自指定的地址,file而不是查詢服務器證書中指定的OCSP響應者。
該文件應該是由「openssl ocsp」命令產生的DER格式。
句法: ssl_stapling_responder url; 默認: - 語境: http, server 這個指令出如今1.3.7版本中。
覆蓋「 受權信息訪問 」證書擴展中指定的OCSP響應者的URL 。
僅http://支持「 」OCSP響應者:
ssl_stapling_responder http://ocsp.example.com/;
句法: ssl_stapling_verify on | off; 默認: ssl_stapling_verify off; 語境: http, server 這個指令出如今1.3.7版本中。
啓用或禁用服務器驗證OCSP響應。
要使驗證生效,應使用ssl_trusted_certificate指令將服務器證書頒發者,根證書和全部中間證書的證書配置爲可信。
句法: ssl_trusted_certificate file; 默認: - 語境: http, server 這個指令出如今1.3.7版本中。
若是啓用了ssl_stapling,則 指定包含filePEM格式的可信CA證書,用於驗證客戶端證書和OCSP響應。
與由ssl_client_certificate設置的證書相比,這些證書的列表不會被髮送到客戶端。
句法: ssl_verify_client on | off | optional | optional_no_ca;
默認: ssl_verify_client off;
語境: http, server
啓用客戶端證書的驗證。驗證結果存儲在 $ ssl_client_verify變量中。
的optional參數(0.8.7+)請求的客戶端證書,並驗證它證書是否存在。
該optional_no_ca參數(1.3.8,1.2.5)要求客戶端證書,但不要求它由受信任的CA證書進行簽名。這適用於nginx外部的服務執行實際證書驗證的狀況。證書的內容能夠經過$ ssl_client_cert變量訪問。
句法: ssl_verify_depth number; 默認: ssl_verify_depth 1; 語境: http, server
設置客戶端證書鏈中的驗證深度。
該ngx_http_ssl_module模塊支持使用error_page指令能夠用於重定向的幾個非標準錯誤代碼 :
495 客戶端證書驗證過程當中發生錯誤; 496 客戶沒有提交所需的證書; 497 常規請求已發送到HTTPS端口。
重定向發生後,該請求被徹底解析和變量,如$request_uri, $uri,$args等人,均可用。
該ngx_http_ssl_module模塊支持多個嵌入式變量:
返回用於創建的SSL鏈接的密碼字符串;
返回客戶端支持的密碼列表(1.11.7)。已知的密碼按名稱列出,未知以十六進制顯示,例如:
AES128-SHA:AES256-SHA:0x00ff
注意:只有在使用OpenSSL版本1.0.2或更高版本時才支持該變量。對於舊版本,該變量僅適用於新會話,並只列出已知密碼。
以創建的SSL鏈接(1.13.5)返回PEM格式的客戶端證書(urlencoded);
以創建的SSL鏈接的PEM格式返回客戶端證書,除第一行以外的每一行都加上製表符;這是爲了在 proxy_set_header指令中使用;
注意:該變量已被棄用,$ssl_client_escaped_cert應該使用該變量。
爲創建的SSL鏈接(1.7.1)返回客戶端證書的SHA1指紋;
根據RFC 2253(1.11.6),爲創建的SSL鏈接返回客戶端證書的「頒發者DN」字符串;
爲創建的SSL鏈接返回客戶端證書的「頒發者DN」字符串;
說明:在版本1.11.6以前,變量名是$ssl_client_i_dn。
以創建的SSL鏈接的PEM格式返回客戶端證書;
根據RFC 2253(1.11.6),爲創建的SSL鏈接返回客戶端證書的「主題DN」字符串;
爲創建的SSL鏈接返回客戶端證書的「主題DN」字符串;
說明:在版本1.11.6以前,變量名是$ssl_client_s_dn。
爲創建的SSL鏈接返回客戶端證書的序列號;
返回客戶端證書的結束日期(1.11.7);
返回客戶端證書過時的天數(1.11.7);
返回客戶端證書的開始日期(1.11.7);
若是證書不存在,則 返回客戶端證書驗證的結果:「 SUCCESS」,「 FAILED:reason」和「 NONE」;
說明:在版本1.11.7以前,「 FAILED」結果不包含reason字符串。
返回客戶端支持的曲線列表(1.11.7)。已知曲線按名稱列出,未知以十六進制顯示,例如:
0x001d:prime256v1:secp521r1:secp384r1
注意:只有在使用OpenSSL版本1.0.2或更高版本時才支持該變量。對於舊版本,變量值將是一個空字符串。該變量僅適用於新會話。
返回創建的SSL鏈接的協議;
經過SNI (1.7.0)返回請求的服務器名稱 ;
返回創建的SSL鏈接的會話標識符;
若是SSL會話被重用,則 返回「 」;不然返回「 」 .
(1.5.11)。