记录一次电脑感染 floxif.gen 病毒
没想到 12 月 20 号这天居然中招了,运行了一款长截图软件后各种程序开始报错,重启过一段时间后又出现了同样的报错。
无奈重新装上了火绒,全盘查杀,检测是感染 floxif.gen 病毒,隔离后终于恢复正常
手机:
华为手机,新安装的 Microsoft Authenicator ,使用的 QQ 邮箱(账号 A )登录的。 手机上有 Chrome ,使用账号 Gmail 邮箱(账号 B )登录的,Chrome 中未开启同步功能,自带密码管理器中默认开启了保存密码功能。保存的密码列表里只有一个路由器密码。
电脑:
Windows 10 ,Chrome 中也使用账号 B 登陆了,同样,未开启同步功能。自动保存了一些不太重要的密码。
我无法理解的是,我使用的是不同的设备(手机,电脑),不同的操作系统(安卓,Windows 10 ),不同的厂商( Microsoft ,Google )开发的不同的 App ( Authenticator ,Chrome ),登录的是不同的账号( A ,B ),这居然密码都能互通?我电脑 Chrome 上保存的所有密码都在 Authenticator 里看的一清二楚啊……
谁能帮我分析一下?
手机:
华为手机,新安装的 Microsoft Authenicator ,使用的 QQ 邮箱(账号 A )登录的。 手机上有 Chrome ,使用账号 Gmail 邮箱(账号 B )登录的,Chrome 中未开启同步功能,自带密码管理器中默认开启了保存密码功能。保存的密码列表里只有一个路由器密码。
电脑:
Windows 10 ,Chrome 中也使用账号 B 登陆了,同样,未开启同步功能。自动保存了一些不太重要的密码。
我无法理解的是,我使用的是不同的设备(手机,电脑),不同的操作系统(安卓,Windows 10 ),不同的厂商( Microsoft ,Google )开发的不同的 App ( Authenticator ,Chrome ),登录的是不同的账号( A ,B ),这居然密码都能互通?我电脑 Chrome 上保存的所有密码都在 Authenticator 里看的一清二楚啊……
谁能帮我分析一下?
才接触了几天,看到了这个视频,一步一步按照视频流程操作 到了合同创建阶段,关联的小狐狸钱包提示合同创建失败,我就刷新了一次,然后就继续下一步了,根据提示在左下角的合同地址复制界面复制了地址,转入了资金,目前已经无法找回。 也联系了吕老师,无果,求助一下大家,这个应该如何处理,谢谢 ETH 代码已放在最后,各位给看下有无欺诈代码,谢谢
链接地址: https://www.youtube.com/watch?v=Urbcyu_vrHQ&t=124s 截图地址: https://meee.com.tw/EfJsEx0 https://meee.com.tw/lj1Mpnl https://meee.com.tw/kzQjshq ETH 代码地址: https://paste.myst.rs/raw/nrmvuk6t/7uju0igw
这几天一直闹得沸沸扬扬的“卫生巾”事件,我还真没关注到。直到刚刚看见有大v说不少女性在疯抢日本卫生巾,实在太好奇便去作了点了解。
一是长度不达标,二是pH值只需要C类标准。
相比长度的问题,pH值让无数女性彻底没绷住,A类是用在婴儿身上的最低标准(7.5)。而接触到成年人皮肤,最低标准是B类(8.5),结果卫生巾是C类(9.0)。
这东西我以前也不怎么懂,不过这会儿是明白了。这里给有兴趣的读者科普一下,卫生巾的pH值通常在0到14之间,可以简单的理解为从酸性,到碱性。低于7,就是酸性,相反为碱性。女性的阴道内pH值通常为4.5左右,就是酸性。你搞个碱性的卫生巾去接触,就容易出现过敏、皮肤病、阴道感染(阴道炎、尿道感染)之类的问题。
所以很多女性在这次的风波出现后,没绷住,斥责咱们自己是“道德沦丧”,让她们“弄了块窗帘垫在私密处”。我觉得这么骂,还真没什么问题,纯属实话实说啊!
于是乎纷纷去抢购日本卫生巾,还有让在日本的华人帮买的,总之是一片沸腾。
这里也顺便说一下,日本有他们的标准,要求pH值接近中性或轻微偏酸性,最高不得超过6.5。
这个标准其实还挺高的,美国也就是4.5到7之间。欧洲最讲究,对这类用品都有极其严格的标准,4.5到5.5之间,超过就往死里罚。不过大家也弄不到欧洲的卫生巾,只能退而求其次,抢点日本的了。
但是很讽刺,这会儿就不骂日本鬼子了,也不抵制日本产品了,昨天还在对日本免签的事骂骂咧咧呢。
而上个月有位女士在上海直播,要求商家撤掉红灯笼的大场面,更是历历在目。她歇斯底里,说灯笼上有个“神”字,明显是指日本的靖国神社,不撤掉就立马打电话举报。
也不知道这会儿有没有去抢点日本的卫生巾。
其实最高值最低值,这些都是底线问题,卫生巾事件只不过把这个底线撕开了一角而已,用不了几天就会被人们忘记。就算闹到最后改个标准又怎样呢?它就一定从碱变成酸了吗,你总不能每次用卫生巾,还自己先测一下酸碱度吧。
我们身边超越底线的操作,这远远不是第一次出现,每年315那点事儿,都不够看的。
我昨天就看到了类似的消息,说卫生巾之后,麻辣烫也塌房了,里面全是科技与狠活。这一般人谁能想得到?麻辣烫,那不就是一点菜加点汤吗,这都能作假?
可事实就是如此,我们的想象力抵达不到的远方,不代表某些人的手里操作不出来。你见过一个老外大半夜对着捞地沟油的阿姨骂“你们不是人”吗?你见过市场上刚买回来的猪耳朵是胶做的吗?
说实话前两天看到这个视频的时候我整个人都处于懵逼中,猪耳朵为何要造假,这想要逼真,成本不得比真的猪耳朵贵上个三倍?
直到看见评论区里有人说正常,在机械的加持下,只要不被发现,这种“假猪耳朵”能把利润翻10倍……这就是知识盲区了,三百六十行,行行要你命。就算你再怎么警惕,能想到盘子里的猪耳朵是胶?
11月24号,假羽绒服的风波也刚刚刷新了不少人的眼界,你以为挂个吊牌90%的鸭绒鹅绒,实际上只有50%就是底线被突破了?
天真!
上面写90%的,可能只有0%。而这还是高底线,最多穿在身上不暖和。更低的已经到了什么层次?富含可以让你吸到肺里的神奇物质,直接影响健康。
吃的、用的、穿的,我们踩过的坑越来越多,防不胜防。下一次,不知道会不会连买张车票,都要担心车轮是纸糊的。这真不是杞人忧天,毕竟他们坑人有术!那调查高铁质量造假的记者,不是刚被打了没多久吗。
一个潘多拉的盒子,既然打开了,那么卫生巾、麻辣烫、假猪耳朵、假羽绒服……每次热闹之类,新的漩涡只会重新开启,并且越来越应对的游刃有余、得心应手,又怎么会轻易让我们看到终点。
所以,不必意外,热闹过后,依旧只会剩下一地鸡毛。日本的卫生巾先抢着,等标准换过来,再接着骂,这两者对有些人而言,不存在半点冲突。
Stirling PDF 是一站式的 PDF 编辑工具,让用户能对 PDF 文件进行各种编辑操作,包括分割、合并、转换、重新组合、新增影像、旋转、压缩等等,特色是免费、开源〔GitHub〕,过程中文件只会存在用户的设备上,若在处理时有暂存于服务器的内容在下载后会即时从服务器删除,不会记录保存或追踪任何资料,相较于在线工具来说是更安全、隐私的解决方案。
1 Locally hosted web application that allows you to perform various operations on PDF files – Stirling-Tools/Stirling-PDF
Stirling PDF 提供多元的 PDF 编辑功能,涵盖文件组织、格式转换、安全性、检视与编辑等工具,满足各类文件处理需求,用户无需额外下载、安装软件,只要通过浏览器即可进行操作,Stirling PDF 有中文在内等多国语言界面〔在我写这篇文章时中文字串翻译率已达 93%〕,进入网站、找到对应的功能后就能直接进行编辑。
这项服务目前可以做到的功能包括:
1. 文件组织
2. 格式转换
3. 签名与安全性
4. 检视与编辑
5. 进阶功能
顺带一提,Stirling PDF 还有提供 Windows 版本,可以在没有连上网络的情况下使用,如果有兴趣的朋友可以在 GitHub 找到下载链接,原则上两者功能差不多,无论在线版或 Windows 应用程序都不用付费、也无广告干扰。
Stirling PDF
进入 Stirling PDF 网站后先从右上角语言选择「中文」。
接着从上方「工具」就能看到完整功能,依照类型分为:组织、转换为 PDF、从 PDF 转换、签名与安全性、检视与编辑和进阶工具,也可以直接从首页输入功能名称列出相关工具。
有一个 PDF 万用工具是整合旋转、裁切、分割、移除、新增图片等功能,进入后先点击左下角新增要编辑的 PDF 文件。
加入后 PDF 页面预览就会显示于下方,每一页都可单独旋转、删除或调整页数,将光标移动到页面中间时还会出现其他编辑选项,例如裁切或是加入图片,其实操作上很直觉,稍微摸索一下就会。
另一个压缩 PDF 也是很常在在线工具看到的功能,选择文件、设置压缩比或是自动模式〔自动调整质量以使 PDF 达到指定大小〕,就能快速压缩 PDF 以获得更小的文件容量。
点击压缩后就会开始处理,完成后自动跳出下载提示,我以大约 9 MB 的 PDF 文件、手动模式 3 级测试后获取一个约 2.5 MB 的新文件,压缩成效相当好,而且图片并没有失真或模糊等情形。
另一个也很常用到的功能是「分割 PDF」,可以将 PDF 指定页面删除、或只是留下需要的页面,使用方法也很简单就不多加赘述,Stirling PDF 会有预先设置的示例提示,用户照着格式稍作修改后就能完成相关编辑任务。
如果要说 Stirling PDF 有没有比较特殊、少见的功能,有一个「自动涂黑」工具很有用,用户只要输入要涂黑的文字,选择 PDF 后就会自动将识别到的文字涂黑,确保隐私和安全性,同时也省去手动编辑文件的时间,操作上更有效率哦!
下图就是使用自动涂黑工具识别、涂黑的 PDF 文件示例,指定文字就会被涂黑处理。
没有任何预警,openai 突然发布了 OpenAI o1 系列模型。按照官方技术博客说法,o1 在推理能力上代表了当前人工智能最强的推理水平。
OpenAI CEO Sam Altman 表示:「OpenAI o1 是一个新范式的开始:可以进行通用复杂推理的 ai。」
在复杂推理任务上,这款新模型是一次重要突破,代表了 AI 能力的新水平。基于此,OpenAI 选择将此系列重新命名为 OpenAI o1,并从头开始计数。
不知道这是否意味着,GPT-5 这个命名也不会出现了。
简单总结新模型的特点:
现在,该模型已经全量推送,你可以通过 chatgpt 网页端或者 API 进行访问。
其中 o1-preview 还是预览版,OpenAI 还会继续更新开发下一版本。目前使用有一定次数限制,o1-preview 每周 30 条消息,o1-mini 每周 50 条。
和传闻中的「草莓」一样,这些新的 AI 模型能够推理复杂任务,并解决科学、编码和数学领域中比以往更为困难的问题。官方表示,如果你需要解决科学、编码、数学等领域的复杂问题,那么这些增强的推理功能将尤为有用。
例如,医疗研究人员可以用它注释细胞测序数据,物理学家可以用它生成复杂的量子光学公式,开发人员可以用它构建并执行多步骤的工作流程。
此外,OpenAI o1 系列擅长生成和调试复杂代码。
为了给开发人员提供更高效的解决方案,OpenAI 还发布了一款更快、更便宜的推理模型 OpenAI o1-mini,尤其擅长编码。
作为较小版本,o1-mini 的成本比 o1-preview 低 80%,是一个功能强大且高效的模型,适用于需要推理但不需要广泛世界知识的应用场景。
在具体训练过程中,OpenAI 会训练这些模型在回答问题之前深入思考。o1 在回答问题前会产生一个内部的思维链,这使得它能够进行更深入的推理。
通过训练,OpenAI o1 模型能够学会完善自己的思维方式,并且随着更多的强化学习(训练时间计算)和更多的思考时间(测试时间计算)而持续提高。
OpenAI 研究员 @yubai01 也点出了 01 的训练路线:
我们使用 RL 来训练一个更强大的推理模型。很高兴能成为这段旅程的一部分,而且要走很长一段路!
据介绍,在测试中,这款模型在物理、化学和生物等任务中表现得如同博士生,尤其是在数学和编码领域表现突出。
在国际数学奥林匹克竞赛(IMO)的资格考试中,GPT-4o 只解决了 13% 的问题,而推理模型得分高达 83%。在 Codeforces 编程竞赛中,它的表现进入了前 89% 的队列。
不过,和传闻的爆料一样,作为一个早期版本,该模型还不具备一些 ChatGPT 的常用功能,比如网页浏览和上传文件或图像等多模态能力。
相比之下,GPT-4o 反而会更加胜任许多常见的应用场景。
为了确保新模型的安全,OpenAI 提出了一种新的安全训练方法。
在最严苛的「越狱」测试中,GPT-4o 得分为 22(满分 100),而 o1-preview 模型得分为 84,在安全性方面堪称遥遥领先。
从下周开始,ChatGPT Enterprise 和 Edu 用户也可以访问这两款模型。符合条件的开发人员现在可以通过 API 使用这两款模型,每分钟速率也有所限制。
在这里划个重点,OpenAI 表示,未来将向所有 ChatGPT 免费用户提供 o1-mini 的访问权限。不过,大概率也会在次数上有所限制。
关于新模型 o1 更多细节,我们很快将在更详细的体验后与大家分享。如果你有感兴趣的问题,欢迎在留言区告诉我们。
比如使用 OpenAI o1 来编写一个找松鼠的网页游戏。这个游戏的目标是控制一只考拉躲避不断增加的草莓,并在 3 秒后找到出现的松鼠。
与传统的经典游戏如贪吃蛇不同,这类游戏的逻辑相对复杂,更考验 OpenAI o1 的逻辑推理能力。
又或者,OpenAI o1 已经开始能通过推理,解决一些简单的物理问题,
演示列举了一个例子,一颗小草莓被放在一个普通的杯子里,杯子倒扣在桌子上,然后杯子被拿起,询问草莓会在哪里,并要求解释推理过程。这表明模型能够理解物体在不同物理状态下的位置变化。
落地到具体的应用中,OpenAI o1 还能成为医生的得力助手,比如帮助医生整理总结的病例信息,甚至辅助诊断一些疑难杂症。
热衷于将 AI 与科学相结合的量子物理学家马里奥•克莱恩(Mario Krenn)也向 OpenAI 的 o1 模型提出一个关于特定的量子算符应用的问题,结果,OpenAI o1 也轻松拿捏。
「Strawberry」里有多少个「r」,GPT-4o 会回答错误,但却难不倒 OpenAI o1,这一点值得好评
不过,经过实测,OpenAI o1 依然无法解决「9.11 和 9.8 哪个大」的经典难题,严重扣分。
对于 OpenAI o1 的到来,英伟达具身智能负责人 Jim Fan 表示:
我们终于看到了推理时间扩展的范式被推广并投入生产。正如萨顿(强化学习教父)在《苦涩的教训》中所说,只有两种技术可以无限制地与计算规模化:
学习和搜索。是时候将重点转向后者了。
在他看来,大模型中的很多参数是用来记忆事实的,这的确有助于在问答的基准测试「刷分」,但如果将逻辑推理能力与知识(事实记忆)分开,使用一个小的「推理核心」来调用工具,如浏览器和代码验证器,这样可以减少预训练的计算量。
Jim Fan 也点出了 OpenAI o1 最强大的优势所在,即 o1 模型可以轻松成为数据飞轮的一部分。
简单来说,如果模型给出了正确的答案,那么整个搜索过程就可以变成一个包含正负奖励的训练数据集。这样的数据集可以用来训练未来的模型版本,并且随着生成的训练数据越来越精细,模型的表现也会不断改善。好一个通过自己博弈,实现自己训练自己的内循环。
不过网友的实测中也发现了一些问题,比如回复的时间长了不少,虽然花了更长时间思考,但在一些问题上也会出现答非所问输出不全等问题。
赛博禅心猜测,这次的 o1 有可能是 GPT-4o 在进行一些微调/对齐后的 agent,整体远低于预期,
Sam Altman 也承认 o1 仍然有缺陷,存在局限,在第一次使用时更令人印象深刻,而在你花更多时间使用后就没那么好了。
尽管如此,OpenAI o1 模型在整体的表现上还是可圈可点。
现在,OpenAI o1 模型的发布堪称下半年 AI 模型大战的导火索,如无意外,接下来,其他 AI 公司也不会藏着掖着了。
没错,我点的就是 Anthropic、Meta AI、xAI 等老对手、以及一些潜在深处的 AI 黑马。
并且,从 GPT-4 发布至今,OpenAI 每一次模型发布的最深层意义并不在于性能的强大,而是提供了一种技术路线的标杆,从而带领人们往未知的深水区迈进。
GPT-4 如此,OpenAI o1 也希望如此。
openai 今天发布「 ChatGPT o1-preview」,是会尝试主动思考的 ai 语言模型,chatgpt Plus 订阅用户现在就可使用。
根据 OpenAI 的说法:「我们训练这些模型〔ChatGPT o1-preview〕在回应前花更多时间思考问题,就像人类一样。通过训练,它们学会精炼思考过程、尝试不同策略,并能察觉自己的错误。」「如果您正在解决科学、程序设计、数学和相关领域的复杂问题,这些增强的推理能力可能特别有用。」
我自己在讲 ChatGPT 提升工作效率的相关课程时,常常强调一个设计指令的重点:「如果我们写 AI 指令〔 prompt、提示语〕时,可以让 AI 写出自己在想什么、怎么处理任务,通常生成的内容结果会相对更好。」
从用户端的角度来看「ChatGPT o1-preview」,就是在 AI 生成内容前,会先展开一步一步的思考流程,它可能会选择思考的策略与切入点,有时会提出一些批判思考,也会更仔细的分析资料细节来做深入处理。
在这个过程中,「ChatGPT o1-preview」生成内容的速度其实比 GPT-4o 要慢上不少,可能需要 30~60 秒的思考时间〔或者更久〕,才会开始一步一步的生成内容。
也因为这样的「思考」过程需要耗费更多运算资源,所以即使是 ChatGPT Plus 用户,在使用「ChatGPT o1-preview」时也有一些限制:
也就是说,目前「ChatGPT o1-preview」比较像是「GPT-4o」的辅助,在进行一些需要深入分析资料、产出有逻辑结果的任务,或者像是科学、数学、程序代码相关领域时,可以运用。
今天这篇文章,我就从自己日常惯用的几个 AI 辅助需求:翻译、摘要、企划思考、文案,以及有时用代码写个小工具的角度,以实际案例测试看看,「ChatGPT o1-preview」的效果如何,并和「GPT-4o」同样指令下的结果作比较。
当然,如果能从科学、数学与代码的角度来验证更好,不过从我个人常用角度出发,也想验证看看 ChatGPT o1-preview 是否能满足我的日常工作需求,也提供大家参考。
下面,先提供大家下面测试案例的快速心得比较表格。
翻译结果更简洁有力,文句白话流畅。
用语更符合台湾惯用词汇。
在「白话流畅度」与「专业用语」间平衡得更好。
翻译结果相对较弱,文句不如 o1-preview 流畅。
能计算分数并回馈对错。
无需修改即可使用。
需要多次反复调整才能达到可用程度。
提供具体、逻辑分明的建议步骤和文章架构。
深入分析资料细节。
缺乏深入的分析和明确的建议。
能整理出详细的步骤和操作要点。
细节完整程度略有不足。
缺乏社交贴文所需的流畅性和吸引力。
更注重安全性和准确性,避免使用版权材料。
可能在细节上不够精准。
首先来试试看翻译〔英翻中〕,我通常会用下面指令来要求 ChatGPT 翻译文章:「把下面这篇 XXX 主题的文章,翻译成中文,请一段一段翻译,尽量在维持原文语意,主题风格的情况下,让上下文的语句更自然通顺,遇到专有名词时附注英文原文,并在第一遍基本翻译后,用台湾惯用词汇与语气进行最后修饰。」
下图「左方」,是「ChatGPT o1-preview」翻译的结果。下图「右方」,是「GPT-4o」翻译的结果。
结论是,「ChatGPT o1-preview」花了 57 秒完成一整篇文章的翻译〔文章是 OpenAI「ChatGPT o1-preview」官方公告〕,但是翻译的结果比「GPT-4o」优异不少。
例如,大多数时候,「ChatGPT o1-preview」翻译的文句更加简洁有力〔相对「GPT-4o」〕,可以在许多段落看到这样的差别。
「ChatGPT o1-preview」翻译的结果也更白话,相对流畅,用语更符合我指定的中文用语。
「ChatGPT o1-preview」在「白话的流畅度」与「专业用语」之间也相对更能拿捏得当,会让人更容易看懂,但又保持专业用语的明确性。
我让「ChatGPT o1-preview」测试直接写一个九九乘法表小工具。o1 同样会先思考撰写工具的逻辑,然后才开始写出程序代码。
我提供的指令是:「我的小孩正在练习记忆数学的 99 乘法表 ,你可以设计一个协助她练习的小游戏吗?
请一步一步分析,从简单的 2 与 5 的乘法表开始,然后练习 3、4、6、7、8、9 的乘法表,根据每一个乘法表设计一个记忆游戏,游戏一开始可以选择要练习哪一个乘法表,进入后可以随机考验该乘法表的熟练度,最好设计有游戏机制。」
下面是 ChatGPT o1-preview 第一次生成的 99 乘法表小游戏,我没有做任何的修改,但是正确性、界面美化、操作流畅度都已经达到可用的程度,还会计算分数与回馈对错。
下面是旧版 GPT-4o 第一次生成的小游戏,基本界面可操作,但有一些明显错误〔如下图〕,可能还需要多几次的反复问答,才能调整正确。
我也很常跟 ChatGPT 一起讨论沟通企划案,下面是新旧版本生成的结果比较。
我提供了许多参考资料,请 AI 帮我做产品的企划报告。
「ChatGPT o1-preview」在生成过程中,会主动做一些反向思考,与探索不同的报告呈现方式,并且提供一些具体的、逻辑分明的建议步骤,这些不一定有出现在我的指令中。
下面是 ChatGPT o1-preview 生成的版本,我举出其中一部分,它提出了一个撰写初稿的建议方案,并指出了一些明确的试写步骤、文章架构方向。
下面是 GPT-4o 类似段落的版本,虽然也提出了撰写初稿的建议,但整体的说明就比较一般,少了一些明确的、深入的分析与建议。
我也测试了用两个版本去摘要同一篇文章。
下面是 ChatGPT o1-preview 的版本,可以看到文章细节整理得更深入、完整、有条理。
下面是 GPT-4o 版本摘要的结果,基本架构也相似,但细节的完整程度就有一点落差。
不过,ChatGPT o1-preview 也有他不擅长的内容,目前看起来它撰写流畅文案的效果,反而没有 GPT-4o 好〔现在写文案相对效果最好的可能是 Claude 3.5 Sonnet 〕。
下面我请 AI 根据参考资料写出社交贴文上的文案。
ChatGPT o1-preview 版本,AI 会思考撰写过程,撰写时会进行更多安全性、准确性的思考,例如避免使用版权材料。
但是多次尝试后,发现 ChatGPT o1-preview 版本目前的结果,比较像是把参考资料更有结构、更有逻辑的分析整理,不太像是社交贴文。
相较之下, GPT 4o 的版本,可能细节没有那么精准,但文案比较流畅。〔如下图〕
以上就是我的初步测试案例与心得,提供大家参考。
等每个网站弹出一个 Cookie 弹窗让你选择给不给用 Cookie,倒不如用插件一举解决这个烦恼。
这个插件解决的不是 Cookie 本身, 而是减少 Cookie 弹窗给用户带来的影响。
这个插件安装完毕后无需任何配置,它会自动处理大部分情况。在大多数情况下,扩展功能会阻止或隐藏与 Cookie 有关的弹出式窗口。(比如装完插件后试试打开 StackOverflow,左下角的弹窗就消失了)
具体点讲,它把网站通常要求使用的 Cookie 分为三类:技术、分析和营销。
当网站需要正常工作时,这款插件会自动判断,是接受 Cookie 政策,还是接受所有 Cookie,或是只接受必要的 Cookie。以尽可能减少对你的干扰。
WhoUsesCookies 这个插件能够看到 Chrome 插件使用的 Cookie 范围,并允许立即将插件禁用。
因为 Cookie 中存储的信息可能包括用户的登录状态、浏览偏好,甚至是敏感的加密货币钱包数据。如果某个恶意扩展插件获得了读取 Cookie 的权限,它可以轻松获取并滥用这些敏感信息。
这个插件目前没有在 Chrome 商店上架,你需要手动安装。
插件安装完毕后,只需点击浏览器工具栏中的「谁在用 Cookie」图标,即可查看哪些已安装的浏览器插件拥有 Cookie 访问权限。用户可以根据检测结果,决定是否禁用某些不必要或存在潜在风险的插件。
为了避嫌,插件还在 github 页面提供了「手动验证插件的安全性」的方法。用户可以自行检查插件的权限设置。以下是如何在 macos 系统上手动检查插件权限的步骤:
通过这种手动检查的方法,用户可以进一步验证插件是否存在未授权的权限请求,从而确保使用安全。
在日常浏览网页的过程中,我们的浏览器会收集并存储站点数据,如 Cookie、IndexedDB 和 LocalStorage 等。这些数据虽然有助于提升浏览体验,但也会占用存储空间。
如果你想在离开某些网页的同时立即清除 Cookie,但又在常用的网站里保留 Cookie(因为 Cookie 通常还会被用于维持登录状态),可以试试 Cookie AutoDelete 插件。
🏪 Cookie AutoDelete – Chrome 应用商店
使用 Cookie AutoDelete 插件很简单,为了充分发挥它的功能,可以遵循它的使用文档做一些配置:
n.eko 是一款多合一的浏览器工具,可以本地运行,也可以在 Docker 中运行。
n.eko 满足几乎一切都运行在浏览器里面的需求。因为运维需要,有些内部服务需要透传一下,单纯的服务没问题,但是一些厂商设备没有命令行。只可以用网页操作。这个项目甚至支持远程音视频,WebRTC 技术,还有验证登录。
Neko 可以让你在虚拟环境中运行功能齐全的浏览器,可以像在常规浏览器上一样浏览网页、运行应用程序,所有这些都在安全且隔离的环境中进行。
另外,还支持多用户同时使用。Neko 这样写着:
借助 Neko,您可以轻松、安全地与其他人共享浏览器的访问权限,而不必担心维护单独的配置或设置。无论您需要在项目上进行协作、访问共享资源,还是只是想与朋友或家人共享浏览器的访问权限,Neko 都能轻松实现。
听起来很不错啊:
Neko 也是举办观看派对和互动演示的绝佳工具。凭借其虚拟浏览器功能,Neko 允许您举办可从任何地方访问的观看聚会和演示,而无需亲自聚会。即使您无法亲自见面,也可以轻松地与朋友和同事保持联系。借助 Neko,您可以轻松举办观看聚会或进行互动演示,无论是休闲还是工作。只需邀请您的客人加入虚拟环境,您就可以共享屏幕并与他们实时互动。
N.eko 针对不同浏览器提供了不同的镜像:
推荐配置为 1280×720@30、4 核、3gb 内存,当然越搞越好。
docker-compose.yml 文件:
然后 docker-compose up -d 运行即可,使用 IP:8080 访问。
N.eko 甚至还有一个 VLC 版本…可以用来看剧
详细的可阅读文档。
windows 沙盒是微软为 Windows 10 专业版/企业版或者 Windows 11 中提供的功能,可以安全地在隔离状态下运行应用程序。不过默认并没有安装,需要使用 Windows 功能来安装,支持在 Hyper-V 虚拟机中使用。
Windows 沙盒 的主要用途就是在隔离的环境下,运行一些你认为不可靠的程序,这样不会影响本地系统安全性。当关闭沙盒之后,所有数据都会被删除(从 Windows 11 版本 22H2 开始支持沙盒内重启保存数据,但关闭依旧是删除)
安装 Windows 沙盒至少需要 Windows 10 专业版/企业版(18305 以后版本),或者 Windows 11,以及:
也就是说,太久的电脑就不要用啦
然后在开始菜单搜索打开或关闭 Windows 功能,勾选 Windows 沙盒,并重启电脑,即可。
在 Hyper-V 虚拟机之中想要启动沙盒,需要在本地主机中打开 PowerShell 然后输入:
然后就可以回到虚拟机中安装 Windows 沙盒 功能了。
启动 Windows 沙盒后的样子,看起来就是一个全新的 Windows 系统:
你可以直接将文件粘贴到沙盒里面,也可以通过沙盒里的 edge 浏览器从网络上下载。
如果想要禁用网络链接,需要创建一个 .wsb 的文件,内容为:
然后双击这个 .wsb 文件,就能打开一个不联网的 Windows 沙盒了。
另外通过配置文件,还能设置等 vGPU、映射本地文件夹、启动命令、共享麦克风、共享摄像头、RDP 协议、打印机、剪贴板、内存等功能。
最后就可以愉快的在沙盒中进行一次性操作了。
注意 1:每次关闭沙盒,里面的东西就没了。
注意 2:只有在 Windows 11 中,才支持沙盒中重启
官方文档在这里。
RTranslator 是一款适用于 android 的开源、免费、离线、实时的翻译应用程序。RTranslator 使用 Meta 的开源 ai 模型 NLLB 进行翻译,使用 openai 的开源 AI 模型 Whisper 进行语音识别,是一款可以直接在手机上运行的开源离线本地实时 AI 同传翻译 app,在境外也不用担心因为手机无信号或无流量而无法使用了。
Open source real-time translation app for Android that runs locally – niedev/RTranslator
如果双方手机都安装了 RTranslator 这个模式可以实现(几乎)实时的语音翻译对话。适用于会议或者长对话场景。
对话模式更适合长对话,对讲机模式则适用于临时对话场景,比如问路或者买东西时的对话。
就是个正常的翻译器,复制文字进去,选择什么语言翻译到什么语言,点翻译就给你翻译。
谁也不希望丢失数据,但这很难避免:文件误删除、意外停电、硬盘损坏、硬盘丢失、自然灾害……以上这些都会导致数据丢失,并且很可能无法直接恢复。相信很多人都有过这样的苦恼。本文将简单介绍备份的 321 原则,以及云端备份和本地备份的最佳实践。
以上的数据丢失都给人们带来了巨大的损失,但倘若我们能够提前做好数据备份,那么就能够降低数据后的损失。
在进行备份的过程中,我们应该施行 321 原则,这样才能保证备份的可靠性与有效性。
此外也应该注意备份的时效性,如果可能,要尽量缩短备份周期。比如每分钟备份的时效性就强于每小时备份。在数据丢失时,前者只会丢失最近 1 分钟的工作,而后者会丢失最近 1 小时的工作。
通常,云端备份是非常可靠的。云端服务器都会帮你做好 321 原则,你只需要选择一家云存储服务商并将要备份的文件上传上去即可。
建议选择提供了自动化备份功能的服务商,这样可以省去手动选择文件上传的步骤。通常自动备份还会对文件进行增量备份,即每次备份只上传上一次备份后有改动的文件,这样能大大节省上传时间。
一个典型的云端备份的例子是 iOS 中的 iCloud 备份功能,开启该功能后,iOS 设备会自动将图片、通讯录、文档、聊天记录、软件存档等个人数据上传到云端。在购买新的 iOS 设备后,这些数据都能够从云端自动恢复到新设备上。
定期将服务器上的重要文件打包上传到对象存储,即可实现简单的备份。可以直接使用 Amazon S3、Google Cloud Storage、阿里云 OSS、腾讯云 COS 的对象存储,上述服务均提供 99.999999999% 的持久性,即文件一旦上传完毕,几乎不可能意外丢失。云服务中的对象存储通常是在一个区域内的多个可用区(通常至少三个)进行存储,每个可用区内也包含文件的多个副本。各个可用区之间有一定的距离,所以这实现了异地。关于区域和可用区,可以详细参考 AWS 的这篇文章。
云服务的对象存储一般都可以选择地区。通常选择地理位置最近的地区以获得最低的延迟。这些服务通常是按照使用量计费的,主要包括在一定时间内占用的存储空间以及传输数据所用的流量费用。比如你要备份 1GB 的数据,那么每月可能只需要几块钱或几毛钱,甚至是免费的。(不同服务商收费不一)
很多服务器上的软件已经集成了使用对象存储进行备份的功能:在服务提供商开通了对象存储后,只需要在软件中配置好授权密钥,就可以使用对象存储进行备份了。如果软件没有集成这种备份功能,那么也可以手动实现简单的备份。比如,使用 mysqldump
导出数据库文件,使用 gzip
、 tar
命令压缩、打包要备份的文件。通常对象存储的提供商也有提供命令行工具,使用这些工具可以简单的将文件上传到对象存储中。如 AWS 有 aws
,支持 S3 操作;Google Cloud Storage 有 gsutil
;阿里云 OSS 有 ossutil
;腾讯云有 tccli
,支持 COS 操作。
通常快照可以备份服务器磁盘上的所有数据。从快照中恢复也十分方便。这甚至都不需要服务器上的软件支持备份功能。不管是服务器磁盘损坏、系统文件丢失,还是文件删除,都可以从快照中恢复。
如果条件允许,建议同时使用对象存储备份和快照备份。
尽管云端备份简单、持久性高,但备份大容量的数据的速度与带宽成正比。何况备份所需要的是上行带宽,这通常是运营商所标称的下行带宽的几分之一。而仅仅是使用普通的机械硬盘进行备份,其速度就已经达到了千兆网络的速度,而千兆网络普及率低且价格极其昂贵。所以,遇到数据量大、带宽受限、备份/恢复时间有限等一种或几种情况时,本地备份也许更为合适。
在本地备份则需要自己做好 321 原则。你需要将数据备份到两个硬盘上(通过局域网或有线连接),并将其中一个硬盘存放在异地。很多桌面操作系统都支持了备份,你可以在最新的 Windows 系统的控制面板中找到备份功能,在 macOS 上使用时间机器(Time Machine)进行备份。建议配置好自动备份。
如果条件允许,建议在本地备份的同时,将较重要的文件再备份到云端。
我们应该保留文件的早期版本,以便不时之需。保留多个历史版本的文件使用增量备份有助于节省存储空间。如果条件允许,应保留尽可能多的历史版本。
早期的版本可以有相对更长的时间间隔,以便节省空间:像 macOS 中的时间机器(Time Machine),它会保留过去 24 小时的每小时备份、过去一个月内的每日备份、以及过去一个月以上的尽可能多的每周备份,直到磁盘空间填满。
一些网络存储会自动保留历史版本,比如 Dropbox、Google 云端磁盘、iCloud 等。一些软件也会在本地磁盘里保留历史版本。比如 Git 就会保留每一次提交的历史。
建议首先对重要文件保留历史版本,如果可能对所有文件保留历史版本。
通常对象存储提供多种存储类别,不同存储类别有不同的定价和使用场景,合理的使用多种存储类别可以节省支出。
按存储价格由高到低排序,持久性均为 99.999999999%,均为多个可用区。
大于 128kb 的且不经常访问的备份建议存储到 STANDARD_IA,几乎不会再访问的早期的历史版本可以存储到 GLACIER。
按存储价格由高到低排序,持久性均为 99.999999999%,均为多个可用区。
同样的,不经常访问的备份建议存储到 Nearline,几乎不会再访问的早期的历史版本可以存储到 Coldline。
按存储价格由高到低排序,持久性均为 99.999999999%,均为多个可用区。
同样的,不经常访问的备份建议存储到低频访问型,几乎不会再访问的早期的历史版本可以存储到归档型。
续之前的域名解析系统详解——基础篇,DNSSEC 是一组使域名解析系统(DNS)更加安全的解决方案。1993 年,IETF 展开了一个关于如何使 DNS 更加可信的公开讨论,最终决定了一个 DNS 的扩展——DNSSEC,并于 2005 年正式发布。然而,实际推行 DNSSEC 是一件非常难的事情,本文将讨论一下现有 DNS 系统所存在的一些不安全性,以及 DNSSEC 是如何解决这些问题的。
从上一篇文章中已经知道,在你访问一个网站,比如 www.example.com
时,浏览器发送一个 DNS 消息到一个 DNS 缓存服务器上去查询,由于 DNS 系统的庞大,这中间还需要经过好几层 DNS 缓存服务器。想要正确访问到这个网站,就需要这所有的缓存服务器都要正确的响应。
DNS 查询是明文传输的,也就是说中间人可以在传输的过程中对其更改,甚至是去自动判断不同的域名然后去做特殊处理。即使是使用其他的 DNS 缓存服务器,如 Google 的 8.8.8.8
,中间人也可以直接截获 IP 包去伪造响应内容。由于我所在的国家就面临着这个问题,所以我可以轻松的给大家演示一下被中间人攻击之后是什么个情况:
$ dig +short @4.0.0.0 facebook.com243.185.187.39
向一个没有指向任何服务器的 IP 地址:4.0.0.0
发送一个 DNS 请求,应该得不到任何响应。可是实际上在我所处的国家却返回了一个结果,很明显数据包在传输过程中“被做了手脚”。所以如果没有中间人攻击,效果是这样的:
$ dig +short @4.0.0.0 facebook.com;; connection timed out; no servers could be reached
DNS 系统就是这么脆弱,和其他任何互联网服务一样,网络服务提供商、路由器管理员等均可以充当“中间人”的角色,来对客户端与服务器之间传送的数据包进行收集,甚至替换修改,从而导致客户端得到了不正确的信息。然而,通过一定的加密手段,可以防止中间人看到在互联网上传输的数据内容,或者可以知道原始的数据数据是否被中间人修改。
讲到 DNSSEC,就不得不讲到一些密码学的知识。这里从最基本的密码学开始讲起。 密码学主要分为三大类,这里也列出每一列常用的加密算法:
在 DNSSEC 中,主要使用到的是公钥密码学和数据完整性算法两种加密学。
公钥密码主要是与对称密码进行区分:对称密码的加密与解密使用相同的密钥;而公钥密码使用的加密密钥叫做公钥,解密密钥叫做私钥——两种密钥相对独立,不能替代对方的位置,而且知道公钥无法推出私钥。这两种密码学都必须是可逆的(所以解密算法可以看作加密算法的逆)。以函数的形式表达的话如下:
密文 = 加密算法(密钥, 原文)
原文 = 解密算法(密钥, 密文)
密文 = 加密算法(公钥, 原文)
原文 = 解密算法(私钥, 密文)
当然,如果私钥充当公钥,公钥充当私钥,那么就是这样的:
密文 = 加密算法(私钥, 原文)
原文 = 解密算法(公钥, 密文)
假如服务器要向客户端发送一段消息,服务器有私钥,客户端有公钥。服务器使用私钥对文本进行加密,然后传送给客户端,客户端使用公钥对其解密。由于只有服务器有私钥,所以只有服务器可以加密文本,因此加密后的文本可以认证是谁发的,并且能保证数据完整性,这样加密就相当于给记录增加了**数字签名**。但是需要注意的是,由于公钥是公开的,所以数据只是不能被篡改,但可以被监听。 此处的服务器如果是充当 DNS 服务器,那么就能给 DNS 服务带来这个特性,然而一个问题就出现了,如何传输公钥?如果公钥是使用明文传输,那么攻击者可以直接将公钥换成自己的,然后对数据篡改。
所以,一个解决的方法是使用一个被公认的公钥服务器,客户端的操作系统中在本地先存好这个公钥服务器自身的公钥。当与服务器通信时,客户端从这个被公认的公钥服务器通信,用户使用操作系统中内置的公钥来解密获得服务器的公钥,然后再与服务器通信。
然而 DNS 是一个庞大的系统,在这个系统中根域名服务器充当了被公认的公钥服务器,其中每一个一级域名服务器也是一个子公钥服务器。最后一张图,就是 DNSSEC 的基本雏形了。
在密码学中,还存在一种检查数据完整性的算法,其 “加密” 无须密钥,密文不可逆(或很难求逆),而且密文与原文不是一一对应的关系。而且,通过此算法算出的密文通常是一个固定长度的内容。通过此算法算出的密文叫做哈希值。在 DNSSEC 里所运用到它的特性是:原文一旦修改,密文就会发生变化。 公钥密码学存在的一个很重要的问题:加密和解密的速度相对于对称密码太慢了。所以想要提高性能,就需要减短需要加密和解密的文本。如果只是对文本的哈希值加密,由于长度的减短,加密速度就能大大提高。在服务器传送时,同时传送明文的文本和使用私钥加密的文本哈希值;客户端只需要先算出收到的明文文本的哈希值,然后再用公钥解密密文,验证两个值是否相等,依然能够防止篡改。 在 DNSSEC 中就运用了这种方法,无论是对密钥还是记录的加密。
DNSSEC 这一个扩展可以为 DNS 记录添加验证信息,于是缓存服务器和客户端上的软件能够验证所获得的数据,可以得到 DNS 结果是真是假的结论。上一篇文章讲到过 DNS 解析是从根域名服务器开始,再一级一级向下解析,这与 DNSSEC 的信任链完全相同。所以部署 DNSSEC 也必须从根域名服务器开始。本文也就从根域名服务器讲起。
DNSSEC 和 HTTPS 是两个完全不同的东西,但是这里只是对其加密方式对比。即 DNSSEC 的加密方式与 TLS 进行对比。
在配置 DNSSEC 的时候,如果与 HTTPS 比较,可以看出来:证书和私钥全部都是在自己的服务器上直接生成的,也就意味着这是 “自签名的”,不需要任何 “根证书颁发商”。二级域名所有者向一级域名注册商提交自己的公钥的哈希值,然后一级域名注册商就会给你的哈希值进行签名,从而也能形成一道信任链,远比 HTTPS 的信任链简单,操作系统也再不用内置那么多个 CA 证书,只需要一个根域名的 DS 记录即可。个人认为这是一个更先进的模式,但是它需要客户端一级一级的去依次解析,于是受到了速度的影响;HTTPS 则是直接由一个服务器返回整条证书链,与服务器进行 HTTPS 的连接时只需要与一个服务器通信。不过,DNS 记录是可以被缓存的,所以能够一定程度上的减少 DNSSEC 的延迟。
你发往 DNS 服务器的请求是明文的,DNS 服务器返回的请求是带签名的明文。这样 DNSSEC 只是保证了 DNS 不可被篡改,但是可以被监听,所以 DNS 不适合传输敏感信息,然而实际上的 DNS 记录几乎都不是敏感信息。HTTPS 的话会同时签名和双向加密,这样就能够传输敏感信息。 DNSSEC 的只签名,不加密主要是因为 DNSSEC 是 DNS 的一个子集,使用的是同一个端口,所以是为了兼容 DNS 而作出的东西,而 DNS 是不需要客户端与服务器建立连接的,只是客户端向服务器发一个请求,服务器再向客户端返回结果这么简单,所以 DNS 都可以使用 UDP 来传输,不需要 TCP 的握手,速度非常快。HTTPS 不是 HTTP 的子集,所以它使用的是另一个端口,为了做到加密,需要先与浏览器协商密钥,这之间进行了好几次的握手,延迟也上去了。
刚才所讲述的所有情况,都是在没有 DNS 缓存服务器的情况下。如果有 DNS 缓存服务器呢? 实际上,一些 DNS 缓存服务器就已经完成了 DNSSEC 验证,即使客户端不支持。在缓存服务器上验证失败,就直接不返回解析结果。在缓存服务器进行 DNSSEC 验证,几乎不会增加多少延迟。 但这也存在问题,如果缓存服务器到客户端之间的线路不安全呢?所以最安全的方法是在客户端上也进行一次验证,但这就会增加延迟了。
DNSSEC 相比 HTTPS 的一个特性就是 DNSSEC 是可以被缓存的,而且即使是缓存了也能验证信息的真实性,任何中间人也无法篡改。然而,既然能够缓存,就应该规定一个缓存的时长,并且这个时长也是无法篡改的。 签名是有时效性的,这样客户端才能够知道自己获得到的是最新的记录,而不是以前的记录。假如没有时效性,你的域名解析到的 IP 从 A 换到了 B,在更换之前任何人都可以轻易拿到 A 的签名。攻击者可以将 A 的签名保存下来,当你更换了 IP 后,攻击者可以继续篡改响应的 IP 为 A,并继续使用原本 A 的签名,客户端也不会察觉,这并不是所期望的。 然而在实际的 RRSIG 签名中,会包含一个时间戳(并非 UNIX 时间戳,而是一个便于阅读的时间戳),比如 20170215044626,就代表着 UTC 2017-02-15 04:46:26,这个时间戳是指这个记录的失效时间,这意味着在这个时间之后,这个签名就是无效的了。时间戳会被加进加密内容中去参与签名的计算,这样攻击者就无法更改这个时间戳。由于时间戳的存在,就限制了一个 DNS 响应可以被缓存的时长(时长就是失效时间戳减去当前时间戳)。然而,在有 DNSSEC 之前,控制缓存时长是由 TTL 决定的,所以为了确保兼容性,这两个时长应该是完全一样的。 通过这样做,即能够兼容现有的 DNS 协议,有能够保证安全,还能够利用缓存资源加快客户端的请求速度,是一个比较完美的解决方案。
其实,即使完全不了解,或者没看懂上面的内容,也不影响你去部署 DNSSEC,只不过你应当非常仔细的对待它,稍有不慎可能导致用户无法解析的情况。
由于是使用第三方的 DNS,部署 DNSSEC 就必须需要第三方支持。常见的支持 DNSSEC 的第三方 DNS 有 Cloudflare、Rage4、Google Cloud DNS(需要申请)、DynDNS 等。开启 DNSSEC 前首先需要在第三方服务上激活 DNSSEC,这样第三方 DNS 才会返回关于 DNSSEC 的记录。 在第三方的 DNS 上激活了 DNSSEC 之后,第三方会给你一个 DS 记录,大概长这样:
tlo.xyz. 3600 IN DS 2371 13 2 913f95fd6716594b19e68352d6a76002fdfa595bb6df5caae7e671ee028ef346
此时,你就需要前往域名注册商,给你的域名提供这个 DS 记录(有些域名注册商可能不支持添加 DS 记录,此时你可以考虑转移到本站的域名注册商或者其他支持 DS 记录的注册商。此外,一些域名后缀也不支持添加 DS 记录,建议你使用主流后缀,如 .com 等,此处就以本站的域名注册商为例):
添加然后保存,一切就 OK 了。注意关键标签(Key Tag)就是 DS 记录里的第一项(此处对应的是 2371),算法(Algorithm)就是第二项(此处对应的是 13),算法类型(Digest Type)就是第三项(此处对应的是 2),整理分类(Digest)就是最后一项。剩下的内容不需要填写。 有的第三方 DNS(比如 Rage4)会给你一下子提供多个 DS 记录(相同的关键标签但是不同的算法和算法类型),然而你不需要都填写上。我建议只填写使用算法 13 与类型 2 或者算法 8 类型与类型 2 的 DS。这两个分别是 Cloudflare 推荐的参数和根域名目前所使用的参数。填写多个 DS 记录不会给你带来多少的安全性提升,但可能会增大客户端的计算量。
使用自建 DNS 首先需要先生成一对密钥对,然后将其添加到 DNS 服务中去。我已经介绍了关于 PowerDNS 的添加 DNSSEC 的方法。 在此之后,你需要生成 DS 记录,通常你生成 DS 记录也是很多个,和第三方 DNS 一样,我建议只向域名注册商提交使用算法 13 与类型 2 或者算法 8 类型与类型 2 的 DS。
在 DNS 中,有一些是安全性相关的记录,比如 DS、TLSA、CAA、SSHFP、IPSEC、以及一些通过 TXT 记录来实现的记录等。安全性相关的记录类型十分建议包含签名,也就是说安全性相关的记录应该使用 DNSSEC。此外,当一个域名下不包含这种记录类型时,也必须返回 NSEC 记录并签名。之前一篇文章中所介绍的 DS 就是一个例子。除了 DS 外,还有这些记录类型:
DANE 可以用于绑定某个域名下的某个服务的证书,也就是说可以让一些原本被客户端信任的证书不被信任,证书颁发商未经网站管理人授权签发的证书可以不被信任,可以实现和 Certificate Transparency 类似的效果。这容易与 HPKP Pin 混淆。HPKP Pin 后者只能使用于 HTTPS 服务,且只有成功且没有劫持的访问过才有效果(所以为了使 HPKP Pin 达到真正安全,必须需要建立一个受信任的中央服务器去 Preload 这些记录,类似 HSTS);DANE 即使是在第一次访问也无法被劫持,而且可以用于 Mail 等域名相关的 SSL 服务,不只限于 HTTPS。 我认为 DANE 的真正有意思的地方是在于它可以让客户端去有选择的信任自签名的证书,也就是说可以让一些原本不被客户端信任的证书被信任:通过 DNS 的方式向浏览器告知这个网站自签名证书的公钥,由于包含了签名,浏览器就能够知道这是域名所有者的公钥,就能够在这个域名下信任这个自签名的证书。这打破了目前常用的 CA 机制,网站管理者也再也不用去向 CA 花钱或者是不花钱的申请证书,而是直接使用自签名证书甚至是自己管理的 CA 签发的证书,操作系统也不再需要选择去信任哪些根证书,也能避免传统证书签发商系统存在结构性缺陷(比如证书签发商通过自己签发证书来进行 HTTPS 中间人等)。然而实现这一步首先需要客户端的支持,已经开始有程序开始支持,然而却还没有看到浏览器去支持的迹象。 使用了自签名证书的 HTTPS 且配合了 DANE 的站点与常规 HTTPS 站点的信任链对比:
注:域名 tloxygen.com 只是在本地环境中进行的测试,公网无法访问
实现 DANE 的方式主要是通过 TLSA 记录: TLSA 记录包含了证书的哈希值,或者是某一个中间证书的哈希值(或者也可以是完整的证书)。同时,它可以针对不同的协议和端口配置不同的 TLSA 记录。我认为,TLSA 是最安全的一种 DANE 的方式。 你可以在这个网站生成一个 TLSA 记录,我的 dane-trusted-ca.tloxygen.com 站点绑定了 Let’s Encrypt 的中间证书,设置的 TLSA 记录是这样的:
_443._tcp.dane-trusted-ca.tloxygen.com. 604800 IN TLSA 0 0 1 25847D668EB4F04FDD40B12B6B0740C567DA7D024308EB6C2C96FE41D9DE218D
这里记录中的第一项(这里是 0)代表着 PKIX-TA,TA 意味着这个根证书或是中间证书必须在这个域名所使用的证书链中,也就是说这个域名只能使用某一个证书颁发商颁发的证书。如果第一项填写 1,代表着 PKIX-EE,EE 意味着这个证书必须是域名所使用的证书,也就是说每次更换证书后都得修改这个记录。PKIX 意味着这个证书链是受操作系统信任的,在使用证书颁发商颁发的证书时(如 Let’s Encrypt),应该使用 PKIX。 当第一项为 2 和 3 时,一切就变的有意思多了,2 代表着 DANE-TA,代表着绑定一个自签名的根证书,我的 dane-self-ca.tloxygen.com 站点就绑定了一个自签名的 Root,设置的 TLSA 是这样的:
_443._tcp.dane-trusted-ca.tloxygen.com. 604800 IN TLSA 0 0 1 25847D668EB4F04FDD40B12B6B0740C567DA7D024308EB6C2C96FE41D9DE218D
所以如果客户端支持了 DANE,那么这个自签名的根证书在这个域名下就是被信任的。 当第一项为 3 时,代表着 DANE-EE,这可以直接绑定域名证书,意味着不但可以使用自签名的证书,连证书链都免去了,我的 dane-self-signed.tloxygen.com 就直接使用了一个自签名的证书,设置的 TLSA 是这样的:
_443._tcp.dane-self-signed.tloxygen.com. 604800 IN TLSA 3 0 1 BF617DDCC4F39BD0C9228FC0C1EAD5E96252F36FB3FB5AB0CBB9B9B09C3CFE21
你可以在这个网站找到更多的不同种类的支持 TLSA 的网站。 那么问题就来了,为什么现有的浏览器都不支持 TLSA 呢?我认为主要原因如下:
然而我认为这些都不是什么问题。为了解决 DNS 的问题,可以使用 Google DNS-over-HTTPS,这样的话就能避免很多 DNS 污染的问题,而且由于 DNSSEC 本身包含签名,Google 是无法对返回内容篡改的。那么直至现在,TLSA 就只存在最后一个问题:为了获取 TLSA 记录而增加的加载延迟。而这也可以完美解决,OCSP 就是一个例子,现在传统的 CA 为了实现吊销机制,也都有 OCSP:
OCSP(Online Certificate Status Protocol,在线证书状态协议)是用来检验证书合法性的在线查询服务,一般由证书所属 CA 提供。为了真正的安全,客户端会在 TLS 握手阶段进一步协商时,实时查询 OCSP 接口,并在获得结果前阻塞后续流程。OCSP 查询本质是一次完整的 HTTP 请求,导致最终建立 TLS 连接时间变得更长。
- ——JerryQu
这样,在开始正式开始加载页面,客户端也需要进行一次 HTTP 请求去查询 OCSP。OCSP 也会十分影响页面加载速度,也同样会增加加载页面出错的可能。而 OCSP 有了 OCSP Stapling,这样的话 Web 服务器会预先从 CA 获取好 OCSP 的内容,在与 Web 服务器进行 HTTPS 连接时,这个内容直接返回给客户端。由于 OCSP 内容包含了签名,Web 服务器是无法造假的,所以这一整个过程是安全的。同理,TLSA 记录也可以被预存储在 Web 服务器中,在 TLS 握手阶段直接发送给客户端。这就是 DNSSEC/DANE Chain Stapling,这个想法已经被很多人提出,然而直至现在还未被列入规范。也许浏览器未来会支持 TLSA,但至少还需要很长一段时间。
传统的证书配合了现在的 Certificate Transparency,即使不需要 TLSA 记录,也能一定程度上保证了证书签发的可靠性。此外,传统证书也可以使用 TLSA,其本身的安全性不比 DANE 自签名差。 此外,传统 CA 签发的证书还有自签名证书做不到的地方:
CAA 比较简单,它相当于是公开声明这个域名允许了哪些证书颁发商颁发的证书。CAA 不需要 DNSSEC,写在这里只是和 TLSA 区分一下,但开启 DNSSEC 无疑能够使 CAA 更可信。 比如在域名添加了如下记录,就相当于限制了仅允许 Let’s Encrypt 签发证书,其他证书签发商则不再给这个域名签发证书。在 CAA 记录刚推出时受到以下因素限制:
但是从 2017 年底开始,所有证书颁发商被强制要求遵守域名的 CAA 记录。来源 CAA 的副作用最小,你也可以添加多个 CAA 记录来允许多个证书颁发商去签发,以增加灵活性。 google.com 就使用了 CAA(但是没有开启 DNSSEC):
$ dig google.com caa;; ANSWER SECTION:google.com.86399INCAA0 issue "symantec.com"
如果要将一个域名绑定在某个证书颁发商下,建议同时使用 TLSA 和 CAA。如果是长期的绑定,可以考虑一下 HPKP Pin。
在使用 SSH 首次连接一个主机时,SSH 通常会询问是否信任服务器的指纹(fingerprint):
$ ssh guozeyu.comThe authenticity of host 'guozeyu.com (104.199.138.99)' can't be established.ECDSA key fingerprint is SHA256:TDDVGvTLUIYr6NTZQbXITcr7mjI5eGCpqWFpXjJLUkA.Are you sure you want to continue connecting (yes/no)?
这个指纹告诉你了你连接到的是这个服务器,而不是别的服务器。你需要确认这个指纹与自己所要连接到的服务器匹配时,才应该进行连接,不然你就会连接到别的服务器(攻击者可以让服务器允许任何来源的 SSH,于是你就成功登陆到了攻击者的服务器。这样你所执行的代码,甚至是通过 SSH 提交的 Git,都能被获取到)。 那些允许公开的 SSH 连接的服务器,如 GitHub,会在网站上公开自己的指纹,用户需到在它们的官方文档中找到指纹。而 SSHFP 则是一种更简单且通用的的公开这个指纹的方式,这个功能甚至都集成到了 SSH 中去,当检测到指纹匹配时就会自动登陆,跳过询问指纹的步骤。 然而,假如攻击者同时控制了网络中的 DNS 和 SSH,那么 SSHFP 反而是更加不安全的。所以客户端仅应该信任使用了 DNSSEC 的 SSHFP 记录。 编辑 ~/.ssh/config
,添加这一行即可实现验证 SSHFP 记录:
VerifyHostKeyDNS=ask
如果将 ask
换为 yes
,那么会默认信任 SSHFP 记录。
前面我们介绍了 DNSSEC 的基本原理,这一篇文章中将会介绍给你 DNSSEC 的具体实现方法,我来使用 dig 程序为大家分析 DNSSEC 的实现过程
我有一个域名 tlo.xyz
长期部署了 DNSSEC,所以本文就拿这个域名作为例子讲解。首先,需要明确的是如何让 dig
程序去显示关于 DNSSEC 的资源类型,幸运的是这很简单,只需要加上 +dnssec
参数即可。 在之前的文章中,我们已经知道了根域名公开了 13 个服务器的 IP 地址。此外,其实根域名还公开了一组 DS 记录,这段记录可以在这里获得。
.172800INDS19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5.172800INDS20326 8 2 E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
第二条记录是 2016 年 10 月份生成,并在 2018 年 10 月完成切换。 现在我们利用这个地址查询根域名自身,结果如下(部分无关内容已经被删掉):
$ dig @a.root-servers.net. . any +dnssec;; ANSWER SECTION:.518400INNSa.root-servers.net.;; 这里省略剩下 12 个根域名服务器.518400INRRSIGNS 8 0 518400 20170227170000 20170214160000 61045 . HnSVXyC8UZuXnpOsZOv1/GP2byJFG9Y9ch4q0eUw/6CMEJ403spJ67Oo JiAGhdiE6xlONAMQN0Q7LpA7/bgCf29mmVJDcG76b/qaVnmRjKErBwep 68K831Uph2V+Rixcw8mx5XYWuMDyKDiRWlrPyY/bT0a7Us7dTnhkNJ+D g25E0lqXNKY9XgroVoTlwc5tCIe6L8GhoDU+LTLtBySBgQa3kEAI7WUQ CT4l47BCu3zzh8sJtdKGEXnXD0e22pB4ZaYF80iVWL1cRgghn2HphlN0 1kFJr3WuuIKP9r4vZFIjKiinV1KJdBBW2fciGAx+nZbP5sSUlOdiz/56 BZKM3g==.86400INNSECaaa. NS SOA RRSIG NSEC DNSKEY.86400INRRSIGNSEC 8 0 86400 20170227170000 20170214160000 61045 . JQQEDSGFolKu38MmdvvDj7Zi2AstqZc2cwhPQE+RRwTBVl3SWQOQ4FaS Wta+CdbhbaRAKQ9dUiOif95LLarewJDF9e4O2zTDsLt5MlgXLGZr3xd4 9HhDkEzjRk4Zro2qquvWmsHUjn+fbru4FsO6sZyS/FWjfh0XImlIYfh4 D50IplgRwv6awu4mO2RzJ0VL94l4WMMnV42vPSfWiNpL+9g7PHmaWkwe EqH7RamPDzw/M3bmts5yWp+cEI4IzE25kmZAHwN9EQHNNtDL3qKtAzrY wj6e8VVw0rI/XJ3DMI5aRk3xB+ac13dQv8cWtQZRImw76A5/N6clBXJS ZpmT+w==.172800INDNSKEY256 3 8 AwEAAYvgWbYkpeGgdPKaKTJU3Us4YSTRgy7+dzvfArIhi2tKoZ/WR1Df w883SOU6Uw7tpVRkLarN0oIMK/xbOBD1DcXnyfElBwKsz4sVVWmfyr/x +igD/UjrcJ5zEBUrUmVtHyjar7ccaVc1/3ntkhZjI1hcungAlOhPhHlk MeX+5Azx6GdX//An5OgrdyH3o/JmOPMDX1mt806JI/hf0EwAp1pBwo5e 8SrSuR1tD3sgNjr6IzCdrKSgqi92z49zcdis3EaY199WFW60DCS7ydu+ +T5Xa+GyOw1quagwf/JUC/mEpeBQYWrnpkBbpDB3sy4+P2i8iCvavehb RyVm9U0MlIc=.172800INDNSKEY257 3 8 AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=.172800INRRSIGDNSKEY 8 0 172800 20170303000000 20170210000000 19036 . KHz7GVvg5DxUv70bUhSjRy1JO5soL+h6M08g8bSKecd+4NmZI87Sn20p uZNRuiASbnG63i89Z2S45NBAR8KtqB6N5CrRhLhfxZcRo5k3Ts6zsC1E J58upPKzFtu/sJBsPDjcRJJKbXlB4hLukQwVhn/MbsXxZdZGI57WoLFx bbR49NlFJrlrbTi2gieRR1SCLfT9aiBGsJA3T4jXap9FIsikNf1DJA8H cnQTW7hFi8l/O2ni2hbjsIE4S3GRTMypqDR/s7piy/qukfWwSknk6YZT bzld6ZgbZK+oOhRgj/W6XW78bJl0onov0F1wD0NQsec+sk2P+JNMc4xg vQmn9g==.86400INSOAa.root-servers.net. nstld.verisign-grs.com. 2017021401 1800 900 604800 86400.86400INRRSIGSOA 8 0 86400 20170227170000 20170214160000 61045 . A5CqIucYyfFTzp03EuajDjp5Vw6dd3Oxip60AI7MCs/2xfBu1red4ZvF GfIEGHstG61iAxf7S3WlycHX9xKyfIOUPmMxuvkI9/NXMUHuvjUjv9KW TTkc1HV6PuUB1sv9gsuQ6GFnHCXAgMKXZs9YofRDlBi2jxAvJVc5U7nG sd8UqQs4WcinMHNvFV9+gwfax0Cr9KFDmDUbS+S2wYmNs+SGOn+CbFrD 8gs34GiYao8i0QGw7RVGTVJiuVOuUkeYe4iSXnJjNjeIlm8liq6PRXgM nI+ndPDogA/a8JATfyzQ97VDRwe/FucoTbe5qd2cHxqh1ZxxPkA3K3Fj 8Jv3kg==;; ADDITIONAL SECTION:a.root-servers.net.518400INA198.41.0.4a.root-servers.net.518400INAAAA2001:503:ba3e::2:30;; 这里省略剩下 12 个根域名服务器
可以看到,此时没有再返回 DS 记录,因为 DS 记录总是由一个区域的上一级区域的权威服务器返回,之后还会再次提到这个问题。此处的 DNSKEY、RRSIG、NSEC 是三个关于 DNSSEC 的记录类型:
可以看到,上方查询的 DNSKEY 记录有两条,这两条的内容的第一项分别是 256 和 257。256 是 ZSK(zone-signing keys),257 是 KSK(key-signing keys)。其中 KSK 是专门用于签名 DNSKEY 记录集(就是 ZSK 与 KSK),而 ZSK 是用于签名该区域下的其他记录集。 仔细观察,就可以看出,每一种记录后面就对应着一个用于签名该种类记录的 RRSIG 记录,比如上面查询结果中的 NS、NSEC、DNSKEY、SOA 记录的后面都跟着一个 RRSIG 记录。 举个例子,客户端解析并验证根域名的 SOA 记录的方法大概如下:
但是值得注意的是,根域名服务器所返回的 Glue 记录却没有数字签名,那是因为这是不必要的。就算 Glue 记录被篡改成了别的服务器,那个服务器在解析根域名时也不能篡改任何权威记录(在 ANSWER SECTION 下)。
然后,我们来使用根域名服务器解析一级域名:
$ dig @a.root-servers.net. xyz. any +dnssec;; AUTHORITY SECTION:xyz.172800INNSx.nic.xyz.;; 这里省略剩下 3 个服务器xyz.86400INDS3599 8 2 B9733869BC84C86BB59D102BA5DA6B27B2088552332A39DCD54BC4E8 D66B0499xyz.86400INDS3599 8 1 3FA3B264F45DB5F38BEDEAF1A88B76AA318C2C7Fxyz.86400INRRSIGDS 8 1 86400 20170227170000 20170214160000 61045 . gXpaapTu67jlkfOeujL455lFDGLmLkFpnI+f8VNLMehozA7qWQD71oso SXJxkOB6o/ldXqoLGIo1khsYS8SMltOCMisJ6eA2cLokB7Ybzsaw8GWZ rkx64u2JbELWMbwGnY3PnZHGlBT77oAt49KNDfpxhgm3k1Yrcrua25D8 PL4fz6IQYQIMXWiHM/V2jH6E2Vu1Ynrjiu0lPEMf0TnGsK/URnCGE9uZ caT41mNz9kri/wkuQR11XtHjsN/qZgmcxZK+Tf4VQfOOdcfey4wAa1CM HRQ3Pm4mLo4LQwiESeMuqFyriizdMG4piNP7NLuI54GqWCGNSyDYbOdL X0n2Aw==;; ADDITIONAL SECTION:x.nic.xyz.172800INA194.169.218.42x.nic.xyz.172800INAAAA2001:67c:13cc::1:42;; 这里省略剩下 3 个服务器
这里返回的 DS 记录,虽然是两个,但是其 Key Tag(即第一项,为 3599)是相同的,后面两项算法有所不同,这其实就是同一个 KSK 的两种不同的哈希值算法,这个是为了提高兼容性和有限的安全性。这与刚才根域名的情况不一样,根域名下面的是完全两个不同的 KSK 的不同的 DS。 此时我们发现了不仅是 Glue 记录,NS 记录下也没有签名,这是因为这里返回的 NS 记录是属于委托记录(在 AUTHORITY SECTION 下),也不需要签名,xyz.
下 NS 记录的签名应该有 xyz.
的解析服务器来完成(而 DS 记录是例外)。我们来使用一级域名服务器来解析其自身:
$ dig @x.nic.xyz. xyz. any +dnssec;; ANSWER SECTION:xyz.172800INNSx.nic.xyz.xyz.172800INNSy.nic.xyz.xyz.172800INNSz.nic.xyz.xyz.172800INNSgenerationxyz.nic.xyz.xyz.172800INRRSIGNS 8 1 172800 20170525152637 20170425162314 47496 xyz. p57paKPWMyhwmz5IkkbZOMC/dIfxyANZ6QzRbEBiOff5JXnrdpKEX4YT zPMzF4SSNHPuK53uuJTtt2E4W3Xd2VjGVUx7V2mP7Hxs0nQblCDbQa51 zr6kYoXEOcdwVx23GyLe0baPELtEkQZHeKx5eWyZTUDCri4DBCZZv9m+ Lbk=xyz.3600INSOAns0.centralnic.net. hostmaster.centralnic.net. 3000288446 900 1800 6048000 3600xyz.3600INRRSIGSOA 8 1 3600 20170606000517 20170506113911 47496 xyz. oanexcZRLZ+NEPvSGhl0qyi6LH/3ubP+0JWjlNvcduZWUp7oQt4VWfy/ w0T2Y2/610u7mvcxRty2p6cZq1arVMLOci7ZzMpPHkNDxXHcNRxlMNL1 6mwLgKzOlxp0acEGhqQBhj/XQ2icScf8PMChC7uRsFOz9nqAxelcgJgY D9I=xyz.3600INDNSKEY257 3 8 AwEAAbYRTzkgLg4oxcFb/+oFQMvluEut45siTtLiNL7t5Fim/ZnYhkxa l6TiCUywnfgiycJyneNmtC/3eoTcz5dlrlRB5dwDehcqiZoFiqjaXGHc ykHGFBDynD0/sRcEAQL+bLMv2qA+o2L7pDPHbCGJVXlUq57oTWfS4esb GDIa+1Bs8gDVMGUZcbRmeeKkc/MH2Oq1ApE5EKjH0ZRvYWS6afsWyvlX D2NXDthS5LltVKqqjhi6dy2O02stOt41z1qwfRlU89b3HXfDghlJ/L33 DE+OcTyK0yRJ+ay4WpBgQJL8GDFKz1hnR2lOjYXLttJD7aHfcYyVO6zY sx2aeHI0OYM=xyz.3600INDNSKEY256 3 8 AwEAAaAxrInKa1BlzuJsfT/gWfrUUH5OP7IJquNOLRU7LVbKwJEv655b kBBbW53wVXmnWJfPxykrMme8a91FFqXTYepvVN5vJe9QuCfiW/C64jSo 0HNXhbSUkV1ZDcy+zgAmMriPm8g5ki7KJ7KRs+YRoL2NwCm5fJVsAchr WalFB4z3xyz.3600INDNSKEY256 3 8 AwEAAdNAEAD8rebFpKuiLr0BwTNQoECMnfJjiZ54ZCCke208h9eX7ui7 WFFz9hjmvAgIFavN5vVhR5SnDTRvD5iDsMKvefXbnz4Qeu4GILwJuTqC QAcqw6RUp1+U1KEkwRP/noqA4fSkmnInbQwW+Yq+bxohGQVatZiAiO/G ppSggZX3xyz.3600INRRSIGDNSKEY 8 1 3600 20170520002252 20170419140553 3599 xyz. h5TV5pu/QAAUal72x8Dm8tgqBzRvDSznaDrRqV0Fu8ponhfXQFjdG3p1 2/IVdkNLtLZq4I2aUMwJeTZcyq5gRcWOror0V6uChW5fgIkH7abj1CYL tSRv3M7mVBduGNIzMuITJu5Pn1BVXiF9FsTw1ks+wDjdPn2OLe5BKRmj d+6GgwwBhg4V2efFcb+peRBCRpk+i3S1dlMyILCCgAvnAaGbh3k+vaKN 2wb528jSvH0QVIXP8PTAxLw86IfFlvLm8Lxo1e8hweI+4hgECNX7UzeG epXE+LpOiZwkhf7JncytOcxw6YzSAQETYJfcK1MlMcH5zNzjhFTNoMV3 M4QTLQ==;; ADDITIONAL SECTION:x.nic.xyz.172800INA194.169.218.42y.nic.xyz.172800INA185.24.64.42z.nic.xyz.172800INA212.18.248.42generationxyz.nic.xyz.172800INA212.18.249.42x.nic.xyz.172800INAAAA2001:67c:13cc::1:42y.nic.xyz.172800INAAAA2a04:2b00:13cc::1:42z.nic.xyz.172800INAAAA2a04:2b00:13ee::42generationxyz.nic.xyz.172800INAAAA2a04:2b00:13ff::42
可以看到, xyz.
下的解析服务器就返回了 NS 记录的签名。 然而,xyz.
下却有两个 ZSK,这大概是因为 xyz.
下有两个私钥,这样的话每一个签名可以使用两个私钥中的任何一个签,灵活性更高。此外,我们也看出来了区分 KSK 和 ZSK 的意义:KSK 和 ZSK 的数量可以不相等。 然后,我们来使用一级域名的服务器来解析我的二级域名:
$ dig @x.nic.xyz. tlo.xyz. any +dnssec;; AUTHORITY SECTION:tlo.xyz.3600INNSkami.ns.cloudflare.com.tlo.xyz.3600INNSgordon.ns.cloudflare.com.tlo.xyz.3600INDS2371 13 2 913F95FD6716594B19E68352D6A76002FDFA595BB6DF5CAAE7E671EE 028EF346tlo.xyz.3600INRRSIGDS 8 2 3600 20170303035908 20170201045318 7558 xyz. b69lhRaZM8lWN44qaQCCm4+479ATwt+OlRWD770jmLJnai2ob/0CWPEZ pFQ+y/k6n/X8VPZa2IVwxB6qUTtirtOolBHVA4gmPQffXiYiTbP1dDT9 G7BwNMdOCGkH0bySW9rFpi3zKYvOieNQLlV/i61ox78AgxQeX4k800QN gEE=
由于 NS 记录属于委托记录,所以 NS 下也没有签名。 由于这个域名使用的 NS 是 kami.ns.cloudflare.com.
,不属于 xyz.
之下,所以没有任何 Glue 记录,于是这需要再按照流程再重头解析一遍 kami.ns.cloudflare.com.
,这里就省略了。 最后,我们来使用我二级域名服务器来解析二级域名自身:
$ dig @kami.ns.cloudflare.com. tlo.xyz. any +dnssec;; ANSWER SECTION:tlo.xyz.60INA52.84.21.12tlo.xyz.60INA52.84.21.243tlo.xyz.60INA52.84.21.67tlo.xyz.60INA52.84.21.107tlo.xyz.60INA52.84.21.4tlo.xyz.60INA52.84.21.46tlo.xyz.60INA52.84.21.29tlo.xyz.60INA52.84.21.224tlo.xyz.60INRRSIGA 13 2 60 20170507145606 20170505125606 35273 tlo.xyz. tcMNEbUGrnCoTK1Z7Xmo15k+pLyZJ+m28nKt/o5s+/ezrcMsgFv1C0bY ABs9M8cqjw+0Ld8DTtAwTQVwpAUe+g==tlo.xyz.60INAAAA2600:9000:203a:1000:b:fe0:fc00:93a1tlo.xyz.60INAAAA2600:9000:203a:7e00:b:fe0:fc00:93a1tlo.xyz.60INAAAA2600:9000:203a:e400:b:fe0:fc00:93a1tlo.xyz.60INAAAA2600:9000:203a:a200:b:fe0:fc00:93a1tlo.xyz.60INAAAA2600:9000:203a:4800:b:fe0:fc00:93a1tlo.xyz.60INAAAA2600:9000:203a:3000:b:fe0:fc00:93a1tlo.xyz.60INAAAA2600:9000:203a:1a00:b:fe0:fc00:93a1tlo.xyz.60INAAAA2600:9000:203a:a000:b:fe0:fc00:93a1tlo.xyz.60INRRSIGAAAA 13 2 60 20170507145630 20170505125630 35273 tlo.xyz. QV5gEUO9NK3W2G4aF/dTZrmsGURyVAiU3eyyuR4lp4YJ7jxGjmCQArPB 4CYz6laN+V6Kd78gi7v50gaf+WCeDQ==tlo.xyz.3600INSOAgordon.ns.cloudflare.com. dns.cloudflare.com. 2024522030 10000 2400 604800 3600tlo.xyz.3600INRRSIGSOA 13 2 3600 20170507145653 20170505125653 35273 tlo.xyz. KnJkiBfvb0xhw3mAjKxnWPSMptc+eoN7Qh50HJQYnmycvV1K9ADFKYyq RwhKzWEOFHXtsn8Pxh+d/EY0x4EVEw==tlo.xyz.86400INNSgordon.ns.cloudflare.com.tlo.xyz.86400INNSkami.ns.cloudflare.com.tlo.xyz.86400INRRSIGNS 13 2 86400 20170507145712 20170505125712 35273 tlo.xyz. vQDzeIteIeVdbPS7nxNXCVeGD97+ePvEHdPK263oocoDPY59tVOG6V+a s7k8GHSFJ8KKu8edoWcUayi3aNFY7g==tlo.xyz.86400INTXT"v=spf1 include:email.freshdesk.com include:\_spf.myorderbox.com include:amazonses.com -all"tlo.xyz.86400INRRSIGTXT 13 2 86400 20170507145729 20170505125729 35273 tlo.xyz. NDFDF9PHFSSvQu7oF17cNWIrQUrfaPA/019i6hCvj7JJiA21DWp0w5J3 BlxDEN6wIGq4Nzb4IVE0uf+zmdTb0w==tlo.xyz.3600INDNSKEY257 3 13 mdsswUyr3DPW132mOi8V9xESWE8jTo0dxCjjnopKl+GqJxpVXckHAeF+ KkxLbxILfDLUT0rAK9iUzy1L53eKGQ==tlo.xyz.3600INDNSKEY256 3 13 koPbw9wmYZ7ggcjnQ6ayHyhHaDNMYELKTqT+qRGrZpWSccr/lBcrm10Z 1PuQHB3Azhii+sb0PYFkH1ruxLhe5g==tlo.xyz.3600INRRSIGDNSKEY 13 2 3600 20170529092807 20170330092807 2371 tlo.xyz. SDm3eGWVamR+GIZ8TEcYDeik73gMUVyX6TGGtkir6A6TIY+2zvXwtfrN HEvkygTfiOuEn+/Ipj08o8+NyZeAZw==
下面总结一下解析并验证 tlo.xyz.
下的全部 A 记录的方法,DNS 在实际解析过程中会尝试尽可能跳过不必要的请求:
tlo.xyz.
,返回的是 xyz.
下的 NS 和 DS 记录,包含了签名xyz.
的 DS 记录xyz.
服务器解析 xyz.
下的 DNSKEY 记录,并要求签名xyz.
的 DS 记录验证 xyz.
的 KSKxyz.
的 KSK 及其签名验证 DNSKEY 记录集xyz.
服务器解析 tlo.xyz. 下的 NS 和 DS 记录,并要求签名xyz.
的 ZSK 和 DS 的签名验证 tlo.xyz.
的 DS 记录tlo.xyz.
服务器解析 tlo.xyz.
下的 DNSKEY 和 A 记录,并要求签名tlo.xyz.
的 DS 记录验证 tlo.xyz.
的 KSKtlo.xyz.
的 ZSK 和 A 的签名验证 tlo.xyz.
的 A 记录为了做区分,我把解析分为了两类,验证分为了三类:
NSEC 记录比较特殊,所以单独的讲一下。 在全面普及 DNSSEC 之前,仍然有不少域名并不支持 DNSSEC,此时如何让已经支持 DNSSEC 的网站进行签名认证,拒绝解析签名错误的请求,又同时让没有 DNSSEC 的域名无视签名正常解析呢?HTTPS 的推进是区分了协议:以 https://
开头的网站进行签名认证,以 http://
开头的网站不进行签名认证,在 HSTS Preload 里的域名则强制进行签名验证。而实际上,HTTP 和 HTTPS 是两种不同的协议,而支持 DNSSEC 的 DNS 与普通的 DNS 是同一种协议,前者是后者的子集。只有域名下有 DS 记录时,才会进行签名认证,否则还是按照普通的处理。 那么试想,攻击人可以在解析 tlo.xyz.
时的第九步做手脚:删除 DS 记录以及 DS 的签名,这样不就相当于移除了这个域名的 DNSSEC 了吗?(有些类似于 HTTPS 降级攻击),或者直接删除某个域名下的 A 记录,客户端能知道这个域名下是真的没有 A 记录还是被恶意删除了?实际上这样做手脚是没用的,当开启了 DNSSEC 的权威服务器收到了一个不存在的记录的请求时(这可以是不存在的子域名,也可以是某个域名下不存在的一些记录类型),不是返回空的内容,而是返回一个 NSEC 记录去声明这个域名下没有这种记录,同时也将这个记录签名。综上所述,开启了 DNSSEC 后对于该区域下的所有的 DNS 请求都会签名,从来不会返回空的内容。 根据这里公开的数据,我们来尝试一下解析第一个不支持 DNSSEC 的一级域名:ae.
的 DS 记录的结果
$ dig @a.root-servers.net. ae. ds +dnssec;; AUTHORITY SECTION:.86400INSOAa.root-servers.net. nstld.verisign-grs.com. 2017021401 1800 900 604800 86400.86400INRRSIGSOA 8 0 86400 20170227170000 20170214160000 61045 . A5CqIucYyfFTzp03EuajDjp5Vw6dd3Oxip60AI7MCs/2xfBu1red4ZvF GfIEGHstG61iAxf7S3WlycHX9xKyfIOUPmMxuvkI9/NXMUHuvjUjv9KW TTkc1HV6PuUB1sv9gsuQ6GFnHCXAgMKXZs9YofRDlBi2jxAvJVc5U7nG sd8UqQs4WcinMHNvFV9+gwfax0Cr9KFDmDUbS+S2wYmNs+SGOn+CbFrD 8gs34GiYao8i0QGw7RVGTVJiuVOuUkeYe4iSXnJjNjeIlm8liq6PRXgM nI+ndPDogA/a8JATfyzQ97VDRwe/FucoTbe5qd2cHxqh1ZxxPkA3K3Fj 8Jv3kg==ae.86400INNSECaeg. NS RRSIG NSECae.86400INRRSIGNSEC 8 1 86400 20170227170000 20170214160000 61045 . B03J+aJuEA5r5Va8QiecBHZUucisWgdC8b14Q4MU5oGSdgmK9PmHLKMS mUiGj/OzH51P1l0G6zxG6bxU56tZ4gSME+rcpIntdKyiWU4QLpkiPa32 aApHFmu0pzugGSDWnQUmNDmCig7jJ2J61xlOzx19ni0eJazAthRtGWuK WI9bCVt9Yb7Bd21AedC0gugQWY+LKj7HR3zRhZ5dywpcTQUc78BrJDvh P8UxWprUJozcMYdVDqA5TvSlRHz8aLOnkD/olVsE5cU6qSvCX32E7WuQ IeFfhf1J940hly/3f960Dvm5kwX8l6CkNW083yLCnG8e7zArEUBRthvA a90SJw==
注意新增的 NSEC 记录,这个记录首先声明了一级域名 ae.
下只有 NS RRSIG NSEC 这三种记录,也就是说没有 DS 记录。此外,它还说明了 ae.
之后的一个一级域名是 aeg.
,所以通过这个记录,可以轻松的证明不存在 aea.
、aeb.
、aec.
…… 这些一级域名。 那么,如果请求 aea.
这个不存在的一级域名,会发生什么情况?
$ dig @a.root-servers.net. aea. any +dnssec;; AUTHORITY SECTION:ae.86400INNSECaeg. NS RRSIG NSECae.86400INRRSIGNSEC 8 1 86400 20170228050000 20170215040000 61045 . U2e52sVPmIup4pSfWzg7hupPZb63NdYdsiNEqr2ygDBQrgOQ6rT2SZkP xZVvHc7ZtfggUV1iT6kels8+d3beURz0Vf58x6up+PUF6svaFOmx2Bpu 42owq6wYQH6ll8GLOKiIC/35omIXja0VFj4ueG1HsbHbWVxUcL5bsDrt UWRUU9Hp1ySp36+H7M5NE+YPNk8soH2xyANe+STkymH661m8jJqXbG2X atbCEEOtuXuplvS7Rm/YRS+UEtsamC3A9bDBnus/OiL3KS1ztuvrxQfS 6a1z45UtL0PBBQ5DzNiVd9QHHhSpsaxFUqg0iw21CB6MZaK10EB7EJCQ EWkRkg==.86400INNSECaaa. NS SOA RRSIG NSEC DNSKEY.86400INRRSIGNSEC 8 0 86400 20170228050000 20170215040000 61045 . fnA/PW3QvSzI4MXZ+ylGhv/Z+F+u6YdAWnSz1DfbwSZkcpzwZoO1/uiY QtYhYU5GF/dbTk7oGEjStA0dWVzyyf+7opW+DS1+R9pn5N/LynyqZ6Et Swk85MQl04gu5LxLrnn6Nind2ozRMha4Nn7tNlYG59GLH3hXkaQ6xYmE hD0Ya+UE6h2vcQ8Y8m3ccifDO2rBukdsUJ13dZLAScNAVJU6/2YxlyyX fYY7G0Ktqu5Tq10YvfJazZ5VraBzw+bkEzM8UEPGNNfX9FTB7zxhjyhU h1u87Z/nKMoIznzVu6Xk9AC5JM1lU/OIHyYHCp+XzMGuUdjwNZH706ND MGq/rQ==.86400INSOAa.root-servers.net. nstld.verisign-grs.com. 2017021500 1800 900 604800 86400.86400INRRSIGSOA 8 0 86400 20170228050000 20170215040000 61045 . Nj7xEVPJ5DtBFRP9Zy0GCIwY/ax3v9n9JV0EsKyAeHPYDw4PBMpXQRxa banAl7DVyytO+xLz1NxY3iYTSPtyFjbAzkipC5BJT0EFovbQJ7VJOS4P nZBFaVltjGnzzrC8+hWESyhcwn2DdsNw94JqlkVPEtbT+u6vgXbIv5lD 1/YJMRcvWR74FzBC/bYyk+s0WWVNWDenioI2F7NCRgKSYm1+6qXK4on7 MFAmJE9TYYyZFFRiQurS1wH+d3/xQTtjd93GYOhpWVND0NyN/t4nkxhT spHrofo9GvzTIcGTcwT4Pp1bdBXL6dS0P+JIDXTKQN7u/3RwoJj/6jPm FOSEKw==
通过请求 aea.
,从请求的结果可以得出两个结论:
ae.
和 aeg.
是两个相邻的一级域名(这也就相当于声明了不存在 aea.
这个一级域名),此外也说明了 ae.
下只有 NS SOA RRSIG NSEC DNSKEY 这些记录。aaa.
,此外也说明了根域名下只有 NS SOA RRSIG NSEC DNSKEY 这些记录。注意,相邻的域名排序是包含该区域所有子域名的,也就是说所有的子域名都参加到了排序,刚才得出的 “ae.
和 aeg.
是两个相邻的一级域名” 其实并不准确,而应该是根域名区域下 ae.
和 aeg.
是两个相邻的子域名,因为 NSEC 结果还相当于说明了 a.ae.
这样的二级域名在根域名区域下也不存在。 如果 NSEC 是最后一个记录,那么它的下一个就又是区域自身了。 然而,可以发现,通过这个方法可以轻松的获得已经存在的记录:比如我只是试了一下 aea. 这个一级域名,却一下子就知道了根域名下还有 aaa.
、ae.
和 aeg.
三个一级域名,通过这样一直往下遍历,就能搜索到一个区域下的所有子域名。 知道所有的一级域名对于根域名服务器无所谓,因为一级域名的列表本来就是公开的。可是,这个功能也许不是我们所期望的,有的时候,想要在自己的域名下放置一些只有自己知道的子域名,这些子域名也许就是自己源站服务器的 IP,如果 DNSSEC 就这样实现的话,这就让其他人很容易就能遍历出来你所有的子域名。所以,在 DNSSEC 中,响应记录不存在的话还有两种解决方案,一种是对 NSEC 的 Hack,还有一种是 NSEC3:
Cloudflare 上就使用了对于 NSEC 的 Hack,这样就能避免其他人遍历你的所有子域名。举个例子,正常的 NSEC 去解析 a.tlo.xyz
可能是这个结果(假如我只有 www
这一个子域名):
$ dig @kami.ns.cloudflare.com. x.tlo.xyz. +dnssec;; AUTHORITY SECTION:tlo.xyz.3600INNSECwww.tlo.xyz. A MX TXT AAAA DNSKEY RRSIG NSEC; 省略一个 RRSIG 记录www.tlo.xyz.3600INNSECtlo.xyz. CNAME RRSIG NSEC; 省略一个 RRSIG 记录; 还省略了一个 SOA 以及 SOA 的 RRSIG 记录
通过观察 NSEC 记录,就可以直接看出这个域名下只有 www
一个子域名。 然而 Cloudflare 实际返回的结果是这样的:
$ dig @kami.ns.cloudflare.com. x.tlo.xyz. +dnssec;; AUTHORITY SECTION:tlo.xyz.3600INSOAgordon.ns.cloudflare.com. dns.cloudflare.com. 2023791623 10000 2400 604800 3600tlo.xyz.3600INRRSIGSOA 13 2 3600 20170216150135 20170214130135 35273 tlo.xyz. ARUYgesljY5azg1RqFgoKbTN6OOmAQUqTsLiQyTBXAMO4P/CecFGwTKY f1cVTI/s4euNahfGOvc0MnDb2R55TQ==x.tlo.xyz.3600INNSEC\\000.x.tlo.xyz. RRSIG NSECx.tlo.xyz.3600INRRSIGNSEC 13 3 3600 20170216150135 20170214130135 35273 tlo.xyz. y4g0Of3Ir/DqcbRT1ND5kwdGXlW++Zb+c9Cx0z60UAzbI+cpW2DDOmBB 4MMKi4zV9xEBg5Jq/8hwBGVo4ytDDg==
Cloudflare 这样则是告知了 x.tlo.xyz.
是存在的,但是只有 RRSIG 和 NSEC 记录,即相当于这个域名下没有任何记录。x.tlo.xyz.
之后的下一个域名是 \000.x.tlo.xyz.
,而实际上那个域名也是不存在的。这其实相当于 Cloudflare 撒了一个谎,并没有直接告知你这个域名的下一个域名。这虽然解决了问题,但是并不符合规范。
NSEC3 使用了在区域内的下一个记录内容的哈希值(按照哈希值的顺序排序)代替了原本的记录内容。从哈希值反推记录内容本身有一定的难度,于是就能够避免其他人遍历出所有的记录内容。(guozeyu.com
没有在生产环境中开启 DNSSEC,以下内容仅为测试结果)
$ dig @a.ns.guozeyu.com. ns.guozeyu.com +dnssec;; AUTHORITY SECTION:guozeyu.com.3600INSOAa.ns.guozeyu.com. ze3kr.icloud.com. 1 21600 3600 1209600 3600guozeyu.com.3600INRRSIGSOA 8 2 21600 20170411191942 20170403191942 52311 guozeyu.com. bHSh4a0zcaFEwS5dNEj/JT9Aosuy8Wdh+U2WaPou95iywqG6VhH85BXT EhYnjmeph/CABF5HC2OvUf9HhcnxjPF9NAQ2cfPTr6Ael9aNBGLFSejI 5VmCdp4Q1sYD6hS51k5BY22bJRyu9v8zWHNLYDRJSFBk4kR0RSV5n0CK 4pA=67uromrbachidk57be8035jf9gqnhmn1.guozeyu.com. 300IN NSEC3 1 0 1 F327CFB1FFD107F1 ENPCB7U0K7KFHLSCEOTOB7RAHS4TCH3V67uromrbachidk57be8035jf9gqnhmn1.guozeyu.com. 300IN RRSIG NSEC3 8 3 300 20170411191942 20170403191942 52311 guozeyu.com. MpV+6foWp+XQpwJnNCiIE0dqGigqX+2Z7XWuCFAd/TUS1sBHwnTRKmB5 Rl8Wf23ZMMfZh/oRHQbm4vE1RecMd78ZuvQM61iOmwAOmjIhJJh+LPSg 5KXMmYimTmtyd7/N437XYqmBREbz9EQ66ZqGucOahncPfxX2jhErvICN KDc=
标准的 NSEC 会暴露所有的子域名,而 NSEC3 不会,看起来 NSEC3 的优势明显。然而标准的 NSEC 相比 NSEC3 又有好处:子(Slave)DNS 服务器不需要拥有 DNS 的私钥,这样配置 Slave DNS 后就方便多了,和常规的 Slave 一样,只需要传送(Transer)整个区域即可,也能够正确的响应不存在的子域名。因为在标准的 NSEC 下 NSEC 和 RRSIG 的数量是有限的。而 NSEC3 或者 Hacked NSEC 都会根据不同的子域名返回不同的 NSEC(3) 记录,NSEC(3) 和 RRSIG 记录都是无限的。 举个例子,比如你现在可以下载到签名过的根域名的区域。其中包含了所有的 NSEC 记录,这样 RRSIG 可以在一台机器上生成,并将签名过的整个区域传送给其它子的根域名服务器上,这样能够有效的确保私钥安全。而用 NSEC3 或者 Hacked NSEC 的话,每一个子 DNS 服务器都需要有私钥。根域名服务器的数量众多,也由各种不同的组织管理着,所以很有必要保护好私钥。所以对于这种不怕被遍历到所有子域名的区域来说,使用标准的 NSEC 也未尝不可。
有了服务器监控服务,就能知道网站运行的情况以及在线时间。当服务器出现问题时,便能第一时间收到通知。个人网站运维需要这些服务来保证稳定性。但是,大量的此类服务都是面向企业,导致价格十分昂贵,而且并用不到其所提供的功能。本文就给各位站长推荐几个免费的服务器监控服务。
StatusCake 同时提供免费和付费的监控服务。免费版本可以创建无限多个 HTTP(s)、TCP、DNS、SMTP、SSH、Ping 和 Push 的协议监控,监控周期最短为 5 分钟,提醒主要支持 E-mail 和 Webhook 两种方式。免费版本不支持监控服务器配置信息,所以也无需在服务器上安装任何软件。
此外,StatusCake 支持 Public Reporting,你可以利用 StatusCake 建立一个监控页面。它还支持将在线率图像及网页嵌入在你自己的网页中,十分方便。
UptimeRobot 也提供免费的监控服务,支持 HTTP(s)、端口检测、Ping,监控周期最短为 5 分钟。同样不支持监控服务器配置信息,所以也无需在服务器上安装任何软件。最多只能创建 50 个监控,支持 E-mail 提醒。
相比 StatusCake,它的监控功能要少,但是 Public Reporting 的页面要漂亮一些。由于 StatusCake 所多的那些功能个人站长也几乎用不到,所以 UptimeRobot 也是 StatusCake 的一个良好的替代。
监控宝是一家国内的监控服务,长期提供的免费版可以创建 6 个 HTTP(s)、Ping、DNS、FTP、TCP、UDP、SMTP 甚至是使用 SNMP 对服务器性能监控(需要软件),监控周期最短为 15 分钟。如果你需要检测国内到你的主机的速度,或者你的主机在国内,监控宝是一个不错的选择。它的免费监控是从中国内 3 个位置同时监控。它支持 E-mail 和手机短信告警。它不支持 Public Reporting,但是可以给分享网站的 SLA 证书。功能相当齐全,就是网站的界面设计比较欠缺。
最后,就要介绍我最近开始使用的强大的 Stackdriver。Stackdriver 是 Google Cloud Platform(下文简称 GCP)旗下的服务器监控服务,支持监控、调试、跟踪、日志。其中的 Uptime Check 支持 HTTP(s) 和 TCP,监控周期最短为 1 分钟。它支持 E-mail 、手机短信和 APP 内告警。它的 Uptime Check 是从全球 6 个地区同时监控,可以看到每一个地区的延迟。用来检测 CDN 的速度肯定会很不错。
如果你正在使用 Google Compute Engine(下文简称 GCE) 或者其他 GCP 的服务,那么这个服务还可以帮你记录服务器日志,每月有 5 GB 额度,超出后每 $0.5/GB。此外,它还能进行服务器性能监控,监控服务器各项指标。虽然原本 GCE 面板也能提供 CPU 等信息,但是这个是需要在服务器上安装 Agent,于是就能提供更丰富更准确的信息。安装过程如下:
curl -O https://repo.stackdriver.com/stack-install.shsudo bash stack-install.sh --write-gcmcurl -sSO https://dl.google.com/cloudagents/install-logging-agent.shsudo bash install-logging-agent.sh # 谨慎安装,见下文
毕竟是 Google 自家的服务,安装不需要任何登陆等操作。安装完毕后就会自动采集数据。它分为两个部分,Stack Monitoring 用于监控服务器指标,包括硬盘存储空间、内存占用(包括 Used、Buffered)等 GCE 默认无法监控到的数据。还有就是 Logging,它可以自动同步日志到 Google 的云端,你可以集中的执行搜索等操作。然而 Logging 这个进程会大概占用 100M 内存,小内存实例谨慎使用。需要注意的是,只有 Logging 是免费的,Monitoring 是收费的,每月 $8。 然后,你还可以为某一项指标建立告警,比如我创建了一个当磁盘空间高于 90% 的时候给我发邮件。 它可以创建公开页面分享服务器指标和 Uptime Check 延迟的图标,但是却不能显示在线率,实在是一个奇怪的设计。
Observium 通过 snmp 可以用来监控服务器的各项指标,包括内存、储存、网卡等。它可以免费安装在自己的服务器上,需要 MySQL 和 PHP 环境。官网给的是 Apache 的范例,如果你用 Nginx 就不需要安装 Apache。
它通过在服务端生成 PNG 来显示图表,所以图表很漂亮精致,但是由于不是矢量图,所以很难做到实时增量更新而且不能精细看到某一个时刻的数值。 Observium 可以轻松的管理许多个服务器。你可以体验在线 Demo。
一年之前,我发表过一篇文章:全面 HTTPS 时代即将到来。到现在,HTTPS 又有什么新变化呢?本文就来一起探索 HTTPS 在 2016 年的变化以及今后的发展可能。
HTTPS 是加密了的 HTTP 协议,网址以 https://
开头,就代表是使用了这个协议。 HTTPS 相比 HTTP,拥有全部的以下特性:
由于 HTTPS 要完成身份验证,所以若需要配置 HTTPS,就必须要取得被公认的证书颁发商颁发的证书。
部署 HTTPS 必须要拥有 SSL 证书,而 SSL 证书的价格区间在每年几百甚至上万元不等,高昂的证书价格成为了部署 HTTPS 的一个重大负担。2015 年末,Let’s Encrypt 正式开始公测,可以免费签发多域名的证书,此类证书原先的价格在百元到千元左右。即使是在测试阶段,仅仅 3 个月时间就签发了 100 多万张证书! Let’s Encrypt 的证书使用自动化部署,验证、签发过程均通过 API 自动实现,大大缩短了申请证书所需要的时间;同时各种服务提供商也纷纷提供了自动签发 Let’s Encrypt 证书的渠道。由于 Let’s Encrypt 的出现,确实大大加快了 HTTPS 的普及。
在 2015 年初,HTTP/2 正式成为标准,紧接着各大浏览器和操作系统纷纷支持:Firefox 36、Chrome 41、iOS 9 & macOS 10.11(Safari 9)、Windows 10(IE 11 & Edge)。紧接着,Cloudflare、CloudFront、UPYUN 这些 CDN 提供商也纷纷支持了 HTTP/2,HTTP 服务器 Nginx 和 Apache 也对其做了支持。 HTTP/2 的出现是为了取代 HTTP 1.1 和 SPDY。HTTP/2 主要是支持了多路传输,原本需要合并 CSS 和 JS 文件、为众多的图片准备多个域名的做法,使用了 HTTPS/2 之后就没什么必要了。相比 HTTP 1.1 的每一个数据需要单独的一个连接,HTTPS/2 中网站的所有数据只需要一个连接。
由于浏览器会限制连接数量,这就会导致在 HTTP 1.1 中,每次只能同时下载几个文件。多路传输可以让这些文件一块儿传输,大大减少加载时间。
然而,这些浏览器里只是针对 HTTPS 站点做了 HTTP/2 的实现。于是想到让网站提高加载速度,又不得不用 HTTPS。所以,HTTP/2 的出现也推进了 HTTPS 的发展。
现在,Chrome 已经开始对使用了 HTTPS 的网站显示 “安全” 字样(EV 证书这个地方则显示企业名称):
在未来的某一个版本中,对于无 HTTPS 的网站,最终将会这样显示(对于所有 HTTP 网站,未来不同的版本显示的过程是:灰色叹号、红色警报叹号、红色警报叹号 + “不安全字样”;有信用卡或密码提交的会先进行这类显示。下图是最终的第三阶段):
你也可以在 Chrome 设置页面将其调整为 “一律将 HTTP 网页标为不安全”。我推荐所有人都这样设置,因为 HTTP 确实是毫无安全可言! 相信没有公司愿意让用户看到自己的网站被标记为 “不安全” 吧?浏览器的推进起到至关重要的作用。
在最新的 Chrome 58 版本里,非 HTTPS 的密码输入处已经显示这样的信息(此处为 weibo.com 的网站登陆窗口):
经测试,只要主站是 HTTP,即使表单是提交到 HTTPS 页面,也会显示此信息。
2015 年末的时候,苹果就开始实施 ATS,然而开发者仍能找到选项去关闭这个功能。而在 2017 年或之后某个时刻后(具体 deadline 苹果尚未明确给出,不过可以确定的是不开 ATS 审核会逐渐变严格,并要求提供更多的理由),所有新提交的 APP 必须开启 ATS,也就是说新提交的 APP 必须全部使用 HTTPS 内容了。这促使着众多国内厂商去做 HTTPS 支持。
本站特别推荐的虚拟主机提供商 TlOxygen 现在就支持申请免费 SSL 证书了。整个过程十分简单,并且会自动续签!实现方式:自动为虚拟主机安装 acme.sh 软件,然后自动执行安装流程。此外,TlOxygen 的虚拟主机支持 SSH 访问,所以你也可以自行使用 acme.sh 或者任何其他工具操作。
Ubuntu 16.04.01 自带的软件源中的是 Nginx 1.10.0,但是这个版本的 Nginx 的 HTTP/2 模块中存在 Bug,具体见此。现在 Nginx 1.12 Stable 已经推出,直接安装 Stable 版本即可。 2018-06 更新:如果你使用 Ubuntu 18.04 或者是以后的版本,那么系统默认的软件源的 Nginx 版本(1.14)就足够了。
关于双证书,仅建议使用独立 IP 的人去使用,如果没有独立 IP,那么就需要启用 SNI 功能——然而几乎所有支持 SNI 功能的浏览器也都支持了 ECC 证书,所以可以跳过升级步骤,直接换 Let’s Encrypt 的 ECC 证书,不使用 RSA 证书。 我有不止一个服务器,如果都使用自己编译的 Nginx,那么太麻烦了,于是我决定使用添加软件源的方法,通过 apt
升级,方法如下: 首先需要先添加 Nginx mainline 的软件源:
$ sudo add-apt-repository ppa:nginx/stable # sudo apt install software-properties-common$ sudo apt update
然后移除现有 Nginx 并安装新版本:
$ sudo apt remove nginx nginx-common nginx-core$ sudo apt install nginx
安装时可能会询问是否替换原来默认的配置文件,选择 N 即可。 此时安装的 Nginx 已经包含了几乎所有的必要和常用模块,比如包括但不限于 GeoIP Module、HTTP Substitutions Filter Module、HTTP Echo Module。我安装的 Nginx 的 OpenSSL 版本是 1.0.2g-fips,所以并不支持 CHACHA20,想要支持 CHACHA20 只能使用 CloudFlare 的 Patch 然后自己编译。安装完成后就可以验证 Nginx 版本了:
$ nginx -Vnginx version: nginx/1.12.0built with OpenSSL 1.0.2g 1 Mar 2016TLS SNI support enabledconfigure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/build/nginx-DYnRGx/nginx-1.12.0/debian/modules/nginx-auth-pam --add-dynamic-module=/build/nginx-DYnRGx/nginx-1.12.0/debian/modules/nginx-dav-ext-module --add-dynamic-module=/build/nginx-DYnRGx/nginx-1.12.0/debian/modules/nginx-echo --add-dynamic-module=/build/nginx-DYnRGx/nginx-1.12.0/debian/modules/nginx-upstream-fair --add-dynamic-module=/build/nginx-DYnRGx/nginx-1.12.0/debian/modules/ngx_http_substitutions_filter_module
此时,你的服务器就没有 Nginx 的 HTTP/2 bug 了,既然使用了最新版的 Nginx,那么就能够配置 ECDSA/RSA 双证书了。
在我升级的时候,遇到了 GeoIP 模块无法使用的问题,经研究发现是新版本将 GeoIP 改成动态调用模块的方式实现了,在 Nginx 的 http {}
配置中添加下方代码得以解决:
load_module "modules/ngx_http_geoip_module.so";
Let’s Encrypt 提供完全面为免费,并且是自动化签发的证书,一张证书最多能签 100 个域名,暂不支持通配。 为了配置双证书,你首先应该签发下来两张证书,以下以 acme.sh 为例,首先先建立目录(以下所有案例均使用 example.com
作为例子,实际使用需自行替换):
$ mkdir -p /etc/letsencrypt$ mkdir -p /etc/letsencrypt/rsa$ mkdir -p /etc/letsencrypt/ecdsa
然后修改 Nginx 配置文件,确保所有在监听 80 端口的都有 location ^~ /.well-known/acme-challenge/
区块,本配置文件是强制跳转 HTTPS 的案例,这是源站的配置:
server { listen 80 default_server; listen [::]:80 default_server; location ^~ /.well-known/acme-challenge/ { root /var/www/html; } location / { # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. return 301 https://$host$request_uri; }}
在签发之前,确保所有要签发的域名都指向了你自己的服务器! 然后签发 RSA 证书(如果需要多域名证书,只需要多个 -d
即可,下同,不过保存的文件目录以及证书显示名称均为第一个域名):
$ acme.sh –issue –reloadcmd “nginx -s reload” -w /var/www/html -d example.com –certhome /etc/letsencrypt/rsa
然后再签发 ECDSA 证书:
$ acme.sh –issue –reloadcmd “nginx -s reload” -w /var/www/html -d example.com -k ec-256 –certhome /etc/letsencrypt/ecdsa
卸载 acme.sh
自带的 cron,自己重新配置:
$ acme.sh –uninstallcronjob
$ vim /etc/cron.d/renew-letsencrypt
输入以下内容,注意替换 acme.sh
的路径为你安装的绝对路径:
15 02 * * * root /path/to/acme.sh --cron --certhome /etc/letsencrypt/rsa20 02 * * * root /path/to/acme.sh --cron --ecc --certhome /etc/letsencrypt/ecdsa
然后就完成了,证书会自动续签。
因为 Let’s Encrypt 使用的不是通配符域名,所以会经常遇到有新的子域的情况,此时就需要给证书添加域名,一张证书最多可以添加 100 个域名。最简单的添加方法如下: 首先,修改证书的配置文件,两个证书的配置文件都要修改:
$ vim /etc/letsencrypt/rsa/example.com/example.com.conf$ vim /etc/letsencrypt/ecdsa/example.com\_ecc/example.com.conf
找到 Le_Alt
一行,将新的域名添加进后面(每个域名用逗号隔开,总共不能超过 100 个)。然后开始重新签发这个证书,需要添加 -f
。
$ acme.sh --renew -d example.com --certhome /etc/letsencrypt/rsa -f$ acme.sh --renew -d example.com --ecc --certhome /etc/letsencrypt/ecdsa -f
要注意的一点是,目前 Let’s Encrypt 签发的 ECC 证书的中间证书和根证书暂且不是 ECC 证书,这将会在以后支持,详情见 Upcoming Features。
首先需要生成几个 Key:
$ openssl rand 48 > /etc/nginx/ticket.key$ openssl dhparam -out /etc/nginx/dhparam.pem 2048
然后添加以下内容进 Nginx,放在 http 或 server 区块下,虽然不支持 CHACHA20,但是添加进去也没影响。
### SSL Settings##ssl_certificate /etc/letsencrypt/rsa/example.com/fullchain.cer;ssl_certificate_key /etc/letsencrypt/rsa/tlo.xyz/example.com.key;ssl_certificate /etc/letsencrypt/ecdsa/example.com_ecc/fullchain.cer;ssl_certificate_key /etc/letsencrypt/ecdsa/example.com_ecc/example.com.key;ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;ssl_session_tickets off;ssl_dhparam dhparam.pem;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';ssl_stapling on;ssl_stapling_verify on;
最后不要忘了 nginx -s reload
,然后 前往 SSL Labs 检查配置,可以看到旧的浏览器使用了 RSA 证书(我的服务器有独立 IP,所以无 SNI 支持的也能访问):
至此,ECDSA/RSA 双证书配置完成,你可以在浏览器里查看到证书类型:
我的服务器上部署的代码、配置文件等内容大多是使用 Git 进行版本控制。为了能够使用、配置起来更方便,通常使用一整套系统去管理。很显然,在一些代码和配置文件里会有一些机密的内容,如一些密钥什么的,所以必须不能公开。GitHub.com 虽然提供了 Private 存放处功能,但是由于此功能是付费的,而且对于 Organization 的 Plan 还是极贵,并不十分划算;就算能有免费的 Private 存放处,把自己的很多重要的密钥放在第三方服务器上还是很不安全,所以能够 Host 在自己的主机上的,并且能够替代 GitHub.com 的软件/服务就是不错的选择。 本文将讲一下我在自己服务器上安装 GitLab 遇到的坑,进阶使用,包括使用 .gitlab-ci.yml
文件实现自动 Build,实时同步镜像到 GitHub。
能够 Host 在自己的服务器上的软件/服务其实有很多,比如 GitHub Enterprise,Bitbucket Server。不过再此还是推荐完全开源、免费、由社区维护的 GitLab Community Edition,没有任何限制,只是相比 Enterprise Edition 少了些本来也用不着的功能。
具体安装方法见文档,目前官方推荐的系统环境是 Ubuntu 16.04 LTS,安装起来非常简便,整个 Web 环境都会配置好。安装后的更多配置请参见文档。如果你的主机上跑了不只一个 Web 程序,那就需要对现有的 Web 软件做修改,需要参见官方的 Nginx 的配置文档。我的代码中使用了 sub_filter
来实现替换默认的标题,实现更好的 SEO,更加品牌化。 然后为了能达到更好的使用效果,还应该配置 SMTP 发件服务器,我使用的是 AWS SES;然后还需要一个支持 IMAP 的收件服务器实现 Reply by email,我使用的是 Gmail,收邮件的限制总比发邮件的限制少吧~这些的具体设置方法官方文档里都有。 安装后默认是允许注册的,如果你不想让外人注册,你需要直接去 Web 后台禁用。如果你想要开放注册,那么最好先想好新注册用户能干什么,比如和我一样:只允许新用户创建 Issues 和 Snippets,那就在 Web 后台将 Default projects limit 设置为 0
,然后编辑后台的配置文件,禁止新用户创建 Group。同时建议在 Web 后台启用 reCAPTCHA 和 Akismet,防止恶意注册和恶意发 Issues。既然允许注册,那么也建议使用 OmniAuth 来支持第三方 OAuth 的方式登陆。
GitLab Runner 十分强大,但是并不是内置的,它可以极其方便的实现自动部署等非常有用的功能。安装配置好 Runner 后,在项目根目录下添加一个名为 .gitlab-ci.yml
的文件,以 master 分支为例,为了实现每次 commit 到 master 都将文件部署到 /var/gitlab/myapp
,那么文件内容应该是这样的:
pages:stage: deployscript:- mkdir -p /var/gitlab/myapp- git --work-tree=/var/gitlab/myapp checkout -fonly:- master
注意,你需要先创建 /var/gitlab
文件夹,并设置这个文件夹的用户组为 gitlab-runner:gitlab-runner
$ sudo chown -R gitlab-runner:gitlab-runner /var/gitlab
.gitlab-ci.yml
核心的部分就是 script:
,这里的脚本都是由用户 gitlab-runner
执行的,你可以根据需要修改,后文中也给了几种范例。 然后 commit,去设置页面里里激活这个项目的 Runner。建议在设置里设置 Builds 为 git clone
而不是 git fetch
,因为后者常常出现奇奇怪怪的问题,前者的速度瓶颈主要在于网络传输。
官方的文档里强烈不推荐把 Runner 部署在同一个主机上,其实这种说法并不正确。官方不推荐这样做是因为一些 build 会花费很长时间,占用很多的 CPU 和内存资源。但是如果你执行的 build 脚本并不会这样,那么安装在同一个主机上也未尝不可。
这几种部署是我比较常用的,大家可以当作范例,具体根据自己的需要弄各种不同的部署。 以下几种 Web 的部署方式所消耗的系统资源都不多,而且由于使用了 nice
,并不会阻塞其他任务,可以部署在同一台主机上。
修改之前那个 .gitlab-ci.yml
文件的 git checkout
一行,替换为:
jekyll build --incremental -d /var/gitlab/myapp
也是添加以下代码到 .gitlab-ci.yml
即可自动检查所有 PHP 文件的编译错误,编译通过的文件不会显示,只会显示编译错误的:
if find . -type f -name "*.php" -exec nice php -l {} \; grep -v "No syntax errors"; then false; else echo "No syntax errors"; fi
以下过程需要 root 权限登陆到主机,或者在每行命令前添加 sudo
。 首先,需要先给 gitlab-runner
用户一个单独的 SSH Key:
$ ssh-keygen -f /home/gitlab-runner/.ssh/id_rsa
然后,创建 /home/gitlab-runner/.ssh/known_hosts
,内容是:
github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
之后,获取 /home/gitlab-runner/.ssh/id_rsa.pub
文件内容,在 GitHub 上添加这个 SSH Key。 由于是使用 root 帐号,弄完了之后不要忘了修改用户组:
$ sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner/.ssh
然后,同样是通过 .gitlab-ci.yml
实现自动同步:
git push --force --mirror git@github.com:[Organization]/[Project].git
修改 [Organization]
和 [Project]
为你自己的名称即可。
文件都存储在自己的服务器里,安全性比较有保障,自己有最高权限,不会遇到项目被删的情况。部署时延迟极低,可靠性也高,不会遇到自己服务器没问题但是第三方服务宕机导致无法部署的窘况。 可以根据情况部署到离自己最近的服务器,或者是内部服务器,像 GitHub 的服务器就在美国东岸,亚洲这边连接并不快,国内也不稳定。 最关键的是,如果你本来就有个 VPS 什么的,也有很大的空闲,那么相当于你可以免费获得私有存放处,但是要注意性能需求,没有足够的空闲还是不要启用。 由于能够配置好实时同步镜像到 GitHub,GitLab 还有那么多 GitHub 没有的功能,其实已经可以完全使用 GitLab 作为主要的版本控制工具,GitHub 只是存一份镜像备用。
HTTPS 是一种网络安全传输协议,网址以 https://
开头,就代表是使用了这个协议。 苹果最新发布的移动端操作系统 iOS 9,除了带来了许多新的功能之外,还提升了整个系统安全性,正如iOS 开发者资源所说
If you’re developing a new app, you should use HTTPS exclusively. If you have an existing app, you should use HTTPS as much as you can right now, and create a plan for migrating the rest of your app as soon as possible. In addition, your communication through higher-level APIs needs to be encrypted using TLS version 1.2 with forward secrecy. If you try to make a connection that doesn’t follow this requirement, an error is thrown. 如果你正在开发一个新的程序,你仅应该使用 HTTPS。如果你已经有一个程序,你现在就应该尽可能多的使用 HTTPS,并准备好对剩下部分迁移的计划。另外,如果你的程序使用更高层级的 API 进行通信,则需要使用 TLS 1.2 或以上的版本。如果你试图建立一个不遵守这些需求的通信,就会引发错误。
没错,从 iOS 9 开始,将逐步禁用非 HTTPS 请求! 即使现在已有的程序在 iOS 9 中仍可以在非 HTTPS 情况下工作。但是相信在不久的将来,所有程序都会使用 HTTPS,而且 HTTP 将会完全淘汰。 那么为什么要使用 HTTPS?那些情况下要使用HTTPS呢?
HTTPS 能够加密数据传输,防止中间人截取或是修改。能够实现加密用户信息和网站内容。 比如使用大众所说的 “不安全的免费 Wi-Fi”,如果用户访问的网页全部是 HTTPS 的,那么这个 Wi-Fi 对用户没有任何影响。也就是说,媒体报道的 “免费 Wi-Fi 不安全” 纯属造谣,没有任何道理。当启用了 HTTPS 和 HSTS 后,免费 Wi-Fi 完全不能截获到用户密码等任何信息,用户可以安心的进行付款等操作。显然央视 315 没有任何专业知识及解释就在骗大家 “免费 Wi-Fi 不安全”,完全就是恐吓观众。之所以微信朋友圈所有照片都能被获取,是因为微信朋友圈的上传是明文的,这分明是微信自己的问题,显然并不是所有的软件都存在这样的问题。随着 iOS 9 的发布以及强制 HTTPS 措施,这一类问题将不复存在了。 其次,使用 HTTPS 不仅仅是为了防止信息被盗窃,还可以防止信息被中途修改。比如中国联通和中国移动会修改网站内容,投放自己的广告让用户升级产品,而这些广告并不是网站主准备的,网站主事先也不知道。虽然它们这样做就是没有行业道德底线,但是我们仅需要使用 HTTPS,这些运营商就统统无能为力了。 包括小米路由器的 “404错误页面优化” 也是利用了同样的原理,对非 HTTPS 页面进行篡改,给用户提供自己的广告从而谋取利益。其本身就是劫持,绝没有夸大之言。除此之外,有的用户还发现就算是正常页面,也有小米通过劫持网页代码注入而加入的广告信息。但当 HTTPS 普及之后,这一切都会无影无踪。然而在 HTTPS 普及之前,一些不支持 HTTPS 的网站主只能忍受被运营商、路由器的劫持了。
我认为,所有的网页以及程序都有必要全部且强制的使用 HTTPS,可以避免上述情况的发生。包括个人网站在内,也应该全面启用 HTTPS,防止因为被篡改植入的广告而流失读者。 使用 HTTPS 并不会增加太多的成本,还可以让页面速度变得更快。SPDY 协议可以最小化网络延迟,提升网络速度,优化用户的网络使用体验,然而 SPDY 协议只支持 HTTPS。 随着现在的趋势,越来越多的站长会主动或被迫的使用 HTTPS,HTTPS 即将成为主流。中国是 HTTPS 普及程度最小的国家,但是随着百度全站 HTTPS 以及 UPYUN 支持自定义域名的 HTTPS,将推动整个行业 HTTPS 的发展。
如果一个网页没有使用 HTTPS,那么就意味着页面上的内容,你正在搜索的关键词,甚至是用户名和密码都没有加密,“中间人”可以进行读取、篡改这些没有加密的内容。比如说你连接的免费 Wi-Fi、运营商等都可能会对网页内容进行修改。这些中间人会在你未经允许的情况下在网页上添加他们的广告、修改 404 页面样式、读取你微信朋友圈的图片。 但当这个网页启用了 HTTPS 之后,页面的数据就会被加密,正常情况下中间人就不能获取到你的数据,但是如果中间人替换掉了原有的 HTTPS 后,攻击依然是可能的,所以 HTTPS 站点必须包含一个证书用于验证。
由于 HTTPS 站点必须包含一个证书用于验证,那么就可以验证这个服务器是否被域名所有者许可(以防止连接到中间人的服务器)。通常浏览器都会检验这个证书,如果证书错误会警告用户正在访问的网站有问题。假如用户的 DNS 服务被污染,那么就可能伪造身份,到另一个主机(IP 地址),这个甚至比中间人攻击更可怕,能做到更多的事。当用户使用 HTTPS 访问时,浏览器会验证这个网站的证书,如果证书报错则会警告,甚至无法访问。 但是假如用户访问的时候使用的是 HTTP,那么就不会对服务器进行验证。只有网站进行强制 HTTPS (也就是禁用 HTTP 链接)并启用了 HSTS,那么才能够进行全面的认证。一旦启用 HSTS,那么这个域名的所有页面在设定的有效期内就只能通过 HTTPS 访问。
对于站点下所有资源都使用 HTTPS 协议的页面,很多浏览器都会有加密提示,以告知用户这个站点是加密的,让整个网站更高大上。不过我想在此提醒用户,并不是所有使用 HTTPS 的页面就是安全的,任何网站都能轻易申请到 SSL 证书,所以仍然需要辨别域名本身。但是对于直接显示其公司名称的 HTTPS 站点就更值得被信任,因为这种证书是需要纸质证明材料的验证的。下方为使用 Mac 版 Chrome 访问一些 HTTPS 站点的加密提示,Chrome 的加密提示菜单中分为两部分,前一部分验证,后一部分是加密,通常可以分为以下 4 种:
其中第一种和第二种情况代表使用了足够安全的加密方式(但是第二种没有提供任何 Certificate Transparency 信息),只是证书的签名等级不同,与加密方式以及验证的安全性无关,这两种情况下都能保证证书不是伪造的。
第三种情况是包含不安全资源,网站的外观可能会被改变,但 HTML 文本本身是可靠的。
第四种情况是使用了 SHA-1 签名的证书,由于 SHA-1 不是足够的安全,也就是说验证的安全性不够,由于这种证书伪造的成本越来越低,所以可能不安全。这种站点的加密仍然是足够的。
第五种情况代表当前可能正在被中间人攻击(因为没有提供任何 Certificate Transparency 信息,而且还使用了 SHA-1)。
第六种情况表示这个网站使用不被信任的根证书签发的证书(或者证书中不包含当前域名)。 关于 Chrome 的加密提示 无论如何,我都不推荐你使用 SHA-1 签名的证书,值得注意的是最新版 Safari 也可以选择不信任 SHA-1 签名的证书了,SHA-1 即将淘汰。
Google 对 HTTPS 站点的抓取很友好,官方说使用 HTTPS 还会提高排名。Google 也支持使用 SNI 协议的 HTTPS 站点。 百度近期支持了对 HTTPS 站点的抓取,并会相应提高排名,经测试并不是所有证书都支持,但是也支持 SNI 协议。
不得不说使用 HTTPS 的确会增大延迟,这种延迟主要体现在加载首个页面,进入下一个页面就会快很多了。在我这里测试启用 HTTPS 后会多出 2~5 倍的延迟。如果还有资源在别的域,那么这些资源也会多出这么多的延迟。
SNI 协议已经被大量的使用,但是仍然有一些设备是不兼容的,比如 Windows XP 的 IE8 及以前的浏览器都不兼容。截止到目前,中国支持 SNI 的浏览器使用率已经达到了 95%。
有些搜索引擎对 HTTPS 很好,但是也有一些搜索引擎不支持它。不过目前越来越多的搜索引擎都在逐步支持 HTTPS,我觉得不必担心。
使用 HTTPS 必须需要得到一个证书。现在已经有越来越多的免费 SSL 证书了,总体来说实现 HTTPS 的成本越来越低了。但是随着证书颁发的成本越来越低,HTTPS 作为验证的功能将会变的更小,但是作为加密的功能还是存在的。
HTTPS 只能在一定程度上防止篡改,但是并不能抵制一些强大的网络封锁。 目前一些“流氓”浏览器竟然不验证证书,大大减弱安全性。如果不验证证书,虽然还有加密的效果,但是如果 DNS 被污染,中间人攻击依然可行。 如果 DNS 被污染,但仍需要使用 HTTPS,那么就将无法访问站点。所以 DNS 也是十分需要加密的。如果能早日支持 DNSSEC 或者是 “HTTPS DNS”(即使用 HTTPS 协议解析 DNS),那么 HTTPS 作为验证则显得不那么重要,完全没有中间人攻击的日子指日可待(但是没有网络封锁还是不可能的)。 或许以后的浏览器只能访问 HTTPS 站点,就像 iOS 9 大力推动 HTTPS 一样,这样就能大大提高安全性,抵制中间人攻击。
下方为在 Apache 里的 .htaccess
中配置
RewriteEngine onRewriteCond %{HTTP:X-Forwarded-Proto} =httpRewriteRule ^ https://%{HTTP\_HOST}%{REQUEST\_URI} \[L,R=301\] # 禁用 HTTP 协议
HSTS(HTTP Strict Transport Security, HTTP 严格传输安全)是一种让浏览器强制 HTTPS 的方法,当用户访问 HTTPS 站点时,由服务器返回一个 Header,告知浏览器在这个域名下必须强制 HTTPS,在有效期内,浏览器访问此域名将只使用 HTTPS,下方为在 Apache 里的 .htaccess
中配置。
Header set Strict-Transport-Security "max-age=315360000; preload; includeSubDomains" env=HTTPS
比如首次访问 http://tlo.xyz
时,浏览器会被 301 跳转到 https://tlo.xyz
下,然后就会收到这个 Header,在 10 年内,tlo.xyz 下所有的域名都只会使用 HTTPS,包括二级域名 ze3kr.tlo.xyz
。 但这一切还没有结束,假如浏览器第一次访问时,网站就已经被 HTTPS 劫持攻击了,那么这样做是毫无意义的,所以需要在启动 HSTS 后,包含 preload
参数,然后去提交,注意好要求。 当你提交了之后,一段时间后就能在各大浏览器的源码里看到你的域名了。
前往 SSL Server Test,就能给你的服务器的 SSL 配置给出一个评分。 哎,这差距
一位受访者对南方周末记者描述,几天前朋友家要换马桶,她微信回信息说了自家用的牌子,下次打开手机 WPS 时,开屏广告就成了京东马桶。“这种 N 年不提的话题,不可能这么巧吧?”她怀疑是输入法泄密。
根据 Mob 研究院数据,2020年搜狗、讯飞和百度三家输入法占据了国内市场九成的活跃用户,其中搜狗占有率最高,54%。2020年9月,腾讯全资收购了搜狗。
易观一组数据表明,中国第三方输入法的活跃用户在2019年达到7.71亿。输入法已成网民刚需。
输入法会获取哪些信息
......
梳理三份隐私政策,输入法软件可能收集的用户信息有11类,涉及调用的手机权限有12项。
你的简历是怎么泄露出去的?
1)注册假公司骗取简历
2)与招聘网站“内外勾结”
3)利用爬虫技术抓取(招聘网站的)简历
买你的简历用来干嘛?
1)网赚营销与兼职招聘
2)博彩、彩票和棋牌骗局
3)房地产、保险、教育培训的营销
北京时间4月7日早间消息,据报道,此前,美国社交媒体平台 Facebook 被曝有5.33亿用户数据遭泄露,其中包含一些知名人士的信息。媒体报道称,泄露的信息包括用户手机号码、名字、位置、出生年月日、电子邮件地址等。对此,Facebook 今日回应称,报道中的数据泄露事件与数据窃取有关,而不是被黑客入侵系统。
Facebook 表示,2019年因为一个功能遭到误用,导致信息出现泄露,可能影响用户约5.3亿;发现问题之后,Facebook 第一时间堵住漏洞。
根据 Facebook 的解释,2019年9月之前,恶意破坏者利用 Facebook 同步联系人工具存在的漏洞窃取数据。随后公司发现漏洞并修复。
......
巴西几乎所有人的信息泄露。泄露的数据为 14GB,包含了1.04亿车辆和4000万家企业详细信息,潜在受影响人数2.2亿。巴西人口2.1亿,这意味着巴西所有人的信息都被泄露(还有部分在巴西生活的外籍居民)。泄露的信息包含了姓名、出生日期和 CPF 号码。CPF 号码是巴西税务局分配给居民和需要纳税的外籍居民的数字。网络安全公司对钓鱼骗局发出了警告。
去年11月,苹果用户在一次影响广泛的宕机事故后才知道:苹果监视了用户打开和启动的每一个应用程序(编程随想注:上一期谈过这个重大丑闻【OCSP 事件】)编程随想注:
苹果为什么要这么做?最为善意的猜测是:此举旨在更早发现恶意程序。在一个充斥着恶意的网络世界里,这么做是必要的。安全专家 Bruce Schneier 将这种现象形容为“封建式安全”。
生活在21世纪的我们,面临各种数字强盗的围攻。从身份窃贼,到跟踪者,到企业和政府间谍,到骚扰者。我们是没有办法自保的。即使是身经百战的专家也无法和强盗相抗衡。为了抵抗强盗,你必须做到完美,不犯任何错误。而强盗只要抓住一个错误就能逮住你。因此为了安全起见,你必须和数字军阀结盟。苹果、Google、Facebook 和微软等建立了庞大的要塞,它们投入了大量金钱招募了最强的雇佣兵来保护要塞,为客户(包括你)抵御攻击者。
但如果军阀们转向了你,你对它们而言将是赤裸裸的。这种敌我难辨的情况在与军阀打交道的过程中一直发生着。比如 Google 调整 Chrome 以阻止商业监视(但不阻止它自己的商业监视)。Google 会努力阻止其他人监视你,但如果他们付钱了,Google 就会允许他们监视你。
如果你不在乎被 Google 监视,如果你信任由 Google 判断谁是骗子谁不是,那么这没问题。但如果你们之间存在不一致的意见,那么输的肯定是你。苹果在2017年按中国要求从其应用商店下架了保护隐私的工具。原因是苹果必须遵守中国的法律,它在中国有公司,有制造基地。军阀自身的安全是远甚于客户的。
腾讯消息应用 QQ 以及 QQ 办公版 TIM 被发现会扫描用户的浏览器历史,搜索购物记录,选择性上传。用户报告,QQ 在登陆10分钟之后开始扫描 Appdata\Local\ 下的所有文件夹,对其中 User Data\Default\History 进行进一步的扫描,User Data\Default\History 是基于 Chrome/Chromium 的浏览器默认历史纪录存放位置,Firefox 的浏览历史存放位置不同,因此目前看来不受影响。不过 Firefox 市场份额不高,而基于 Chrome/Chromium 的浏览器占据了九成以上的份额。编程随想注:
腾讯总部所在地深圳市南山区法院上个月判决,微信好友关系不属于个人隐私。
本案的原告在2019年发现,使用微信或 QQ 登录腾讯“微视”APP后,微视会获取其全部微信或 QQ 好友信息。他认为,腾讯公司未经其授权将他的微信、QQ 好友关系提供给其他 APP,侵犯了他的隐私权。
但南山法院认为:“隐私是指用户对其生活领域不愿公开的信息享有不被他人知悉的权利。原告主张的性别和地区属于公开信息,不构成隐私。”
北京师范大学法学院教授袁治杰认为:腾讯并没有权利将微信好友关系披露给第三人,“即使我同意微信可以将我的好友关系提供给他人,微信也不得提供。因为好友关系是双向的,要想有权提供,微信必须同时获得了我的好友们的同意才行。换句话说,必须获得双向同意才行。”
Facebook CEO Mark Zuckerberg 使用加密消息应用 Signal,他的电话号码包含在泄露的5.33亿 Facebook 用户数据中间(编程随想注:这个“用户数据泄漏事件”,前面已经提到了),除此之外还有他的名字、地址、婚姻状况、出生日期和 Facebook ID。编程随想注:
一位安全研究人员说:又一次大转折,Mark Zuckerberg 注重他自己的隐私,使用不属于 @facebook 的端对端加密聊天应用。
......
WhatsApp 的服务条款变更引发了很多争议,加密邮件服务 Proton 官方博客介绍了多个隐私友好的替代服务:编程随想注:
Signal,开源端对端加密,缺点是注册需要手机号;
Telegram 的缺点是私聊才端对端加密,没有群聊;(编程随想注:这款也要用手机号注册)
Threema,开源端对端加密,但应用本身不免费;
Wickr Me,不开源;
Wire,注册需要手机号或电邮,记录大量元数据;
Element,使用 Matrix 通信协议,基于去中心化联邦架构;
Keybase,已被 Zoom 收购,记录元数据。(编程随想注:Zoom 是商业公司)
俄罗斯网络犯罪世界充斥着谜团,但有一种技术充当了主要的通信工具:有18年历史的分布式开源即时通讯协议 Jabber。根据安全公司 Flashpoint 的研究,黑客做交易、分享情报和对恶意程序提供技术支持都是通过 Jabber 完成。该公司资深研究员 Leroy Terrelonge III 称,在网络犯罪经济中,Jabber 是通信的黄金标准。Jabber(或又叫 XMPP)通信系统由数千个独立服务器构成,在全世界有大约一千万用户。有10亿用户的 WhatsApp 使用的是一个 XMPP 变体。ICQ 曾经统治了俄罗斯 IM 市场长达20年,当 Edward Snowden 在2013年披露美国的大规模监视之后,俄罗斯人开始转向了 Jabber。Jabber 加上它的加密插件 OTR(off-the-record)能为通信提供强加密支持。Jabber 的联邦式架构允许任何人运营服务器,这对犯罪分子有巨大的吸引力,他们担心企业与政府之间合作过于紧密。编程随想注:
Adobe 在2020年12月31日之后停止更新和分发 Flash Player,之后重庆重橙网络科技有限公司通过网站 flash.cn 独家在中国大陆分发和维护 Flash Player。
安全公司 Minerva Labs 在收到多次与 Flash 中国版相关的安全警告之后对其进行了分析,发现 Flash 中国版除了安装 Flash 之外还会下载和运行名叫 nt.dll 的文件,其主要功能类似广告程序,但不排除它可以用于其它恶意目的。Flash 中国版主要影响中国用户。
在电邮中使用跟踪技术正日益常见。被称为“跟踪像素”的技术可记录邮件是否打开,以及何时打开;邮件被打开了多少次;打开邮件的设备类型;用户的粗略位置。这项技术可被用于判断一个特定电邮推广活动的影响,以及记录下更多的客户肖像细节。编程随想注:
跟踪像素通常是只有 1x1 像素的 .GIF 或 .PNG 文件,被插入到插入到电邮的页眉、页脚或正文中,用户的裸眼是无法识别出它的。用户可以使用电邮程序的免费插件剥离掉大部分跟踪像素。
杭州荷博物联公司设计了一款智能坐垫,作为产品研发的一部分,发给员工放在他们的办公椅上进行测试。这些坐垫号称是用于检测员工健康状况,指出可能是疲劳迹象的不良坐姿,测量心率,统计员工在办工桌前坐了多久。编程随想注:
但当该公司的人力资源经理开始询问员工,为什么长时间离开座椅或提前下班时,人们很快明白了,这些坐垫也记录了员工最不想让老板知道的事情:他们什么时候不在自己的办公桌前,这可能会给员工带来麻烦。
......
CVE-2021-24093
,影响 Windows 10 & Windows Server 2016。这是 Google 安全研究人员在去年11月发现并报告给微软。而微软直到今年(2021)2月的例行更新才修复。CVE-2020-15999
,与这个很类似。CVE-2020-15999
位于“FreeType 字体渲染库”。也是利用“Web 页面的字体”来实现远程代码执行。假如你很注重安全性,为了更彻底地消除【字体】导致的攻击面,你可以定制浏览器,禁止在 Web 页面中加载外来的字体。
对 Firefox 的深度定制,可以参考教程《扫盲 Firefox 定制——从“user.js”到“omni.ja”》;对其它浏览器的深度定制,俺暂时还没写过教程。
The two RCE(注:Remote Code Execution)vulnerabilities are complex which make it difficult to create functional exploits, so they are not likely in the short term. We believe attackers will be able to create DoS exploits much more quickly and expect all three issues might be exploited with a DoS attack shortly after release.
安全公司趋势科技报告:在茄子快传中发现多个安全漏洞,漏洞能导致远程代码执行。
茄子快传是下载量最高的传输应用,曾跻身全球应用下载排行榜前十。它最早由联想开发,一度预装在联想手机上,后从联想独立出去。
茄子快传索取的权限相当广,其中包括访问所有本地存储和媒体,摄像头、麦克风、通讯录、位置,甚至还可以删除应用。趋势科技称,茄子快传的漏洞能被用于泄露用户的敏感数据,以及远程执行代码。
Google 本周释出了 Chrome 的安全更新 v89.0.4389.72,修复了47个漏洞,其中包括正被利用 0day 漏洞。
编号为 CVE-2021-21166 的漏洞是微软安全研究员 Alison Huffman 在2月11日报告的,Google 没有披露漏洞细节,只是表示它知道漏洞正被利用。
这是 Google 在今年修复的第二个 0day,上一个是2月4日修复的 V8 堆溢出漏洞 CVE-2021-21148。
KrebsOnSecurity 援引消息来源报道,至少三万家美国机构——包括大量的小企业和各级政府被黑客组织利用微软电邮软件 Microsoft Exchange Server 的漏洞入侵。
微软本周披露,黑客正在利用 Exchange Server v2013 到 v2019 中的四个 0day 漏洞。在漏洞披露的三天内,安全专家称:同一黑客组织增加了对尚未修补的 Exchange 服务器的攻击,在入侵之后攻击者留下一个可以后续访问的 web shell。微软表示正与美国网络安全和基础设施安全局密切合作,为客户提供最佳的指南和缓解措施。
路透华盛顿3月10日 - 网路安全公司 ESET 周三在博客贴文中表示,至少有10个不同的黑客组织正利用近期发现的微软邮件服务器软件漏洞来入侵全球各地目标。
漏洞遭到利用的广泛程度,使得美国与欧洲监管者就微软 Exchange 软件漏洞发出的警告更形迫切。
微软这套用户众多的电邮与日程软件的安全漏洞,等于为商业级的网络间谍活动开启大门,使得不怀好意者能够从易于入侵的服务器中任意窃取电邮。路透上周报导,已有数万个公司遭到波及,每天都有新的受害者出现。
虽然微软发布修补措施,但许多客户更新速度缓慢,意味着这方面至少还有部分对各类黑客而言是门户洞开的。专家将更新缓慢部分归因于 Exchange 架构的复杂性。
微软对客户更新速度缓慢不予置评。在先前有关此漏洞的声明中,微软已强调立即修补所有受影响系统的重要性。
安全审计公司 Qualys 发现了一个有10年历史的 Sudo 严重漏洞,允许 Linux 用户获得 root 级别的权限。编程随想注:
该漏洞被称为 Baron Samedit,编号 CVE-2021-3156,Sudo 团队已经释出了补丁。该漏洞允许已经获得低权限账号的攻击者获得 root 权限,即使账号没有列入控制账号访问的配置文件 /etc/sudoers 中。
3个月前(2020年1月)的那篇《近期安全动态和点评》,俺已经聊过 sudo 的另一个高危漏洞。
在不到半年时间内,sudo 连续爆了两个非常致命的漏洞——对攻击者而言,这2个漏洞很容易利用,而且都能实现【提权】。
这样的苗头挺危险,很可能预示着——sudo 这个软件包内部还有其它一些高危漏洞没被发现。
有鉴于此,你或许要考虑:【不装或卸载】这个软件包。在需要切换用户权限时,改用 su 命令。当然啦,sudo 命令在很多场合比 su 命令更方便。因此,你需要作出一些取舍。
......编程随想注:
这些漏洞(CVE-2021-27363、CVE-2021-27364 和 CVE-2021-27365)存在于内核的 iSCSI 模块中。虽然在默认情况下该模块是没有被加载的,但是 Linux 内核对模块“按需加载的特性”意味着它可以很容易地被本地触发。安全专家在 Red Hat 所有已测试版本和其他发行版本中发现这些漏洞。
在 GRIMM 博客上,安全研究员 Adam Nichols 表示:“我们在 Linux mainline 内核的一个被遗忘的角落里发现了3个 BUG,这些 BUG 已经有15年的历史了。与我们发现的大多数积满灰尘的东西不同,这些 BUG 依然存在影响,其中一个可以作为本地权限升级(LPE)在多个 Linux 环境中使用”。
......
这些漏洞已经在以下内核版本中得到修复:5.11.4、5.10.21、5.4.103、4.19.179、4.14.224、4.9.260 和 4.4.260。而其他已经停止支持的内核将不会收到本次安全修复。
据外媒报道,Windows Defender 的一个严重漏洞在约12年的时间里都没有被攻击者和防御者发现,直到去年秋天它才被修复。值得一提的是,对于一个主流操作系统的生命周期来说,12年是相当长的一段时间,对于这样一个关键的漏洞来说,其隐藏的时真的是太长了。编程随想注:
GnuPG(GNU Privacy Guard)主开发警告:使用1.9版本加密库 Libgcrypt 的用户应立即更新。编程随想注:
Libgcrypt 1.9 版本是在1月19日释出的,Google Project Zero 研究员 Tavis Ormandy 在该版本中发现了一个堆缓冲区溢出漏洞,会在解密部分数据时发生溢出。问题与块缓冲区管理代码中的错误假设有关,利用该漏洞非常简单,使用1.9版本的用户需要立即去更新加密库。
安全专家披露了流行 DNS 转发客户端 Dnsmasq 的7个漏洞,被统称为 DNSpooq 的漏洞允许攻击者发动 DNS 缓存记录中毒攻击。
存在漏洞的 Dnsmasq 软件被数百万设备使用,其中包括思科设备、Android 智能手机、路由器、防火墙、访问点和 VPN 等网络设备。如果攻击者能利用漏洞对企业路由器成功发送缓存中毒攻击,那么他们可以将企业雇员对 Gmail 账号的访问重定向到钓鱼网站。Dnsmasq 项目已经释出了补丁修复漏洞,网络管理员需要尽可能快的给设备打上补丁。
香港多家网络公司据报按当地警方依据香港《国安法》的要求,封锁为用户连结到一个称为“香港编年史”的网站,这个网站载有大量参加处理2019年香港示威期间的部分警察和一些亲建制人士的个人资料,是《国安法》去年生效以来,香港当局首次引用这部法例封锁网站。编程随想注:
目前“香港编年史”的网站已经被多个网络供应商封锁,但网站本身仍然在运作,香港境外的人仍然可以使用网站,香港境内使用虚拟私人网络(VPN)也可以正常使用网站。香港媒体引述当地其中一家主要网络供应商“香港宽频”表示,已经按《国安法》要求停止连线至“香港编年史”网站,其他网络供应商就没有回应传媒查询。
......
除了“香港编年史”,一个称为“香港解密”的网站也刊载了一些民主派人士、示威者和记者的资料。虽然两个都是“起底”网站,“香港解密”至今仍然可以正常运作,令外界质疑香港当局的做法有“双重标准”。
......
DNS-over-HTTPS(DoH)加密了 DNS 请求, 被用于规避 DNS 污染。
根据 greatfire.org 的测试结果:NextDNS、Quad9、AdGuard 在近日被屏蔽。防火墙对这些域名没有使用 DNS 污染, 而是使用检测 SNI 和 IP 黑洞的方法。Cloudflare 的 DoH 服务器还没有被屏蔽。
微信公众平台、搜狐号、百家号等平台近期相继发布通知,要求公众账号提供互联网新闻信息服务,应取得《互联网新闻信息服务许可证》,如不具备相关资质,不得发布或建议不要发布时政类新闻。
......
中国网络时政论坛“猫眼看人”在3月底突然关闭后,多个中国军事自媒体近期也陆续被封。不少中国网友感叹言论再趋紧缩,但也有人认为当局是在防止泄密、清除“造爱国谣”。
中国大量军事自媒体被封。据中央社称,此为莫谈国事又一桩。根据社群平台新浪微博的相关讨论,中国当局这波对军事自媒体的清洗可追溯至3月22日。
消息说,中国大型军事论坛“超级大本营”当天下午突然公告,将于3月23日凌晨起永久关闭海军、空军、陆军、航太及新概念武器等4个讨论版,实际上是关闭了军事装备讨论版。随后,“新浪军事”、“军武次位面”等军事类微信公众号近日也因“违规”被关,甚至连微信母公司腾讯旗下的腾讯网军事频道微信公众号“讲武堂”也没能幸免。其中,“军武次位面”迄今未解封。于此同时,中国知名时事政治论坛“猫眼看人”也在3月30日突然关闭。
据该报道,关于这波时政、军事论坛、自媒体被关闭,不少中国网友在微博留言感叹言论越趋紧缩,认为当局有意引导舆论“莫谈国事,只谈风月”等。不过,也有人指出,常有军事迷在军事论坛刊载拍摄到的新型军机或正在建造中的军舰等,且被封锁的军事论坛多是涉及武器讨论,很可能是当局为了防止泄密所致。
此外,也有中国网友列举上述自媒体过去的错误文章指出,这类自媒体常常“造爱国谣”煽动网友情绪,导致“战狼情绪”被境外报导放大,“增大了外事处理的难度,终于被集中治理了一次”。
......
俄罗斯国家杜马正在讨论一项立法,阻止国民使用西方的卫星宽带,违反者将会面临罚款。个人用户面临的罚款金额从1万到3万卢布,而企业的罚款金额从50万到100万卢布。
美国公司 SpaceX 和英国公司 OneWeb 都在发射各自的宽带卫星,计划在不久的未来提供高速的卫星宽带服务。但俄罗斯杜马议员认为使用西方卫星宽带将会绕过该国的通信监视系统 System of Operational Search Measures。作为加强对媒体和通信控制的一部分,所有俄罗斯的互联网流量都必须通过一家俄罗斯通信服务商。
随着越来越多的网站普及 HTTPS,明文的服务器名称指示(Server Name Indication,SNI)成为新的隐私漏洞。通过明文 SNI,ISP 或任何网络中间人将会知道你访问了哪个网站。两年前,Mozilla 宣布 Firefox Nightly 加入了对加密 SNI 的支持(编程随想注:“加密 SNI”称作 ESNI)。编程随想注:
但自 ESNI 规格草案发布以来,分析显示只加密 SNI 扩展所提供的保护是不完整的。举例来说,在会话重用过程中,Pre-Shared Key 扩展会包含 ESNI 加密的服务器名称的明文副本。为了解决 ESNI 的不足之处,较新版本的规格不再只加密 SNI,而是加密整个 Client Hello 信息。因此规格的名字也从 ESNI 改为 ECH。
从 Firefox 85 起,浏览器用 ECH 取代了 ESNI,about:config 也不再展示 ESNI 选项。该功能尚未默认启用,如果用户想要默认启用可以进入 about:config 将设置 network.dns.echconfig.enabled 和 network.dns.use_https_rr_as_altsvc 设为 true。
favicons.sqlite
文件。Google 周一宣布它可能找到了 cookies 的隐私友好替代。它测试了名为 Federated Learning of Cohorts(FLoC)的新 API,其源代码发布在 GitHub 上。编程随想注:
测试显示,相比基于 cookies 的广告,FLoC 广告的转化率至少达到 95%。FLoC 使用机器学习算法分析用户数据,然后根据用户访问的网站,将数千用户分成一组。数据是浏览器在本地收集的不会分享出去,但这群用户的数据会共享并被用于定向广告。也就是说 FLoC 广告是根据人们的普遍兴趣进行针对性展示。
Google 在今年初宣布了 Cookies 的替代 Federated Learning of Cohorts (FLoC),声称它对用户隐私更为友好。但这一计划引发了美国司法部调查人员的关切,调查人员一直在问询广告行业的高管,以了解 Google 此举是否会妨碍规模较小的竞争对手。
消息人士表示,司法部调查人员的询问涉及到 Chrome 的各种政策,包括与 cookies 相关的规定,对于广告和新闻产业产生哪些影响。
Chrome 浏览器的全球市占率约 60%。消息人士并指出,调查人员正询问 Google 是否利用 Chrome 来避免对手广告公司通过 cookies 追踪用户,同时留下漏洞供自己用 cookies、分析工具、以及其他资源来收集资料,从而降低竞争。
微软将在4月份释出的 Windows 10 例行更新中移除旧的 Edge 浏览器。
微软目前在 Windows 10 上有三种不同的浏览器:旧 Edge,新的基于 Chromium 的 Edge,以及 IE。为了减少混乱和改进安全,微软准备从操作系统移除旧的浏览器。软件巨人公布了杀死 旧 Edge 的计划:2021年4月释出的例行安全更新。
Chromium Edge 将成为微软希望用户唯一使用的浏览器。
由 Mozilla 联合创始人 Brendan Eich 所创公司开发的 Brave 成为首个支持 IPFS 点对点协议的浏览器。编程随想注:
IPFS 代表 InterPlanetary File System,类似 BitTorrent 的点对点协议,设计作为去中心化储存系统,允许用户在数百甚至数千个节点之间共享不受审查的内容。当 Brave 探测到用户试图访问 IPFS 内容或使用原生地址如 ipfs:// 或 ipns://,浏览器会提示用户安装和启用 IPFS 节点,或使用一个 HTTP 网关。
Google Chrome Team 团队向 Linux 发行版开发者发去邮件通知,从3月15日起,在构建配置中使用 google_default_client_id 和 google_default_client_secret 的第三方 Chromium 版本,它们的终端用户将无法再登陆其 Google Accounts 账号。
Google 称,他们在最近的审计中发现部分基于 Chromium 的浏览器使用了原本只给 Google 使用的 Google API 和服务,其中最主要的是同步账号的 Chrome Sync API,它决定移除这些 API 的访问,声称这是为了改进用户数据安全。
Linux 发行版开发者表示过去十年他们一直这么做的,如果无法使用 Google 的同步功能,那么继续维护 Chromium 软件包也没有什么价值了。Chrome 的工程总监 Jochen Eisinger 在回复中表示他们的决定不会改变。Slackware Linux 和 Arch Linux 都表示考虑从仓库移除 Chromium。
......编程随想注:
When an iPhone has been off and boots up, all the data is in a state Apple calls 【Complete Protection】. The user must unlock the device before anything else can really happen, and the device's privacy protections are very high. You could still be forced to unlock your phone, of course, but existing forensic tools would have a difficult time pulling any readable data off it. Once you've unlocked your phone that first time after reboot, though, a lot of data moves into a different mode—Apple calls it "Protected Until First User Authentication", but researchers often simply call it 【After First Unlock】(注:简称 AFU).
If you think about it, your phone is almost always in the AFU state. You probably don't restart your smartphone for days or weeks at a time, and most people certainly don't power it down after each use. (For most, that would mean hundreds of times a day.) So how effective is AFU security? That's where the researchers started to have concerns.
The main difference between Complete Protection and AFU relates to how quick and easy it is for applications to access the keys to decrypt data. When data is in the Complete Protection state, the keys to decrypt it are stored deep within the operating system and encrypted themselves. But once you unlock your device the first time after reboot, lots of encryption keys start getting stored in quick access memory, even while the phone is locked. At this point an attacker could find and exploit certain types of security vulnerabilities in iOS to grab encryption keys that are accessible in memory and decrypt big chunks of data from the phone.
......
都柏林大学圣三一学院的 Douglas J. Leith 教授跟踪了(PDF)iOS 和 Android 设备向苹果和 Google 服务器发送的遥测数据,发现 Google 收集的数据二十倍于苹果。
Leith 教授称,研究考虑了操作系统本身收集的数据以及操作系统供应商提供的默认应用收集的数据,云端存储,地图/位置服务等,只计算遥测数据。
Leith 教授指出,即使用户选择退出遥测,iOS 和 Android 仍然会发送遥测数据。苹果收集了更多的信息数据类型,但 Google 收集的数据量要多得多。开机10分钟内,Pixel 手机向 Google 发送了 1MB 数据,而 iPhone 发送了 42KB;在闲置状态下,Pixel 手机每12小时向 Google 发送 1MB 数据,相比之下 iPhone 只向苹果发送 52KB 数据。
当新的 SIM 卡插入到设备中,相关信息会立即与苹果和 Google 共享。设备上预装的应用被发现在未启动或使用前就会连接苹果和 Google 服务器。Google 发言人用汽车收集数据为它收集数据辩护。
安全公司 Zimperium 的研究人员发现了包含完整间谍软件功能的先进 Android 恶意程序。恶意程序伪装成系统更新,通过第三方应用商店传播。它的功能包括:编程随想注:
窃取 IM 消息,
窃取 IM 数据库文件(如果可以 root),
检查默认浏览器的书签和搜索,
检查 Google Chrome、 Mozilla Firefox 和 Samsung Internet Browser 的书签和搜索历史,
搜索特定扩展名(.pdf .doc .docx .xls .xlsx)的文件,
检查剪贴板数据,
检查通知内容,
记录音频,
记录电话呼叫,
利用前置或后置摄像头定期拍照,
窃取照片和视频,
跟踪 GPS 位置,
窃取短信,
......
最近,一名安全研究员利用一种新颖的软件供应链攻击成功入侵了35家大型科技公司的内部系统,这些公司包括:微软、苹果、PayPal、特斯拉、Uber、Yelp、Shopify、Netflix。在向这些公司提交安全报告后,他获得超过13万美元的奖金。
据悉,此类攻击利用了开源生态系统的一个设计缺陷:依赖关系混乱。攻击者先把恶意软件上传到开源存储库中,比如 PyPI、npm 和 RubyGems,此后它们会自动地分发到下游的公司的内部应用中。
与传统的误植域名攻击(typosquatting attacks)不同,这种特殊的供应链攻击更复杂,并且无需攻击者进行其他操作。
去年,安全研究者 Alex Birsan 在与另一名研究者 Justin Gardner 一起工作时冒出一个想法。当时,Gardner 向 Birsan 分享了一个清单文件(manifest file)package.json,它来自一个 npm 包,而它正被 PayPal 内部所使用。
Birsan 注意到一些清单文件包并没有出现在公共的 npm 存储库,但是,它却代替了 PayPal 创建的私有 npm 包。于是,他产生一个疑问:如果创建一个同名的公开 npm 包,那么软件在构建时,开发人员是优先使用私有的,还是公开的版本?
为测试这一假说,Birsan 开始搜索私有内部包的名称。这些私有的内部的包可以从 GitHub 存储库的清单文件或公司的 CDN 中找到,但却不在公共开源存储库中。
此后,这名研究员开始在开源存储库(比如 npm、PyPI 和 RubyGems)中创建同名的冒牌项目。这些冒牌项目都位于 Birsan 的 GitHub 真实账户下,并且有一个清晰的免责声明,解释“软件包不包含任何有用的代码,只是用于安全研究目的”。
他很快意识到,公开的软件包会比私有的软件包优先度更高。Birsan 还注意到,某些情况下,像 PyPI 包,版本更高的软件包,优先度也更高,无论它是私有的还是公开的。
利用这一方法,他通过发布公司内部在用的同名的公开软件包,实施了一系列成功的供应链攻击,轻松地入侵微软、苹果、PayPal、特斯拉、Uber、Yelp、Shopify、Netflix。
Birsan 说:“与误植域名或品牌劫持不同,依赖关系混乱不需要攻击者进行任何的手工操作。”
......
Google 警告,过去几个月,朝鲜黑客组织对安全研究员发动了针对性攻击。编程随想注:
为了建立信誉和联系安全研究员,黑客首先创建了安全博客和 Twitter 账号,与潜在目标进行互动,然后发帖发视频声称完成了某个漏洞利用。Google 表示它没有验证所有漏洞利用的可信度,但至少有一例所谓成功的漏洞利用被指是伪造的。在与目标建立初步联系之后,黑客会询问目标:是否愿意共同研究漏洞,然后提供一个 Visual Studio 项目,其中包含了一个定制的恶意程序 DLL。
除了社会工程攻击外,黑客还成功入侵了访问他们博客的安全研究员的计算机系统。当时受害者的系统打了最新的补丁,Google 表示他们暂时还不知道入侵机制。
安全研究人员发现了针对手游玩家的供应链攻击。未知攻击者入侵了开发 NoxPlayer 的 BigNox,NoxPlayer 被用于在 PC 和 Mac 上模拟 Android 系统,用户主要用它玩 Android 手游。它非常受欢迎,在全世界有1.5亿用户。
攻击者在入侵了 BigNox 的软件分发系统之后对部分用户推送了恶意更新,操纵了两个文件:BigNox 的主二进制程序 Nox.exe 和更新程序 NoxPack.exe。恶意更新是在去年9月推送的,攻击者在去年年底和今年初向特定受害者推送了后续恶意更新。研究人员认为这些恶意程序主要用于监视目标,受害者位于台湾、香港和斯里兰卡。
据彭博社(2020年2月)12日的文章介绍:2010年,美国国防部发现旗下数以千计的电脑伺服器将军方网路资料送到中国,后来发现这是因为执行开机程序的晶片中隐藏恶意程式码。2014年,半导体巨头英特尔(Intel)发现中国骇客集团利用一台伺服器入侵英特尔网路,而这台伺服器从一家提供更新的供应商网站下载到恶意软体。2015年,美国联邦调查局警告多家公司,中国特务在一家製造商的伺服器中隐藏了一个另外载有后们程式码的晶片。而这些事件都牵涉两个共同点:中国和设在加州的美超微公司(Supermicro)。此外,美国情报单位都对此知情,但秘而不宣,试图进行反情报工作,以摸清楚中国的底细。
在彭博社文章中,前 FBI 资深官员泰布(Jay Tabb)指出,美超微事件凸显了全球供应链的广泛风险。“完美说明了美国企业若选择在中国制造任何产品,容易受到潜在的恶意窜改。对产品制造地点若无法完整地监督,这是最糟情况的例子。”“中国政府这种行径已有很长一段时间,企业必须明白中国还在这么做。硅谷尤其不能佯装这种情况现在没有发生。”
该报导也指出,美超微或它旗下员工都未被指控任何非法的行为,报导中受访的前美国官员强调,美超微本身不是任何反情报调查的目标。
美超微回应彭博询问时表示,美国政府或公司的客户从未就这些所谓的调查和他们联系。彭博汇集一些迥异和不准确的指控,做出了牵强的结论。美国联邦机构,包括报导中在调查的机构,仍继续採购美超微产品。
中国外交部发言人则表示,文中的指控是对中国的攻击,试图“诋毁中国和中国企业”,并指控美国官员捏造事实炒作“中国威胁论”。
在俄罗斯黑客之后,疑似中国黑客去年利用 SolarWinds 公司软件中的缺陷侵入美国政府电脑。知情人士称,FBI 调查人员最近发现,美国农业部内的联邦薪资处理机构国家财务中心是受到此次黑客行动影响的组织之一,这令人担忧成千上万联邦政府雇员的数据可能泄露。这次疑似中国黑客所利用的软件缺陷不同于美国指控的俄罗斯政府特工所利用的软件缺陷。
中国外交部表示,追究网络攻击的来源是一个“复杂的技术问题”,任何指控都应该有证据支持。中国外交部在声明中称,中方坚决反对并打击任何形式的网络攻击和窃密活动。
安全公司 Secureworks 周一发表报告,除了俄罗斯黑客,中国黑客组织也在同一时间内对 SolarWinds 的客户发动了攻击。
在俄罗斯黑客发动供应链攻击的同时,安全研究人员去年12月披露还有黑客利用了 SolarWinds 公司软件 Orion 的一个漏洞,在该公司客户的网络中安装了名为 Supernova 的 web shell。但当时还不知道是谁发动了攻击。根据其使用的技术、策略和程序,研究人员现在将该黑客组织命名为 Spiral,该组织此前还利用了 ManageEngine ServiceDesk 的漏洞入侵企业网络。
《坦帕湾时报》报道称,有黑客成功渗透了控制佛罗里达州奥尔德斯马市水处理设施的计算机系统。通过篡改可远程控制的计算机数据,攻击者改变了当地供水中的化学品含量(上调了氢氧化钠碱液的水平)。庆幸的是,设施管理者和警方均表示,目前暂无居民受到伤害的报告。编程随想注:
......
即便如此,意图不明的攻击者将黑手伸向公共基础设施一事,还是引发了许多居民的恐慌情绪。目前当地正在与联邦调查局(FBI)和特勤局(Secret Service)联手展开调查,附近城镇也受到有关潜在威胁的警报。
需要指出的是,佛罗里达州奥尔德斯马市(Oldsmar)发生的事件并非孤例。去年11月的时候,伊利诺伊州的一家水务公司也被疑似与俄方有关的攻击者给盯上。
此外,据《华盛顿邮报》报道,以色列情报官员声称:去年发生了一起未遂的网络攻击事件,指责伊朗方面试图对该国的水处理设施展开攻击。
......
Qubes OS
Why We Love Qubes OS:
- Its "Security by Isolation" approach using containers - aka "Qubes" - eliminates the concern of compromised programs.
- All of these Qubes are integrated into one common desktop environment and color-coded to help users stay organized.
- Sandboxing protects system components.
- Qubes OS offers full-disk encryption for maximum file protection.
Tails
Why We Love Tails:
- Its tight integration with the Tor network ensures anonymity online.
- The included web browser is pre-configured for maximum security and includes add-ons like NoScript, Ublock Origin, and HTTPS Everywhere.
- Users get access to Onion Circuits, a valuable tool that allows them to view how their PC traverses through the Tor network.
- Tails comes with the Aircrack-NG wireless network auditing tool.
- The OS is encrypted and designed to run with full functionality on a USB drive.
- The distro features a built-in Bitcoin wallet ideal for users looking to make secure cryptocurrency transactions.
Kali Linux
Why We Love Kali Linux:
- Kali Linux uses LUKS full-disk encryption to protect sensitive pentesting data from loss, tampering and theft.
- This flexible distro offers full customization with live-build.
- Users can automate and customize their Kali Linux installations over the network.
- "Forensics" mode makes this distro perfect for forensics work.
- There's a Kaili Linux training suite available called Kali Linux Dojo, where users can learn how to customize their own Kali ISO and learn the basics of pentesting. All of these resources are available on Kali's website, free of charge. Kali Linux also boasts a paid-for pentesting course that can be taken online, with a 24-hour certification exam. Once you pass this exam, you're a qualified pentester!
Parrot OS
Why We Love Parrot OS:
- The distro provides pentesters and digital forensics experts with the best of both worlds - a state-of-the-art "laboratory" with a full suite of tools accompanied by standard privacy and security features.
- Applications that run on Parrot OS are fully sandboxed and protected.
- Parrot OS is fast, lightweight and compatible with most devices.
BlackArch Linux
Why We Love BlackArch Linux:
- BlackArch Linux offers a large selection of hacking tools and preconfigured Window Managers.
- The distro provides an installer with the ability to build from source.
- Users can install tools either individually or in groups with the modular package feature.
Whonix
Why We Love Whonix:
- Whonix comes with the Tor Browser and the Tox privacy instant messenger application - ensuring fully-anonymous web browsing and instant messaging.
- The OS employs an innovative Host/Guest design to conceal users' identity behind the anonymous proxy and prevent IP and DNS leaks.
- The distro features pre-setup Mozilla Thunderbird PGP email.
- Linux Kernel Runtime Guard (LKRG), a kernel module that performs runtime integrity checking of the Linux kernel to detect security vulnerabilities and exploits, can be easily installed on Whonix.
中国最大智能手机制造商华为在遭到美国的出口禁令之后宣布了自己的操作系统鸿蒙,去年12月释出了 V2 版本。华为消费者业务 CEO 余承东宣称:鸿蒙是与 Android 和 iOS 完全不同的操作系统。华为消费者业务软件部总裁王成录上个月再次表示,鸿蒙不是 Android 或 iOS 的拷贝。编程随想注:
美国科技网站 Ars 对华为鸿蒙进行了一番测试,记者首先试着下载 Harmony SDK,结果迎面一击:他被告知需要接受两天的背景检查,要求注册账号通过身份验证,包括递交名字、地址、电邮、电话号码和护照照片。即使你试图绕过注册流程,下载“盗版”的版本,SDK 也需要你登陆账号之后才会运行。
出于研究的目的,记者牺牲了自己的隐私,下载了 SDK,开始进行测试。他发现模拟手机使用的是中国 SIM 卡,进入的网络叫“华为内网”。进一步研究发现,Harmony 的应用页面基本上全是类似 Android Services Library、Android Shared Librar 之类的,以及指示 Android 10 的信息。
作者认为现阶段的 Harmony 本质上就是换了皮肤的 Android,华为甚至连 Android 的名字都没有替换掉。作者还阅读了 Harmony 的文档,认为这些文档都是胡扯,没有多少意义。
华为消费者业务软件部总裁王成录今年初曾表示,鸿蒙不是 Android 或 iOS 的拷贝。但对鸿蒙 V2 的分析表明,它事实上是 Android 的拷贝,华为甚至连 Android 的名字都没有从系统中替换掉。编程随想注:
对此王成录在接受采访时回应称:“并不是所有 Android 代码都是 Google 开发的,绝大部分代码来自开源社区。鸿蒙也会吸收社区的优秀技术和代码,用了 AOSP(Android 开源项目)的开源代码,就判断鸿蒙是 Android 换了皮,说明这类吐槽者没有太准确理解什么是开源。今年10月,鸿蒙第三阶段的开源代码会上线,来自 AOSP 社区的、由 Google 贡献的代码几乎没有了。”
不管你需不需要,几乎所有家电都能联网的时代正在我们走来。没有冠以“智能”的电视机早就销声匿迹,而大部分所谓的智能电视机还有广告,部分品牌则将没有开屏广告作为卖点。配备了摄像头和麦克风的智能电视容易遭到滥用已是众所周知,它们会将收集的信息发送到厂商的服务器,你根本不知道它们收集了哪些信息。编程随想注:
好消息是,大部分物联网设备使用的是 Wifi 连接,我们至少还可以通过路由器控制它们的行为。但厂商也有应变之道:直接嵌入蜂窝调制解调器和 SIM 卡,解决不在线的问题。这种现象将会越来越多,它们将会完全脱离用户的有限控制。除了将它们关在【法拉第笼】内,消费者将无能为力。
隐私、监视、跟踪将会无处不在,这就是不请自来的物联网时代。
一年前(2018年初)曝光的 Spectre 和 Meltdown 在信息安全界可以称得上是【划时代】滴!因为其利用的是 CPU 的【设计缺陷】(而且还是【根本性】缺陷)。
......
由于这两个漏洞涉及到 CPU 的【根本性】缺陷,极难搞定(就像两个幽灵,会在未来几年不断困扰 IT 行业)。
Google 演示了实用的 Spectre 概念验证攻击,代码发布在 GitHub 上,演示发布在网站 leaky.page 上。
2018年1月,Google Project Zero 和奥地利格拉茨技术大学的研究人员披露了与预测执行相关的处理器漏洞 Spectre,利用基于时间的旁路攻击,允许恶意进程获得其他程序在内存中的数据。Google 的概念验证攻击针对的是运行在 Linux 系统上的 Chrome 88 的 V8 JS 引擎,使用的 CPU 是英特尔的 Core i7-6500U Skylake。Google 表示,可以进行微调,让攻击能工作在不同的 CPU、浏览器版本和操作系统上,包括苹果的 M1 ARM CPU。概念验证攻击能以 1kB/s 的速度泄露数据。Google 称,虽然浏览器开发商已经实现了网站隔离等缓解措施,但这并不能阻止 Spectre 的漏洞利用,只是防止保存在内存中的敏感数据被攻击者读取。预防 Spectre 攻击还需要 Web 开发者部署应用程序级别的缓解措施。
伊利诺伊香槟的三位研究人员在预印本网站 arXiv 发表论文,披露了针对英特尔 CPU 的最新侧信道攻击,该攻击被命名为 Lord of the Ring(s)。
随着芯片上的功能模块越来越多,英特尔为其 CPU 引入了片内总线,以实现各个模块之间的高速通信,它先后引入了 Ring Bus 和 Mesh Bus。最新侧信道攻击针对的就是 Ring Bus 的环形总线。研究人员首先逆向工程了 Ring Bus 的通信协议,设法构建了一个跨核心的隐蔽信道,利用环争用的细粒度时态模式去推动应用程序的秘密。从有漏洞的 EdDSA 和 RSA 实现中提取出密钥比特。对于 AMD 的 Zen 架构使用的片内总线 Infinity Fabric,研究人员表示需要进一步的研究,但相信他们的技术能应用于其它平台。
家庭和小型办公安保公司 ADT 的雇员 Telesforo Aviles 承认在五年时间里超过9,600次未经许可访问了200名客户的家庭监控探头。
Aviles 称:如果客户家中有吸引力的女性,他会在安装时将自己的邮件地址加入到可访问客户 ADT Pulse 账号的名单中,之后会浏览探头观看性方面的活动。他称会在客户做爱时观看裸女。他承认了一项计算机欺诈罪名,一项侵入性可视化记录罪名,面临最高5年徒刑。
Google Security Blog 宣布:它正致力于用 Rust 语言重新实现关键安全软件组件。Google 称,内存安全相关的漏洞在安全领域一直占主要位置。
微软的研究显示,通过安全更新修复的漏洞七成是内存安全问题。对 curl 安全问题的分析显示,95个 bug 中的53个可以通过使用内存安全语言防止。
Google 正与 Internet Security Research Group 合作用 Rust 语言重新实现安全组件,包括用 Rust 为 curl 开发 HTTP 和 TLS 后端,为 Apache httpd 项目开发 TLS 库。
Google 官方安全博客宣布:Android 加入了对 Rust 语言的支持。Google 称,七成的 Android 高危漏洞与内存相关,而内存安全语言是解决这一问题的最有效方法。Google 宣布 Android Open Source Project(AOSP)现在支持用 Rust 语言开发操作系统。
Java 和 Kotlin 是开发 Android 应用的最佳选择,但 Java 和 Kotlin 无法用于开发操作系统底层。操作系统的底层需要用系统级编程语言 C、C++ 和 Rust 来开发。对 C 和 C++ 来说,开发者负责管理内存,但管理内存时因代码库的复杂性开发者很容易犯错。Rust 语言利用编译时检查和运行时检查确保内存安全,同时它还提供了比拟 C 和 C++ 语言的性能。
Google 称:用 Rust 重写数千万行 C/C++ 代码是不可行的。对内存相关 bug 的分析显示,大部分 bug 都是近一两年内引入的,因此 Rust 将主要用于新的开发而不是重写成熟的 C/C++ 代码。
Google 资助了 Internet Security Research Group(ISRG)的一个项目:用 Rust 语言为 Apache HTTP web server 项目开发安全模块 mod_tls。
在 Apache web server 中,mod_ssl 用于支持建立 HTTPS 连接所需的加密操作,它是用 C 语言开发的。
新的 mod_tls 模块将使用 Rust 语言开发,领导该项目开发的是软件咨询公司 Greenbytes 的创始人和 Apache HTTP Server 开发者 Stefan Eissing。ISRG 希望,在完成开发之后 Apache HTTP web server 团队将采用 mod_tls 作为默认模块,取代年代悠久且不安全的 mod_ssl。
近日,Linux 邮件列表中的 Rust-for-linux 上公布了 Rust 支持登陆 Linux-Next 的消息。
Rust 是一个注重安全和性能的语言,并且在今年初成立了新的 Rust 基金会以支持其发展。而在 Linux 内核开发者中,关于使用 Rust 来编写新的设备驱动程序的讨论已经持续了很长时间。本周,对于 Rust 的初步支持终于登陆 Linux-Next 分支。虽然目前还没有一个完整的 Rust 内核驱动,但已经可以在 Linux-Next 分支上看到关于 Rust 的文档、Rust 代码目录和一个用 Rust 实现的字符驱动程序例子。
这种支持需要系统上存在 Rust 编译器(rustc),因此,当前重点关注的体系结构应该是 ARM64 和 x86_64。此外,内核支持也需要一个最新的构建 Rust 的工具链。
虽然 Rust 支持现在已经登录 Linux-Next 分支,但尚不清楚何时并入主线。一般来说,Linux-Next 中的工作会一直持续到下一个周期,但如果其仍是一个正在进行中的工作,也有可能在 Linux-Next 中停留更长时间。
B
表示【字节】;小写字母 b
表示【比特】。K
表示 1000;M
表示 1000x1000(1百万)K
表示 1024(2的10次方);M
表示 1024x1024(2的20次方)i
。比如说:Ki
表示 1024;Mi
表示 1024x1024 ...... 以此类推。★基本概念那个章节所说的“逻辑信道”。
头部如果你收过快递,可以把“网络数据包”与“快递包裹”作一个对照——
身体(也称作“有效载荷”)
尾部(注:很多协议没有尾部)
层次 | 中文名 | 洋文名 |
---|---|---|
第7层 | 应用层 | Application Layer |
第6层 | 表示层 | Presentation Layer |
第5层 | 会话层 | Session Layer |
第4层 | 传输层 | Transport Layer |
第3层 | 网络层 | Network Layer |
第2层 | 数据链路层 | Data Link Layer |
第1层 | 物理层 | Physical Layer |
224 = 16777216
),碰巧一样的概率很低。arp
命令,可以用来诊断与“MAC 地址”相关的信息。比如:列出当前子网中其它主机的 IP 地址以及对应的 MAC 地址。这个命令在 Linux & Mac OS 上也有。★杂项的章节,会专门聊一下“代理”这个话题)
这个 IP 地址对应的主机已经关机
这个 IP 地址对应的主机已经断线
这个 IP 地址对应的主机拒绝响应 ICMP 协议
从你本机到这个 IP 地址之间,有某个防火墙拦截了 ICMP 协议
......
tracert
。在 POSIX(Linux&UNIX)上通常叫 traceroute
netstat
命令,可以查看当前系统的 TCP/UDP 状态(包括当前系统开启了哪些监听端口)。ss
命令,功能更强(但这个命令在 Windows 上默认没有)nmap
的功能很强,“端口扫描”只是其功能之一。TCP 代理(TCP 端口转发)——4层(传输层)
SOCKS 代理——5层(会话层)
HTTP 代理——7层(应用层)
......
路由器充当网关——3层(网络层)
3层交换机充当网关——3层(网络层)
4层交换机充当网关——4层(传输层)
应用层防火墙充当网关——7层(应用层)
代理服务器充当网关——(取决于代理的层次,参见前一个小节)
......
中文书名 | 英文书名 | 作者 |
---|---|---|
《计算机网络》 | 《Computer Networks》 | Andrew Tanenbaum David Wetherall |
《计算机网络——自顶向下方法》 | 《Computer Networking——A Top-Down Approach》 | James Kurose Keith Ross |
《TCP-IP 详解》 | 《TCP-IP Illustrated》 | Richard Stevens |
《UNIX 网络编程》 | 《UNIX Network Programming》 | Richard Stevens |
《HTTP 权威指南》 | 《HTTP——The Definitive Guide》 | David Gourley Brian Totty Marjorie Sayer Sailu Reddy Anshu Aggarwal |