搜尋
首頁運維Nginx怎麼使用Nginx實現HTTPS雙向驗證

单向验证与双向验证的区别:

单向验证: 指客户端验证服务器端证书,服务器并不需要验证客户端证书。

双向验证:指客户端验证服务器端证书,而服务器也需要通过ca的公钥证书来验证客户端证书。

详细的握手过程:

单向验证

浏览器发送一个连接请求给安全服务器。

1、服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。

2、客户浏览器检查服务器送过来的证书是否是由自己信赖的ca中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的询问客户是否需要继续。

3、接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。

4、浏览器随机产生一个用于后面通讯的“通话密钥”,然后用服务器的公钥对其加密,然后将加密后的“预主密码”传给服务器。

5、服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用服务器的私钥加密后通知浏览器。

6、浏览器针对这个密码方案,接着用服务器的公钥加过密后发送给服务器。

7、服务器接收到浏览器送过来的消息,用自己的私钥解密,获得。

8、服务器、浏览器接下来的通讯都是用对称密码方案,使用相同的对称密钥。

双向验证

1、浏览器发送一个连接请求给安全服务器。

2、服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。

3、客户浏览器检查服务器送过来的证书是否是由自己信赖的ca中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的询问客户是否需要继续。

4、接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。

5、服务器要求客户的身份认证,用户可以建立一个随机数然后对其进行数字签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。

6、服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的ca 是否可靠,发行ca 的公钥能否正确解开客户证书的发行ca的数字签名,检查客户的证书是否在证书废止列表(crl)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。

7、客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。

8、服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。

9、浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。

10、服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。

11、服务器、浏览器接下来的通讯都是用对称密码方案,使用相同的对称密钥。

一、自建ca,签署证书

#openssl配置文件路径
vim/etc/pki/tls/openssl.cnf
#下面只列出配置文件中和自建ca有关的几个关键指令
dir=/etc/pki/ca#ca的工作目录
database=$dir/index.txt#签署证书的数据记录文件
new_certs_dir=$dir/newcerts#存放新签署证书的目录
serial=$dir/serial#新证书签署号记录文件
certificate=$dir/ca.crt#ca的证书路径
private_key=$dir/private/cakey.pem#ca的私钥路径

使用openssl制作ca的自签名证书

#切换到ca的工作目录
cd/etc/pki/ca
#制作ca私钥
(umask077;opensslgenrsa-outprivate/cakey.pem2048)
#制作自签名证书
opensslreq-new-x509-keyprivate/cakey.pem-outca.crt
#生成数据记录文件,生成签署号记录文件,给文件一个初始号。
touchindex.txt
touchserial
echo'01'>serial
#自建ca完成

准备服务器端证书

#制作服务器端私钥
(umask077;opensslgenrsa-outserver.key1024)
#制作服务器端证书申请指定使用sha512算法签名(默认使用sha1算法)
opensslreq-new-keyserver.key-sha512-outserver.csr
#签署证书
opensslca-inserver.csr-outserver.crt-days3650

准备客户端证书

#制作客户端私钥
(umask077;opensslgenrsa-outkehuduan.key1024)
#制作客户端证书申请
opensslreq-new-keykehuduan.key-outkehuduan.csr
#签署证书
opensslca-inkehuduan.csr-outkehuduan.crt-days3650

注意事项:

1、制作证书时会提示输入密码,设置密码可选,服务器证书和客户端证书密码可以不相同。

2、服务器证书和客户端证书制作时提示输入省份、城市、域名信息等,需保持一致。

3、以下信息根证书需要和客户端证书匹配,否则可能出现签署问题。

countryname = match stateorprovincename = match organizationname = match organizationalunitname = match

如何指定签署证书的签名算法

<strong>opensslreqxx
-[digest]digesttosignwith(seeopenssldgst-hforlist)</strong>

查看使用的签名算法:

怎麼使用Nginx實現HTTPS雙向驗證

<strong>#使用-sha256指定算法
opensslreq-new-keyserver.key-sha256-outserver.csr</strong>

二、提供nginx配置文件

<strong>server{
listen443;
server_namepro.server.com;
ssion;
ssi_silent_errorson;
ssi_typestext/shtml;
sslon;
ssl_certificate/data/server/nginx/ssl/self/server.crt;
ssl_certificate_key/data/server/nginx/ssl/self/server.key;
ssl_client_certificate/data/server/nginx/ssl/self/ca/ca.crt;
ssl_verify_clienton;
ssl_protocolstlsv1tlsv1.1tlsv1.2;
ssl_ciphersecdhe-ecdsa-aes256-gcm-sha384:ecdhe-rsa-aes256-gcm-sha384:ecdhe-ecdsa-aes256-sha384:ecdhe-rsa-aes256-sha384:ecdhe-ecdsa-aes128-gcm-sha256:ecdhe-rsa-aes128-gcm-sha256:ecdhe-ecdsa-aes128-sha256:ecdhe-rsa-aes128-sha256:ecdhe-ecdsa-rc4-sha:!ecdhe-rsa-rc4-sha:ecdh-ecdsa-rc4-sha:ecdh-rsa-rc4-sha:ecdhe-rsa-aes256-sha:!rc4-sha:high:!anull:!enull:!low:!3des:!md5:!exp:!cbc:!edh:!kedh:!psk:!srp:!kecdh;
ssl_prefer_server_cipherson;
indexindex.htmlindex.htmindex.php;
root/data/www;
location~.*\.(php|php5)?$
{
#fastcgi_passunix:/tmp/php-cgi.sock;
fastcgi_pass127.0.0.1:9000;
fastcgi_indexindex.php;
includefastcgi.conf;
}
location~.*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires30d;
}
location~.*\.(js|css)?$
{
expires1h;
}
###thisistouseopenwebsitelianjielikeonapache##
location/{
if(!-e$request_filename){
rewrite^(.*)$/index.php?s=$1last;
break;
}
keepalive_timeout0;
}
location~/.svn/{
denyall;
}
###end##
include/data/server/nginx/conf/rewrite/test.conf;
access_log/log/nginx/access/access.log;
}</strong>

