单向验证与双向验证的区别:
单向验证: 指客户端验证服务器端证书,服务器并不需要验证客户端证书。
双向验证:指客户端验证服务器端证书,而服务器也需要通过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>
查看使用的签名算法:
<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、在浏览器窗口右上角找到设置
2、在设置窗口中找到高级设置
3、找到管理证书
4、点击导入证书,然后选择证书路径就可以了
5、在导入证书之后就可以正常访问到服务器数据了
6、如果没有成功导入客户端证书就访问服务器的话,那么服务器验证客户端证书这步就会失败,然后返回如下错误
由于用的是自签证书不被公有ca信任,所以https那里会有红叉。
以上是怎么使用Nginx实现HTTPS双向验证的详细内容。更多信息请关注PHP中文网其他相关文章!

Nginx是一个高性能的Web服务器软件,同时也是一款强大的反向代理服务器和负载均衡器。随着互联网的迅速发展,越来越多的网站开始采用SSL协议保护敏感用户数据,而Nginx也提供了强大的SSL支持,使得Web服务器的安全性能更进一步。本文将介绍如何配置Nginx以支持SSL协议,并保护Web服务器的安全性能。什么是SSL协议?SSL(SecureSocke

在当今互联网时代,安全通信已经成为了不可或缺的一部分。尤其是在HTTPS通信中,如何保障其安全性尤为重要。而Nginx作为流行的Web服务器和反向代理服务器,其防火墙也可以在保障HTTPS安全通信中发挥重要作用。本文将就Nginx防火墙从以下几个方面进行讨论。TLS/SSL加密HTTPS通信的安全保障主要是基于TLS/SSL加密技术,其能够防止数据在传输过程

单向验证与双向验证的区别:单向验证:指客户端验证服务器端证书,服务器并不需要验证客户端证书。双向验证:指客户端验证服务器端证书,而服务器也需要通过ca的公钥证书来验证客户端证书。详细的握手过程:单向验证浏览器发送一个连接请求给安全服务器。1、服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。2、客户浏览器检查服务器送过来的证书是否是由自己信赖的ca中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的询问客户是否需要继续。3、接着客

下载证书在证书控制台下载nginx版本证书。下载到本地的压缩文件包解压后包含:.pem文件:证书文件.key文件:证书的私钥文件(申请证书时如果没有选择自动创建csr,则没有该文件)配置nginx1、在nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到cert目录中,如果申请证书时是自己创建的csr文件,请将对应的私钥文件放到cert目录下。2、打开nginx安装目录下conf目录中的nginx.conf文件#usernobody;worker_processes1;#error

随着科技的发展,网络通信已经成为了现代社会信息传输的重要工具之一。但同时,网络上的信息传输面临着被恶意攻击和窃取的风险,因此安全性显得尤为重要。基于此,HTTPS协议就应运而生。它是在HTTP协议上加入SSL/TLS加密的方式来保证网络传输安全性的一种协议。Java作为一门广泛应用于网络开发的语言,自然也提供了丰富的API来支持HTTPS协议。本文将

Golang是一种高效的编程语言,经常被用于创建网络应用程序。在网络应用程序中,经常需要对URL地址进行验证,以确保它们符合我们的目标。在这篇文章中,我们将会介绍如何在Golang中使用正则表达式来验证URL地址是否为HTTPS协议。首先,我们需要了解HTTPS协议的URL格式。HTTPS协议的URL从HTTP协议URL中继承了一部分,但是它有一些独特的特征

效果可以看如下:但是如果我们现在使用http来访问的话,访问不了。如下图所示:因此我现在首先要做的是使用nginx配置下,当用户在浏览器下输入http请求的时候使用nginx重定向到https下即可。因此我们现在需要做一个简单的nginx重定向功能。因此在我们的nginx中需要加如下重定向配置:server{listenxxx.abc.com;server_namexxx.abc.com;rewrite^/(.*)$https://$host$1permanent;}因此nginx主要的配置代码

Nginx是一个强大的重定向工具,可以轻松配置在您的系统上重定向不安全或未加密的HTTP网络流量到加密和安全的HTTPS网络服务器。Nginx,发音为“Enginex”,是一个免费、开源、基于Linux的高性能Web和反向代理服务器,负责管理和处理互联网上最大的网站流量的负载。Nginx是一个强大的重定向工具,可以轻松配置在您的系统上重定向不安全或未加密的HTTP网络流量到加密和安全的HTTPS网络服务器。如果你是一个系统管理员或开发人员,那么你应该经常使用Nginx服务器。在这篇文章中,我们将


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3汉化版
中文版,非常好用