httpsTLS/SSL高级进阶前端的bigboom

简单来说,两边通过一次的信息交换,完成了密钥生成。因为sessionkey是独立放在两端的,为了达到一致性,每次连接时,DH都需要重新协商生成sessionkey。现在有个问题是:为什么一定要有sessionkey,他存在的意义是什么?

TLS/SSL其实就是通过非对称加密,生成对称加密的sessionkey的过程

你可以自行测试一下:

opensslspeedecdhopensslspeedaesok,上面大概简述了TLS/SSL所用到的算法。接下来,我们来了解一下,具体TLS/SSL密钥交换的过程。

在详述过程之前,我们需要了解一下,在过程中会出现的内容。

相信大家对这张图已经很熟悉了:

上面主要是根据RSA加密方式来讲解的。因为RSA才会在TLS/SSL过程中,将pre-mastersecret显示的进行传输,这样的结果有可能造成,hacker拿到了privatekey那么他也可以生成一模一样的sessionKey。即,该次连接的安全性就没了。

接下来,我们主要讲解一下另外一种加密方式DH。它和RSA的主要区别就是,到底传不传pre-mastersecret。RSA传而DH不传。

这是RSA的传输方式,基本过程如上述。

而DH具体区别在下图:

为了防止在DH参数交换时,数据过大,DH使用的是取模数的方式,这样就能限制传输的值永远在[1,p-1]。这里,先说明一下DH算法的基本条件:

基本流程就是:

我们只要把上图的DHparameter替换为相对应的X/Y即可。而最后的Z就是我们想要的Premastersecret。之后,就和RSA加密算法一致,加上两边的random-num生成sessionKey。通过,我们常常称DH也叫作EphemeralDiffie-Hellmanhandshake。因为,他每次一的sessionKey都是不同的。

而RSA和DH两者之间的具体的区别就在于:RSA会将premastersecret显示的传输,这样有可能会造成私钥泄露引起的安全问题。而DH不会将premastersecret显示的传输。

上面内容大概讲清楚了基本的TLS/SSL的加密过程。不过,其中,还有很多其他的小细节,比如SNI,ALPN,ForwardSecrey。接下来,我们主要将这些细节将一下,因为他们其实也很重要。

FS(ForwardSecrey)主要是针对privatekey进行描述了。如果你的privatekey能够用来破解以前通信的session内容,比如,通过privatekey破解你的premastersecret,得到了sessionKey,就可以解密传输内容了。这种情况就是non-forward-secrey。那如何做到FS呢?很简单,上文也已经提到过了,使用DH加密方式即可。因为,最后生成的sessionKey和privatekey并没有直接关系,premastersecret是通过g(ab)modP得到的。

简单的说就是,如果你想要启用FS,那么你应该使用的是DH加密方式,而放弃RSA。不过,由于历史原因(TLS版本问题),RSA现在还算是主流的加密方式。但,DH也凭借他5S的安全性,份额也在增加。

ALPN全称是ApplicationLayerProtocolNegotiation(应用层协议协商机制)。看到应用层,程序员们应该都能反应出OSI7层网络协议。在应用层中,HTTP协议应该是重点。不过,由于HTTP版本的问题,以及现在HTTP2的流行,为了让client-server使用相同的协议而出现了ALPN。ALPN实际上是从SPDY中的NPN协议衍生出来的。不过,它们俩的机制正好相反。

总的来说,NPN已经退出历史的舞台了。。。ALPN现在是IETF指定的标准协议。ALPN在TLS具体的过程是:

SNI的全称为:ServerNameIndication。该机制的提出的意义是,当有一个server同时处理了很多个host时。相当于,一个IP映射多个域名,但,由于证书只能对一个3级域名有效,所以,针对于多个host来说,server为了能同时兼顾这些域名。一种简单的办法就是重定向到指定域名,如果都想支持的话,也行,掏钱自己多买几个证书(真土豪)。如果,你很土豪的话,现在就有这样的情况,一个IP服务器下,搭载了支持多个域名的server,并且每个域名都有合法的CA证书。那么,server怎么判断,哪一个域名用哪一个证书呢?这时候,就需要用到SNI。相当于在TLS阶段,将host一并发送过去,然后server就知道在serverhello阶段该返回啥证书了。现在,有个问题,为什么一定要用SNI呢?我们回想一下,这里我们仅仅只是建立TCP+TLS连接,客户端的一些内容,比如hostname,我们并不能在TCP中获得。而,想要获得的话,就需要等到HTTP阶段,获得client传过来的host或origin字段。所以,为了解决这个比较尴尬的点,就提出了SNI。