客户端证书格式转换

<strong>#将文本格式的证书转换成可以导入浏览器的证书
opensslpkcs12-export-clcerts-inclient.crt-inkeyclient.key-outclient.p12</strong>

三、将证书导入浏览器,这里以chrome为例

1、在浏览器窗口右上角找到设置

怎麼使用Nginx實現HTTPS雙向驗證

2、在設定視窗中找到進階設定

怎麼使用Nginx實現HTTPS雙向驗證

#3、找到管理憑證

怎麼使用Nginx實現HTTPS雙向驗證

4、點選匯入證書,然後選擇證書路徑就可以了

怎麼使用Nginx實現HTTPS雙向驗證

5、匯入證書之後就可以正常存取伺服器資料了

怎麼使用Nginx實現HTTPS雙向驗證

6、如果沒有成功導入客戶端憑證就存取伺服器的話,那麼伺服器驗證客戶端憑證這一步就會失敗,然後回傳如下錯誤

怎麼使用Nginx實現HTTPS雙向驗證

#由於用的是自簽證書不被公有ca信任,所以https那裡會有紅叉。

以上是怎麼使用Nginx實現HTTPS雙向驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
Nginx性能監控與故障排查工具使用Nginx性能監控與故障排查工具使用Apr 13, 2025 pm 10:00 PM

Nginx性能監控與故障排查主要通過以下步驟進行:1.使用nginx-V查看版本信息,並啟用stub_status模塊監控活躍連接數、請求數和緩存命中率;2.利用top命令監控系統資源佔用,iostat和vmstat分別監控磁盤I/O和內存使用情況;3.使用tcpdump抓包分析網絡流量,排查網絡連接問題;4.合理配置worker進程數,避免並發處理能力不足或進程上下文切換開銷過大;5.正確配置Nginx緩存,避免緩存大小設置不當;6.通過分析Nginx日誌,例如使用awk和grep命令或ELK

Nginx模塊擴展與配置,增強服務器功能Nginx模塊擴展與配置,增強服務器功能Apr 13, 2025 pm 09:57 PM

通過擴展模塊,Nginx服務器能實現更強大的功能。 1.Nginx模塊分為核心模塊和第三方模塊,前者提供基礎功能,後者擴展Nginx能力;2.模塊配置在nginx.conf中,使用load_module指令加載;3.需注意路徑正確性及模塊衝突;4.選擇穩定可靠的模塊,仔細檢查配置文件,進行性能測試,並保持代碼整潔。熟練掌握模塊擴展,才能充分發揮Nginx服務器的性能。

NGINX的主要特徵:性能,可伸縮性和安全性NGINX的主要特徵:性能,可伸縮性和安全性Apr 13, 2025 am 12:09 AM

NGINX通過其事件驅動架構和異步處理能力提升性能,通過模塊化設計和靈活配置增強可擴展性,並通過SSL/TLS加密和請求速率限制等措施提高安全性。

NGINX與Apache:網絡託管和流量管理NGINX與Apache:網絡託管和流量管理Apr 12, 2025 am 12:04 AM

NGINX适合高并发和低资源消耗场景,Apache适用于需要复杂配置和功能扩展的场景。1.NGINX以高性能处理大量并发连接著称。2.Apache以稳定性和丰富模块支持见长。选择时需根据具体需求决定。

NGINX:現代Web應用程序的多功能工具NGINX:現代Web應用程序的多功能工具Apr 11, 2025 am 12:03 AM

NGINXisessentialformodernwebapplicationsduetoitsrolesasareverseproxy,loadbalancer,andwebserver,offeringhighperformanceandscalability.1)Itactsasareverseproxy,enhancingsecurityandperformancebycachingandloadbalancing.2)NGINXsupportsvariousloadbalancingm

NGINX SSL/TLS配置:使用HTTPS確保您的網站NGINX SSL/TLS配置:使用HTTPS確保您的網站Apr 10, 2025 am 09:38 AM

通過Nginx配置SSL/TLS來確保網站安全,需要以下步驟:1.創建基本配置,指定SSL證書和私鑰;2.優化配置,啟用HTTP/2和OCSPStapling;3.調試常見錯誤,如證書路徑和加密套件問題;4.應用性能優化建議,如使用Let'sEncrypt和會話復用。

NGINX面試問題:ACE您的DevOps/System Admin面試NGINX面試問題:ACE您的DevOps/System Admin面試Apr 09, 2025 am 12:14 AM

Nginx是高性能的HTTP和反向代理服務器,擅長處理高並發連接。 1)基本配置:監聽端口並提供靜態文件服務。 2)高級配置:實現反向代理和負載均衡。 3)調試技巧:檢查錯誤日誌和測試配置文件。 4)性能優化:啟用Gzip壓縮和調整緩存策略。

NGINX緩存技術:改善網站性能NGINX緩存技術:改善網站性能Apr 08, 2025 am 12:18 AM

Nginx缓存可以通过以下步骤显著提升网站性能:1)定义缓存区和设置缓存路径;2)配置缓存有效期;3)根据不同内容设置不同的缓存策略;4)优化缓存存储和负载均衡;5)监控和调试缓存效果。通过这些方法,Nginx缓存能减少后端服务器压力,提升响应速度和用户体验。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。