草庐IT

网站https 问题记录

林恒 2023-03-28 原文

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

开发过程中 常见的 https 问题 - 避坑

做前端多年,发现有些问题需要重复解决很多次,浪费了不少时间,https 导致的问题就属于其中的一种,被不同岗位的同事问过很多次。 这篇关于 https 的科普文,赶紧安利给团队的相关小伙伴看看吧,从此再也不会有人找你解决 https 相关的 bug,又多了一些摸鱼的时间,爽(巴适得很)。

注:本篇文章提到的浏览器都是指 chrome 浏览器

案例 1 - 下载资源失败或图片加载失败 - “Mixed Content”问题

在 https 网站中发起的 http 请求被禁止

这是因为最新版本的 chrome 提高了用户安全策略,保护用户免受不安全下载的侵害(点击这里查看 chrome 文档 Protecting users from insecure downloads)

注意:

  1. https 协议的网站中不允许存在 http 协议的请求
  2. http 协议的网站中允许访问 https 协议的资源

案例 2 - 浏览器提示网站不安全 记住的账户密码不能自动填充 - 证书错误问题

提示不安全是因为 chrome 认为 当前网站存在信息泄漏的风险。

检查当前网站协议是否为 https:
如果是 https 的话有两种可能,一种是当前网站被标记为不安全,另一种是 https 证书无效、过期了。
如果是 http 的话,需要升级当前网站协议为 https。

chrome 浏览器对 http 协议的限制很多,所以运维在部署网站的时候大概率是需要申请 https 协议的。

账号密码不能自动填充是因为 chrome 记住密码功能记住的网站是包含域名、协议和端口的,其中一个变化了都不能自动填充。

注意:

  1. 项目部署后同时给域名申请 https 安全协议
  2. 运维需要关注 https 自动续费,以免影响线上环境

案例 3 - webpack-dev-server 代理的后端服务 忽然报 CORS 错误 - 强制使用 https 问题

 

看控制台报错,意思是后端服务自动跳转到另一个服务了,而那个服务未开启 cors 策略。 遇到这个问题的时候我很迷惑,跳转的这个域名也是非常规的域名,以为是后端某位同学的服务注册到线上了,但是经过观察,发现线上环境没有影响,只有本地开发环境的请求会报错。
如果是后端本地服务注册到线上,那么线上和本地都应该是随机访问到这个同学的服务而报错。
最后想到本地和线上的不同,就是一个是 http,一个是 https,在浏览器直接访问后端的服务发现,后端服务开启了 http 自动升级 https,因此所有 http 协议的请求都不能通过了。
查看后端服务的 nginx 配置,可以看到所有请求都配置了 301 重定向。

修改本地使用的后端服务协议为 https 解决此问题。

总结

总的来说,一个前端将会遇到的 https 问题大概有以下 3 种:

  1. Mixed Content 错误:
    当网站同时使用 HTTPS 和 HTTP 的资源时,例如在 HTTPS 的网站中引入 HTTP 的图片、CSS、JavaScript 等文件,浏览器会提示“Mixed Content”错误,这是因为 HTTP 的资源容易被恶意攻击者利用。解决方法是将所有资源都使用 HTTPS 进行加载。

  2. 证书错误:
    在使用 HTTPS 时,需要使用 SSL 证书来验证网站的身份。如果证书无效、已过期或不受信任,浏览器会提示证书错误。解决方法是获取有效的 SSL 证书,并将其安装到 Web 服务器中。

  3. HSTS:
    HSTS(HTTP Strict Transport Security)是一种安全机制,可以强制浏览器只使用 HTTPS 连接访问网站。如果网站启用了 HSTS,浏览器会自动将 HTTP 请求重定向到 HTTPS。在开发过程中,需要注意是否启用了 HSTS,以避免由于 HSTS 导致的连接问题。

tips

  • https 是绝对安全的?
    https 也能被抓包,但是抓到之后攻击者由于没有私钥所以也无法解密,抓到也没有用。https 的安全是基于对证书颁发机构的信任的,也不能算是 100% 的安全。

  • 为什么说非对称加密效率不高 速度慢 具体体现在哪里?
    对称加密本质上是位运算包含位移和替换,非对称加密包含大量大数乘法、大数模计算(RSA 的核心算法是欧拉定理)。 AES 算法的底层原理RSA 算法详解

  • 登录密码需要加密?
    如果说是为了防止被抓包,那没必要,因为 https 已经做了数据加密,即使是被抓包了也是加密过的数据。 如果说是为了防止部分用户存在一个密码多个网站使用的情况下,密码泄漏导致多个网站密码泄漏,那就是有意义的。

  • 请求参数有必要加密?
    请求的参数没必要加密,因为 https 本身会加密数据,服务端接收到之后会自动解密,如果再加一层加密,无疑增加了响应时间。 使用额外的加密层会增加网络负载和系统资源开销

  • 响应数据有必要加密?
    根据上一条响应数据也没必要加密,另外,响应体整体加密也没必要,感兴趣的同学可以看这篇response body 加密了怎么办? 来 破解它

本文转载于:

https://juejin.cn/post/7208466455880417317

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

有关网站https 问题记录的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  4. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  5. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  6. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  7. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  8. ruby - Ping ruby 网站? - 2

    在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准ruby​​ping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类

  9. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  10. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

随机推荐