SessionID是server将上一次成功连接的session内容存在自己的硬盘里面。这里,就不涉及对sessiondata的二次加密。基本的过程是:

那么相对于完全的TLS/SSL连接来说,这里只用到了一次RTT。那么协议过程就变为了:

前面大致说了TLS/SSL是怎样运作的,以及有哪些连接方法。相当于,学画一条线一样,我们现在只知道这条线该画多长,但还不知道,这条线从哪里画。所以,接下来,我们就需要来探讨一下,两端发生了什么。其实也不难,主要还是关于CA证书的存放和验证。server端的很简单,就是把自己的CA证书发过来就ok。但,client验证这个证书是否可信,会有点复杂。首先,证书颁发机构就那么一些,换句话理解就是,每个证书颁发机构,就代表着一张CA证书。但,现在市面上的HTTPS网站,辣么辣么多,难道他们都用同一张证书?难道他们都有一样的pu/prkey那么HTTPS安全还有用吗?所以,按照上面的推理,我们的网站上的HTTPS证书,肯定都是各不一样的。一般来说,有3种类型的证书:DV(DomainValidation),OV(OrganizationValidation),EV(ExtendedValidation)。均价按照顺序上升,所以,最便宜的就是DV,这应该是我们勤劳的贫苦大众用得起的。它们之间具体的区别在于域名的支持上:

那我们的证书在芸芸证书中,是处于哪一个层级呢?一般是三级。怎么体现的呢?

那这么多证书,我们用的是哪一个呢?当然是,最下面那个。因为每个证书并不是都被信任,所以客户端首先就要了解一下,你这个证书能否用来进行验证。如果不行的话,那么你这次连接就是不被信任的,就没有绿色的小锁。这就需要了解一下,客户端的验证过程。

如果上述任一步骤出现问题,那么该次TLS/SSL就不会进行,会回退。那么它们在询问的时候,会不会发送网络请求呢?不会~因为,电脑在初始化时,会自带很多可信任的证书机构(即,RootCA),也就是我们刚刚提到的VeriSignClass3的证书机构。以及,能够签发证书的二级机构(比较少)。到时候,浏览器会自动的根据数字签名来进行证书的验证。

上面已经阐述了,CA证书的合法性是自下而上的验证方式。那么它们具体验证协议是怎样的呢?在说之前,我们先说几个概念:

CA验证首先需要说一下它的颁发过程:

然后,验证过程就是根据这个来的:

另外,为了证书的可靠性,提出了CertificateTransparency项目,实际上,就是让证书机构公开它的签发流水。防止出现重复签发。

CRL(CertificateRevocationList),即,证书吊销列表。CA机构会生成一个列表,列表里面是当前周期被吊销证书的序列号,当进行证书验证时,同样也会进行验证该项。如果,已经是吊销证书的话,那么该次TLS/SSL连接也会失败。我们可以从证书信息中找到CRLURI:

该协议虽然简单,但,缺陷还是比较多的。

OCSP(OnlineCertificateStatusProtocol),即,在线证书状态协议。它通过在线请求的方式来进行验证,不需要下载整个list,只需要将该证书的序列号发送给CA进行验证。当然,验证通过也会有一定的缓存期。不过,由于验证也会存在时延。另外,部署OCSP对CA也有一定的要求,CA要搭建的一个服务器来接受验证,并且,该服务器的性能要好(负载很大)。

session缓存设置可以让两次的RTT,变为一次,这相当于快了一倍(不包括,密钥计算等)。不同的server设置session的办法有很多,这里以nginx为例。在nginx中,支持的是SessionID的形式,即在server中缓存以前session的加密内容。涉及的字段有两个,ssl_session_cache和ssl_session_timeout。

看个demo吧:

ssl_prefer_server_cipherson;ssl_ciphersxxx;支持性最高的就是使用:

ssl_ciphersECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5不过,以下的加密套件,最好不要使用,因为基本上都不安全:

上面那些只能给一些远古浏览器使用,基本上在选择中是作为垫底的选择。

另外,怎么在nginx中开启FalseStart呢?这其实和服务器并没有多大的关系,关键还是你选择的套件和NPN/ALPN协议的作用。

那么,在nginx中,我们只要选择好合适的加密套件即可。这里就放一份现成的吧

ssl_ciphers'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256::DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5';使用DH密钥交换DH的加密过程,上面已经说过了。DH自带两个公共的参数,所以,这必须手动进行创建(实际上就是将参数sign一遍)。

