您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

你正确使用https了吗? [php源码]

  • 时间:2022-11-04 10:37 编辑: 来源: 阅读:454
  • 扫一扫,手机访问
摘要:你正确使用https了吗? [php源码]
HTTPS是HTTP over SSL/TLS,HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间增加了一个安全套接字层SSL/TLS:SSL/TLS层负责加解密算法的协商、密钥交换和客户端与服务器之间通信连接的建立。建立安全连接的过程如下:后面会单独开篇文章解释https握手过程。喜欢的话可以先关注一下,定期发布技术文章。如何使用HTTPS数字证书、CA和HTTPS信息安全的基础依赖于密码学。密码学涉及算法和密钥,算法一般是公开的,而密钥需要适当保护。如何生成、分发、使用和回收密钥涉及到公钥基础设施。 公钥基础设施(PKI)是由硬件、软件、参与者、管理策略和流程组成的一套基础设施,其目的是创建、管理、分发、使用、存储和撤销数字证书。 公钥存储在数字证书中,标准的数字证书一般由可信的数字证书颁发机构(CA,root certificate authority)颁发,它会将用户的身份与公钥联系起来。 CA必须确保它颁发的每个证书的用户标识是唯一的。 链接(证书链)是通过注册和发布过程创建的。根据保证级别的不同,链接可以由CA的各种软件完成,也可以在人工监督下完成。 PKI在确定链接关系中的作用称为注册中心(RA,也称为中间认证机构或中间机构) 确保RA公钥与个人身份相关联,这样可以防止抵赖。 如果没有RA,CA的根证书被破坏或泄露,那么CA颁发的所有其他证书都将失去安全性。所以现在主流的商业数字证书权威CA一般都是提供三级证书,根证书颁发中级RA证书,RA证书为用户颁发证书。 X509证书链,左边是CA根证书,中间是RA中介机构,右边是用户:www.google.com网站的证书链如下,CA证书颁发机构为GeoTrust Global CA,RA机构为Google Internet Authority G2,网站证书为* .google.com:用于HTTPS通信的证书由CA提供,需要在服务器中设置才能生效。 此外,在我们的客户端设施中,仅需要访问的HTTPS网站所使用的证书是由可信CA根证书颁发的。如果这些ca位于浏览器或操作系统的根信任列表中,则可以直接访问它们。比如12306.cn网站,其证书由不可信的CA提供,由自己签发,当你用谷歌浏览器打开时,会提醒你“你的连接不是私人的”。证书是由不受信任的CA颁发的:因此,12306.cn的网站首页会提醒我们,为了顺利购票,请下载并安装其根证书。操作系统安装后,不会再有如上图的提醒。 数字证书的生成HTTPS网站使用的证书可以申请到可信的CA机构,但这些基本上都是商业机构,申请证书需要付费,一般是按年付费。费用的使用因CA组织而异。 如果只是APP与HTTPS的后端服务器进行通信,就可以使用openssl工具生成自行颁发的数字证书,这样可以节省使用费用。但是证书的私钥一定要妥善保护,不能泄露,不能丢失。 用于HTTPS通信的数字证书的格式是X.509 颁发数字证书的步骤如下:Step1生成自己的CA根证书生成CA私钥文件CA . key:OpenSSL gen RSA-outca . key 1024生成X.509证书签名请求文件ca.csr:OpenSSL req-new-key CA _ private . key-outca . CSR在生成CA . CSR的过程中,会输入少量的组织信息, 生成X.509格式的CA根证书ca_public.crt(公钥证书):OpenSSL x509-req-Inca . CSR-sign key CA _ private . key-outca _ public . CRT step 2生成服务器端证书生成服务器私钥文件server _ private.key: ope。NSSL gen RSA-out server _ private . key 1024根据服务器私钥生成服务器公钥文件server _ public . PEM:OpenSSL RSA-in server _ private . key-pub out-out server _ public . PEM服务器需要向CA组织申请,请在证书上签名。在申请签名证书之前,还需要创建自己的证书签名请求文件server . csr:opensslreq-new-key server _ prviate . key-out server . CSR对于在HTTPS使用的CSR,常用名必须与网站域名一致,以便以后验证主机名。 服务器使用server.csr文件向CA申请证书,签名过程需要CA的公钥证书和私钥参与。最后会颁发一个服务器端证书server . CRT:OpenSSL x509-req-ca ca _ public . CRT-cakeyca _ private . key-cacheteserial-in server . CSR-out server . CRT。如果服务器端还想验证客户端证书,可以以生成服务器端证书的形式生成客户端证书。 用openssl检查证书信息:OpenSSL x509-in server.crt-text-no out使用web.py构建一个简单的服务器来测试生成的server . CRT,文件webpytest.py是:本地运行web服务器程序:python webpytest.py 1234。在safari浏览器中输入https://0.0.0: 1234,提醒此证书无效(主机名不匹配)。因为在生成服务器端证书签名请求文件server.csr时,在Common Name中输入的是localhost,与0.0.0不匹配:在safari浏览器中输入https://localhost:1234,不是提醒主机名不匹配,而是提醒这个证书是由未知机构签名的。因为它是由私有CA颁发的证书,所以私有CA不在浏览器或操作系统的根信任列表中。也可以使用以下命令查看网站证书信息:OpenSSL s _ client-connect localhost:1234服务器构建成功。接下来,我们来谈谈Android客户端如何与HTTPS的服务器通信。 Android官网使用HTTPURLConnection for HTTPURConnection与HTTPURConnection进行通信。给出了一个使用HttpsURLConnection API访问HTTPURConnection网站的例子。HTTPS方法的特点是:Android系统验证服务器数字证书的有效性,使用可信CA颁发的数字证书的网站可以正常访问,使用私有CA颁发的数字证书的网站无法访问。 在用户的设施上安装证书(将中间人服务器的证书放在设施的信任列表中)是无法抵御中间人攻击的。这类攻击一般是通过分析用户和服务器之间的交互协议,找到用户和服务器剩余的漏洞。 如果网站不使用SSL site wide(仅使用HTTPS)或HSTS (HTTP严格传输安全),就无法抵御SSL Strip(HTTPS降级为HTTP)攻击和LAN攻击,比如免费WiFi。 如果要使用私有CA颁发的证书,则必须重写证书链TrustManager中的方法,否则将出现javax . net . SSL . SSL handshakeexception:Java . security . cert . certpathvalidatoreeexception:trust anchor for certificate path not found。 但是在TrustManger中重写checkServerTrusted()时,很多开发者什么都没做,会导致证书验证弱(没有真正验证证书)。 以下是错误的写法:正确的写法是真正实现TrustManger的checkServerTrusted(),对服务器证书的域名进行强验证,或者真正实现HostnameVerifier的verify()方法。 真正实现TrustManger的checkServerTrusted()代码如下:其中serverCert是嵌入APP的服务器端公钥证书。如果是以文件的形式,则通过以下形式获得:服务器证书域名的强验证:真正实现HostnameVerifier的verify()方法:另一种写证书锁定的方式,直接使用嵌入的证书生成TrustManger,过程如下:参数certStream是证书文件的InputSteam流。另外,可以使用以下命令查看服务器证书的公钥:keytool-print cert-RFC-fileuwca . CRT直接复制粘贴可以将公钥信息硬编码在代码中。可以使用下面的表单获取这个公钥对应的X.509证书:HTT用OKHttp3.0除了Android系统提供的https通信,ps可以使用其他第三方库。以OKhttp3.0为例,先来看看未验证的服务器端证书链和未验证的服务器端证书域名的错误写法:这些错误的发生其实和HttpsURLconnection是一样的。都涉及到SSLContext和HostnameVerifier,处理方法与2.3节相同。HttpsURLConnection是实现TrustManager和HostnameVerifier的真正方法。 目前,许多HTTPS安全的webview应该使用Webview加载H5页面。如果服务器使用由受信任的CA颁发的证书,则在使用WebView时,它会重载WebViewClient的onReceivedSslError()。设置WebView客户端(WebView客户端)。如果有证书错误,直接使用handler.proceed()会忽略错误,继续加载有证书问题的页面。如果使用handler.cancel()可以停止加载证书有问题的页面,可以提醒用户风险,让用户选择是否加载。如果安全级别高,可以直接停止页面加载。提醒用户,网络环境存在风险:不建议直接使用handler.proceed()。如果webview在加载https时需要对服务器端证书进行强验证,可以在onPageStarted()中使用HttpsURLConnection对服务器端证书进行强验证。如果验证失败,停止加载网页。 当然这样会拖慢网页的加载速度,还需要进一步优化。具体的优化方法不在此讨论范围,在此不做详细说明。 许多应用程序都有不当使用HTTPS的风险。 在用户设施上安装证书时,正确的HTTPS可以有效抵抗中间人攻击和SSL带攻击。 但以上方法都需要在用户端嵌入证书文件,或者将证书硬编码写在代码中。如果服务器端证书过期或者用户因为泄密等其他原因需要更换证书,就需要强制用户更新用户端,体验效果不好。 只要开发者想把公钥放在安全组件中,安全组件的动态密钥函数就可以实现公钥的动态更新。 另外,HTTPS的正确使用并不能完全防止客户端的钩子分析和修改。为了确保通信安全,我们还需要依靠其他方法,例如在将重要信息传输到HTTPS之前对其进行加密。此外,还可以实现客户端请求的签名方案,保证客户端和服务器之间的通信请求不被伪造。


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)
【技术支持|常见问题】你正确使用https了吗? [php源码](2022-11-04 10:37)
【技术支持|常见问题】安全超文本传输协议 {源码分享}(2022-11-04 10:37)
【技术支持|常见问题】借助图文解锁HTTPS原理,10分钟还原HTTPS。真的很像!建筑师必读 {源码分享}(2022-11-04 10:37)
【技术支持|常见问题】颤动般的JD.COM客户端 {影视源码}(2022-11-04 10:37)
【技术支持|常见问题】我是个学渣。零基础的我是如何成功学会web前台的? 《导航网站源码》(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部