//创建一个DHparamopenssldhparam2048-outdhparam.pem然后,调用该文件

ssl_dhparamdhparam.pem;这样,你就正式的开启的DH加密模式。如果你使用抓包工具观察一下,此时DH应该会在ServerHello里:

不过,由于历史原因,DHparam已经使用的长度是1024,比如:采用Oakleygroup2版本。现在,比较流行的DH加密方式是ECDHE,它和以前的加密方式(DHE)比起来,在密钥生成这块会快很多。同样,由于历史原因,它的基本条件比较高:(其实也还好)

catintermediate/certs/intermediate.cert.pem\certs/ca.cert.pem>intermediate/certs/ca-chain.cert.pem;那么ca-chain.cert.pem就是OSCPstapling验证文件。然后在nginx开启即可。

ssl_staplingon;ssl_stapling_verifyon;ssl_trusted_certificateca-chain.cert.pem;resolver8.8.8.88.8.4.4;//默认使用Google的关于DNS解析,同样你也需要问一下证书提供商,当然,该值可以不用管。下面也同样适用

ssl_staplingon;ssl_stapling_verifyon;ssl_trusted_certificateca-chain.cert.pem;开启过后,你可以使用openssls_client-connectwww.yourDomainName.com:443来测试一下,检测是否开启成功。

SNI就是针对一个IP手握很多张证书时,用到的协议机制,这主要是用来区分,不同的host,使用不同的证书。SNI详情上面已经说过了,这里就不赘述了。主要使用格式就是不同的server_name搭配不同的certificate

server{server_namewww.abc.com;ssl_certificateabc.crt;ssl_certificate_keyabc.crt.key;}server{server_namewww.def.com;ssl_certificatedef.crt;ssl_certificate_keydef.crt.key;}如何开启呢?换个高版本的nginx就行了。你可以使用nginx-V检查你的nginx是否带有

THE END
1.nginx配置证书和私钥进行SSL通信验证@[toc]一背景正常项目的文章主要介绍了nginx配置证书和私钥进行SSL通信验证的相关内容,包括密钥和证书的概念及关系,nginx支持的证书类型、格式,配置文件中相关参数,不同格式证书能否包含私钥,创建私钥、证书请求、证书的命令,区分证书中是否含私钥的方法,多文件合并及不同格式文件查看方式,以及具体实施操作和重启nginx验证生效的步骤。 https://article.juejin.cn/post/7464036507452981260
2.车辆安全中的证书与密钥介绍与配置模拟电子头条在实际应用中,CRT、CER、KEY等证书和密钥文件,它们各自遵循特定的结构规范,在存储为物理文件时,可以根据需要选择PEM格式或DER格式。 具体来说,CER格式通常用于Windows系统中的证书文件,它符合Windows系统对证书文件的特定要求。CRT格式则更多地用于Linux系统中的证书,它包含了公钥和主体信息等关键内容,是Linux系统中常见https://www.eeworld.com.cn/emp/aes/a392712.jspx
3.支付宝公钥和密钥支付宝公钥怎么获取支付宝公钥和密钥 支付宝公钥怎么获取 项目需要,需要在客户端集成支付宝接口。就研究了一下:因为使用支付宝接口,就需要到支付宝官网:注册帐号,并申请。下面讲的是申请好之后的操作。登录成功之后, 店家我的商家服务—在页面的下方找到——>签约管理—>找打 移动支付—–>点击下载集成文档—>跳到新的页面,在页面https://blog.51cto.com/u_16213627/13226991
4.SSL证书的申请与配置(2024版)3篇.docxSSL证书申请资料要求3.SSL证书配置相关事项3.1SSL证书配置步骤3.2SSL证书配置环境要求3.3SSL证书配置人员要求3.4SSL证书配置所需工具4.SSL证书使用规范4.1SSL证书使用范围4.2SSL证书使用限制4.3SSL证书使用安全保障4.4SSL证书使用违规处理5.SSL证书维护相关事项5.1SSL证书维护内容5.2SSL证书维护周期5.3SSL证书维护费用5.4SSL证书https://www.renrendoc.com/paper/384370817.html
5.ssl证书密钥内容在哪看猜你喜欢:ssl证书密钥内容在哪看到呢?ssl证书的有效性就到了。我们可以通过使用TLS协议申请一个TLS证书,以便在浏览器上看到证书的有效性。证书有效期是多久?ssl证书到期前,我们需要将证书部署到服务器上进行使用,以便在浏览器上看到证书的有效期,可以设置有效期。如何设置TLS版本SSL证书,更加详细的流程描述以及TLS版本https://www.huaweicloud.com/zhishi/edits-18335634.html
6.SSL证书包括哪些内容?4. 证书类型和密钥算法 SSL 证书也包括证书类型和密钥算法的信息。证书可以是单个域名、多个域名、泛域或扩展验证(EV)证书。此外,证书还包括用于加密通信的数字密钥算法,如RSA或ECC等。 5. 数字签名 SSL 证书最重要的内容是数字签名。证书颁发机构使用其私钥对证书进行签名,以证明证书是由该机构颁发的。当用户请求https://www.zwtrus.com/detail?article_id=68
7.SSL常见问题解答SSL卸载与加速SSL 证书密钥生成工具,使您能够创建以下文件: 证书请求 自签名证书 RSA 密钥 DH 参数 我想使用 NetScaler 设备的 SSL 卸载功能。接收 SSL 证书的各种选项有哪些 必须先收到 SSL 证书,然后才能在 NetScaler 设备上配置 SSL 设置。您可以使用以下任意方法来接收 SSL 证书: https://docs.citrix.com/zh-cn/citrix-adc/current-release/ssl/faq-ssl1.html
8.获取SSL证书ssl证书内容和密钥在哪找文章浏览阅读3.3k次,点赞2次,收藏6次。两种方式可以获取到SSL证书_ssl证书内容和密钥在哪找https://blog.csdn.net/weixin_42467874/article/details/127529021
9.在服务器上启用HTTPS的详细教程nginx完成之后会给你一个私人密钥,在他们的服务器上生成的私人密钥,但这不是你创建SSL 证书的密钥.他们用这个私人密钥生成一个单独的"认证证书",以后你可以用它来登录StartSSL的控制面板,下面你将要为你的网站创建一个整数了。 最后他们会叫你安装证书 在你的浏览器上安装验证证书 https://www.jb51.net/article/68679.htm
10.示例:SSL证书生成密钥和CSR期望使用 Linux 版Tableau Server?请参阅示例:SSL 证书 - 生成密钥和 CSR(链接在新窗口中打开)。 Tableau Server 使用 Apache,其中包括了OpenSSL(链接在新窗口中打开)。您可以使用 OpenSSL 工具包来生成密钥文件和随后可用于获取签名 SSL 证书的证书签名请求 (CSR)。 http://help.tableau.com/current/server/zh-cn/ssl_cert_create.htm
11.SSL证书内容和密钥在哪个文件?2.私钥:用于解密数据。私钥是服务器的私有密钥,只有服务器拥有。它用于解密使用公钥加密的数据。 SSL证书的密钥对是通过密钥生成算法生成的。公钥和私钥是一对密钥,它们互为对称密钥。私钥需要保持安全,因为掌握私钥的人可以解密传输到服务器的数据。 现在,让我们讨论一下SSL证书内容和密钥在哪个文件以及文件的格式。证https://blog.itpub.net/70027286/viewspace-3056988/
12.如何获取https的证书和密钥免费的ssl证书申请怎么做? SSL证书是一种数字证书,用于加密网络连接以保护敏感信息。它通常用于网站和应用程序,以确保用户的个人信息和支付信息等不受攻击者的攻击。SSL证书是由证书颁发机构(CA)颁发的,一般需要支付费用。但是Tag:如何获取https的证书和密钥您的方式服务器运行https证书失败证书https://www.yimenapp.com/kb-yimen/tag/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96https%E7%9A%84%E8%AF%81%E4%B9%A6%E5%92%8C%E5%AF%86%E9%92%A5/
13.nginx更换ssl证书1.备份旧证书和密钥 在更改SSL证书之前,必须先备份目前代码中使用的证书和密钥文件。 2.购买新证书 可以选择购买单域或多域证书,根据自己的需求选择。 3.上传新证书文件 将预期使用的SSL证书文件和密钥上传至服务器的指定目录,比如存放在/etc/nginx/ssl目录下(这里作为举例,具体请参考服务器实际路径),同时确认证书https://www.ihuyi.com/pd/ssl/nginxgenghuansslzhengshu.html
14.什么是SSL认证?SSL/TLS认证简介SSL/TLS 证书是一个数字对象,它允许系统验证身份,然后使用安全套接字层/传输层安全性(SSL/TLS)协议建立到另一个系统的加密网络连接。证书在名为公有密钥基础设施 (PKI) 的加密系统中使用。通过 PKI,在双方都信任同一个第三方(称为证书颁发机构)的情况下,一方可以确认使用证书的另一方的身份。SSL/TLS 证书可用http://aws.amazon.com/what-is/ssl-certificate/?nc2=h_mo-lang
15.添加和管理TLS/SSL证书可以添加数字安全证书,以在应用程序代码中使用或在Azure 应用服务中帮助保护自定义 DNS 名称,该证书提供了高度可缩放、自我修补的 Web 托管服务。 目前称为传输层安全性 (TLS) 证书,以前也称为安全套接字层 (SSL) 证书,这些专用或公用证书通过加密浏览器、访问的网站和网站服务器之间发送的数据来帮助保护 Internethttps://docs.microsoft.com/zh-cn/azure/app-service/web-sites-purchase-ssl-web-site
16.Let'sEncrypt靠谱又免费的SSL证书3. 在服务器验证设置好后,在验证页面点击“NEXT”按钮进行验证。 五、 导出生成的SSL证书 导出生成的SSL证书 到了这个页面就生成了正式的SSL证书,请下载红色方块所示的证书和密钥。 注意:这个免费SSL证书有效期为90天,到期后可以免费续期,即重复这个注册过程,再次生成新的免费SSL证书。 https://www.jianshu.com/p/ae407556b13d
17.Windows操作系统上查找SSL证书私钥的方法在Windows 操作系统上,您无权查看或检索文本格式的私钥。当您使用 MMC(Microsoft 管理控制台)或 ISS 导入SSL证书时,会自动获取私钥并安装证书。只有当您在生成CSR代码和密钥的同一台服务器上导入证书时,才会发生这种情况。 但是如果您需要在不同的服务器上安装证书,您将需要私钥。您需要执行以下步骤才能在 Windows操https://www.anxinssl.com/13595.html
18.配置ASA:SSL数字证书安装和续约本文档介绍在 ASA 上为无客户端 SSLVPN 和 AnyConnect 连接安装第三方可信 SSL 数字证书。https://www.cisco.com/c/zh_cn/support/docs/security-vpn/public-key-infrastructure-pki/200339-Configure-ASA-SSL-Digital-Certificate-I.html
19.SSL证书资料入门指南建立连接:用户通过浏览器访问网站,浏览器会向服务器请求SSL证书。 证书验证:服务器向浏览器发送SSL证书,浏览器验证证书的有效性,包括验证证书的签名、有效期等。 密钥交换:一旦证书验证成功,浏览器和服务器之间会进行密钥交换,生成一个用于加密通信的会话密钥。 加密通信:浏览器和服务器之间使用会话密钥进行加密通信,确https://www.imooc.com/article/373507
20.怎么查看ssl证书?ssl证书有什么显著优势?ssl证书有什么显著优势? 一般说来,在网上进行电子商务交易时,交易双方需要使用数字签名来表明自己的身份,并使用数字签名来进行有关的交易操作。随着电子商务的盛行,数字签章的颁发机构CA中心将为电子商务的发展提供可靠的安全保障。 一个有效、可信的SSL数字证书包括一个公共密钥和一个私用密钥。https://www.xinnet.com/knowledge/2142342856.html
21.获取并安装SSL证书和密钥。要配置 SSL 支持,必须先完成下列步骤: 获取SSL 证书和密钥文件。可以通过三种方法完成此任务: 向公共认证中心(例如 VeriSign、Thawte 或 Entrust)购买。公共认证中心 (CA) 签发证书,以便对使用该证书的服务器进行验证。 通过第三方认证中心生成密钥和证书文件。如果采用这种方法,那么必须将第三方 CA 的根证书导入到https://www.ibm.com/docs/zh/spss-modeler/18.1.1?topic=ssl-obtaining-installing-certificate-keys
22.在docker内部版本中找不到ssl证书或密钥文件在Docker内部版本中找不到SSL证书或密钥文件可能是由于以下几个原因导致的: 证书或密钥文件路径错误:首先,确保你在Docker容器中指定的路径是正确的。通常情况下,SSL证书和密钥文件应该位于容器内的特定路径,例如/etc/ssl/certs/或/etc/nginx/ssl/。你可以通过在Dockerfile或docker-compose.yml文件中正确设置COPhttps://cloud.tencent.com/developer/information/%E5%9C%A8docker%E5%86%85%E9%83%A8%E7%89%88%E6%9C%AC%E4%B8%AD%E6%89%BE%E4%B8%8D%E5%88%B0ssl%E8%AF%81%E4%B9%A6%E6%88%96%E5%AF%86%E9%92%A5%E6%96%87%E4%BB%B6-ask