蚊章汇 - OpenSSL
type: channel
link: https://linuxcn.bwsl.wang/tag/OpenSSL/
items: 硬核观察 #1123 无人察觉：窃取密码的 Linux 木马已偷偷下载 3 年
items: 硬核观察 #809 安卓占所有操作系统份额的 40% 以上
items: 硬核观察 #681 首颗树莓派卫星完成了创纪录的飞行
items: 硬核观察 #388 Firefox 92 发布
items: 硬核观察 #306 国产的全功能 Linux 平板电脑 JingPad A1 众筹成功
items: 用 OpenSSL 替代 Telnet
items: 使用 OpenSSL 加密和解密文件
items: 硬核观察 | Grafana、Loki 和 Tempo 改用 AGPLv3 许可证
items: 如何使用 OpenSSL：哈希值、数字签名等
items: OpenSSL 精粹：SSL 证书、私钥和 CSR

硬核观察 #1123 无人察觉：窃取密码的 Linux 木马已偷偷下载 3 年
type: item
date: 2023-09-14T03:55:41+08:00
description: 无人察觉：窃取密码的 Linux 木马已偷偷下载 3 年安全研究人员报告，一个下载网站间隔性地向 Linux 用户提供恶意软件，盗取密码和其他敏感信息长达三年多，直到最后销声匿迹。该网站提供了一个名为 “免费下载管理器“ 的 Linux 软件。从 2020 年开始，该网站有时会将用户重定向到另外一个恶意域名，提供该应用的恶意版本，它会在目标设备上安装后门。该后门会窃取包括系统信息、浏览历史、保存的密码、加密货币钱包文件以及云服务凭证等信息。这个恶意重定向于 2022 年结束，原因不明。消息来源：Ars Technica老王点评：与 Windows 相比，Linux 恶意软件很少被发现，这往往让人们更加掉以轻心，现在检查一下你的 Linux 桌面，或许为时不晚。谷歌称它的搜索引擎是最好的在周二开庭的谷歌反垄断诉讼案上，司法部和来自美国各州和地区的 52 位总检察长指控谷歌支付数十亿美元，以换取被设置为手机和网络浏览器的默认搜索引擎，从而非法维持其垄断地位。法官称，谷歌至少在 2010 年就已成为垄断企业，如今控制着超过 89% 的在线搜索市场。谷歌的律师表示，人们选择谷歌作为浏览器和智能手机的默认搜索引擎“是因为谷歌为他们带来了价值，而不是因为他们不得不使用谷歌”。并举例，微软在 Windows 上的默认搜索引擎是必应，但用户切换到谷歌是因为它是搜索市场上更好的产品。而且，谷歌的律师表示，Safari 和 Firefox 通过默认搜索引擎交易换取收入分成，帮助了它们的创新。消息来源：彭博社老王点评：谷歌是不是最好的，和它是不是非法维持垄断没有关系。让我们看看这起新时代的 IT 巨头垄断案将如何走向。OpenSSL 1.1.1 已经走到了生命的尽头OpenSSL 1.1.1 最初于 2018 年作为开源安全通信库的长期支持版本发布。当时，其背后的团队宣称，该版本将至少支持五年，也就是到今年。要想继续获得 OpenSSL 的支持，就必须升级到 OpenSSL 3.0 LTS 或最新的 3.1 版本。但迁移到更高版本的 OpenSSL 会带来风险和危险，一些依赖 OpenSSL 的服务可能会对更新反应迟钝，尤其是那些硬编码 OpenSSL 服务的物联网组件。实际上，企业宁可花钱让 OpenSSL 维护者和作者继续使用发霉的旧代码，比如，可以购买一份针对企业的价值 5 万美元的年度支持合同。消息来源：The Register老王点评：作为一个安全基础组件，这么干净利索的停止服务支持，总是有些不负责任。

硬核观察 #809 安卓占所有操作系统份额的 40% 以上
type: item
date: 2022-11-03T13:18:47+08:00
description: 安卓占所有操作系统份额的 40% 以上Statcounter 是一个网站分析服务，在 150 万个网站上安装了跟踪代码，记录每个网站的数十亿次页面浏览。据 Statcounter 最新数据，安卓占全球所有操作系统份额为 42.37%，Windows 30.11%、iOS 17.6%、OS X 6.24%、除了安卓之外的 Linux 1.04%。而就桌面市场而言，Windows 占 75.93%，OS X 15.74%，Linux 2.6%，Chrome OS 2.38%。对于移动市场，安卓占 70.96%，iOS 28.43%。消息来源：Statcounter老王点评：安卓的成功，也是移动操作系统的成功，也是广义上的 Linux 的成功。英国准备立法废除传真机传真机由施乐公司在 1964 年商业化，1980 年代起被世界各地的企业广泛使用，如今已被电子邮件、扫描仪、云端传真和即时通讯服务所取代。虽然传真机早已过时，但英国卫生服务机构仍在大量使用它，英国国家医疗服务系统现在还有数百台传真机。英国通信监管机构 Ofcom 表示它准备修订电信规则淘汰传真机。消息来源：The Register老王点评：之前利用互联网发送传真都被视作违法，而现今，几乎没有人用传真了。OpenSSL 3 漏洞补丁释出，危险程度比预想要轻由于 OpenSSL 3 出现了严重安全漏洞，原计划在 10 月底发布的 Fedora Linux 37 延迟发布。现在，OpenSSL 3 发布了补丁，修复了两个缓冲溢出漏洞。漏洞等级从之前被认为与“心脏流血”漏洞相当的“超危”降为“高危”。这两个漏洞影响所有 OpenSSL 3.x 系列，不过目前主要使用的版本 OpenSSL 1.x 不受影响。消息来源：Phoronix老王点评：还好，不过互联网安全需要更可靠安全的 SSL 实现。

硬核观察 #681 首颗树莓派卫星完成了创纪录的飞行
type: item
date: 2022-06-29T03:34:09+08:00
description: 首颗树莓派卫星完成了创纪录的飞行第一颗使用树莓派 Zero W 作为飞行计算机的迷你卫星于 5 月重新进入地球大气层，在太空中完成了创纪录的 117 天。这颗卫星于 2022 年 1 月从国际空间站部署，是由美国犹他州立大学的大学生们开发的。它是一个立方体模块，尺寸只有 10 厘米见方，使用现成的组件建造。这颗卫星 80% 以上的软件是用 Python 编写的，并且有个装置检查其“心跳”，如果出现问题就重启解决，事实证明“重启试试”在太空同样有效。其主要目的是测试一个实验性的充气稳定系统，成功地证明了小型航天器可以在轨道上自我稳定。消息来源：ZDNet老王点评：看来放个卫星也没什么难的，希望以后我们自己的空间站上也可以让同学们制造卫星放出去。微软的内部 Linux 发行版支持内核实时补丁上个月，微软发布了 CBL-Mariner 2.0 的第一个生产版本，这个微软内部的 Linux 发行版，用于支持从微软 Azure 到 WSL 用例等服务。CBL-Mariner 2.0 上周末进行了一次相当大的月度更新，增加了 Kpatch 以支持内核补丁，以及为内核启用实时补丁。消息来源：Phoronix老王点评：我感觉微软的这个内部发行版不声不响的也发展的挺快，真有一天抢了后 CentOS 市场，我觉得也不会太吃惊。刚刚发布的 OpenSSL 3.0.4 可能存在一个比心脏流血更严重的漏洞6 月 21 日发布的 OpenSSL 3.0.4 是为了解决一个命令注入漏洞，该漏洞在之前的补丁中没有完全解决。但这个版本本身需要进一步修复，安全研究人员称，它“容易受到远程内存损坏的影响，攻击者可以轻而易举地触发它”，可以被利用来在其中一台设备上运行任意的恶意代码。如果这个缺陷可以被远程利用（现在还不确定），它可能比心脏流血漏洞更严重。好消息是这个漏洞只影响英特尔 2016 年至 2022 年初发布的带有 AVX512 的某些 x64 芯片。消息来源：The Register老王点评：虽然可能影响面有限，但是一旦发布新的版本就赶快升级吧。

硬核观察 #388 Firefox 92 发布
type: item
date: 2021-09-08T19:25:00+08:00
description: Firefox 92 发布Mozilla 释出了 Firefox 92。主要新特性包括：使用 HTTPS DNS 记录自动升级到 HTTPS，如果一个域名支持 HTTPS 那么在浏览器上输入该域名的 HTTP 地址将会自动升级到 HTTPS；添加了对 AVIF 图像格式的默认支持；全域色彩级支持视频播放；此外还有 bug 和安全修正等等。其实这些都不重要，重要的是，如何挽回老用户的心。OpenSSL 3.0 正式发布经过许多开发快照和三年的工作，OpenSSL 发布了 3.0。OpenSSL 3.0 从之前的 OpenSSL 和 SSLeay 双许可证转为在 Apache 2.0 许可证下发布。与之前的 OpenSSL 1.1 相比，OpenSSL 3.0 具有更大的可扩展性，对陈旧代码进行了清理和废弃以及架构上的改进。它迁移到一个基于提供者的架构，支持 Linux 内核的 TLS、完全“可插拔”的 TLSv1.3 组。OpenSSL 的上古代码终于迎来了新的更新。ATM 机加速退场，一年淘汰 6.54 万台短短几年，ATM 机已经从“银行业最有用的发明”逐渐没落。根据央行数据显示，截至 2021 年二季度末，ATM 机具 98.67 万台，相较同期的 105.21 万台一年减少了 6.54 万台。全国 ATM 机数量高峰时期在 2018 年末达 111.08 万台。而从 2019 年开始，ATM 数量开始缩水。信息化带来的影响，可能现在很多人都不带钱包、现金了吧。

硬核观察 #306 国产的全功能 Linux 平板电脑 JingPad A1 众筹成功
type: item
date: 2021-06-18T21:02:00+08:00
description: 国产的全功能 Linux 平板电脑 JingPad A1 众筹成功对于动手能力强的个人用户来说，确实可以尝试在手机或平板电脑上安装“适当的” Linux 发行版。但当前正在 Indiegogo 上众筹的 JingPad Linux 平板，或许是一个更切实际的选择。它的众筹价格为 549 美元，首日就达成了超过五倍的众筹目标。它采用的是之前发布的国产操作系统 JingOS。虽然有着类似苹果 iPadOS 的外观，但 JingOS 的底层还是基于开源的 Linux 桌面。得益于成熟的 Linux 桌面，用户能够轻松体验 LibreOffice、GIMP 等常用软件，以及流行的开发者 / 系统管理工具。看起来不错，但是感觉价格并不便宜，希望我们可以尽早做个测评分享给大家。OpenSSL 3.0 候选版本发布经过了十几个 alpha 版本后，OpenSSL 3.0 今天发布了候选版本，它将在下季度发布正式版本。新的版本号跳过了 2.x，直接从 1.1.x 到了 3.0。OpenSSL 3.0 已经迁移到一个基于提供者的架构，以允许更大的灵活性。完全可插拔的 TLSv1.3组，新的编码器和解码器支持，完整的证书管理协议（CMP）实现，新的 API，以及对内核 TLS 的集成支持是 OpenSSL 3.0 的许多大变化之一。另外 OpenSSL 3.0 现在是在 Apache 2.0 许可证下授权的，而之前是采用 “OpenSSL 许可证”和 “Original SSLeay 许可证”双许可证授权的。在得到更多的关注和支持之后，OpenSSL 开始奋起直追，从公布的特性看，应该值得这个大版本跳跃。联想 ThinkPad 发布驱动支持在 Linux 设置 BIOS联想发布了一个新的 Think-LMI 驱动，即将进入 Linux 主线内核。该驱动允许在支持 WMI 接口的ThinkPad 及其它联想系统上查看和改变 BIOS/固件设置。支持读取/配置的 BIOS 选项通过 sysfs 的 /sys/class/firmware-attributes/* 暴露给用户空间。该驱动预计会进入 Linux 5.14。通过 sysfs 公开 BIOS 设置并不是一个全新的概念。从去年开始，戴尔率先为 Linux 开展了固件属性的工作。虽然不是开源的 BIOS 和固件，但是能在 Linux 内设置感觉是一种进步。

用 OpenSSL 替代 Telnet
type: item
date: 2021-05-11T20:00:22+08:00
description: Telnet 缺乏加密，这使得 OpenSSL 成为连接远程系统的更安全的选择。telnet 命令是最受欢迎的网络故障排除工具之一，从系统管理员到网络爱好者都可以使用。在网络计算的早期，telnet 被用来连接到一个远程系统。你可以用 telnet 访问一个远程系统的端口，登录并在该主机上运行命令。由于 telnet 缺乏加密功能，它在很大程度上已经被 OpenSSL 取代了这项工作。然而，作为一种智能的 ping，telnet 的作用仍然存在（甚至在某些情况下至今仍然存在）。虽然 ping 命令是一个探测主机响应的好方法，但这是它能做的 全部。另一方面，telnet 不仅可以确认一个活动端口，而且还可以与该端口的服务进行交互。即便如此，由于大多数现代网络服务都是加密的，telnet 的作用可能要小得多，这取决于你想实现什么。OpenSSL s\_client对于大多数曾经需要 telnet 的任务，我现在使用 OpenSSL 的 s_client 命令。（我在一些任务中使用 curl，但那些情况下我可能无论如何也不会使用 telnet）。大多数人都知道 OpenSSL 是一个加密的库和框架，但不是所有人都意识到它也是一个命令。openssl 命令的 s_client 组件实现了一个通用的 SSL 或 TLS 客户端，帮助你使用 SSL 或 TLS 连接到远程主机。它是用来测试的，至少在内部使用与该库相同的功能。安装 OpenSSLOpenSSL 可能已经安装在你的 Linux 系统上了。如果没有，你可以用你的发行版的软件包管理器安装它：$ sudo dnf install openssl 在 Debian 或类似的系统上：$ sudo apt install openssl 安装后，验证它的响应是否符合预期：$ openssl version OpenSSL x.y.z FIPS 验证端口访问最基本的 telnet 用法是一个看起来像这样的任务：$ telnet mail.example.com 25 Trying 98.76.54.32... Connected to example.com. Escape character is '^]'. 在此示例中，这将与正在端口 25（可能是邮件服务器）监听的任意服务打开一个交互式会话。只要你获得访问权限，就可以与该服务进行通信。如果端口 25 无法访问，连接就会被拒绝。OpenSSL 也是类似的，尽管通常较少互动。要验证对一个端口的访问：$ openssl s_client -connect example.com:80 CONNECTED(00000003) 140306897352512:error:1408F10B:SSL [...] no peer certificate available No client certificate CA names sent SSL handshake has read 5 bytes and written 309 bytes Verification: OK New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) 但是，这仅是目标性 ping。从输出中可以看出，没有交换 SSL 证书，所以连接立即终止。为了充分利用 openssl s_client，你必须连接加密的端口。交互式 OpenSSLWeb 浏览器和 Web 服务器进行交互，可以使指向 80 端口的流量实际上被转发到 443，这是保留给加密 HTTP 流量的端口。知道了这一点，你就可以用 openssl 命令连接到加密的端口，并与在其上运行的任何网络服务进行交互。首先，使用 SSL 连接到一个端口。使用 -showcerts 选项会使 SSL 证书打印到你的终端上，一开始的输出要比 telnet 要冗长得多：$ openssl s_client -connect example.com:443 -showcerts [...] 0080 - 52 cd bd 95 3d 8a 1e 2d-3f 84 a0 e3 7a c0 8d 87 R...=..-?...z... 0090 - 62 d0 ae d5 95 8d 82 11-01 bc 97 97 cd 8a 30 c1 b.............0. 00a0 - 54 78 5c ad 62 5b 77 b9-a6 35 97…

使用 OpenSSL 加密和解密文件
type: item
date: 2021-05-08T00:38:38+08:00
description: OpenSSL 是一个实用工具，它可以确保其他人员无法打开你的敏感和机密消息。加密是对消息进行编码的一种方法，这样可以保护消息的内容免遭他人窥视。一般有两种类型：密钥加密或对称加密公钥加密或非对称加密 密钥加密 secret-key encryption 使用相同的密钥进行加密和解密，而 公钥加密 public-key encryption 使用不同的密钥进行加密和解密。每种方法各有利弊。密钥加密速度更快，而公钥加密更安全，因为它解决了安全共享密钥的问题，将它们结合在一起可以最大限度地利用每种类型的优势。公钥加密公钥加密使用两组密钥，称为密钥对。一个是公钥，可以与你想要秘密通信的任何人自由共享。另一个是私钥，应该是一个秘密，永远不会共享。公钥用于加密。如果某人想与你交流敏感信息，你可以将你的公钥发送给他们，他们可以使用公钥加密消息或文件，然后再将其发送给你。私钥用于解密。解密发件人加密的消息的唯一方法是使用私钥。因此，它们被称为“密钥对”，它们是相互关联的。如何使用 OpenSSL 加密文件OpenSSL 是一个了不起的工具，可以执行各种任务，例如加密文件。本文使用安装了 OpenSSL 的 Fedora 计算机。如果你的机器上没有，则可以使用软件包管理器进行安装：alice $ cat /etc/fedora-release Fedora release 33 (Thirty Three) alice $ alice $ openssl version OpenSSL 1.1.1i FIPS 8 Dec 2020 alice $ 要探索文件加密和解密，假如有两个用户 Alice 和 Bob，他们想通过使用 OpenSSL 交换加密文件来相互通信。步骤 1：生成密钥对在加密文件之前，你需要生成密钥对。你还需要一个 密码短语 passphrase ，每当你使用 OpenSSL 时都必须使用该密码短语，因此务必记住它。Alice 使用以下命令生成她的一组密钥对：alice $ openssl genrsa -aes128 -out alice_private.pem 1024 此命令使用 OpenSSL 的 genrsa 命令生成一个 1024 位的公钥/私钥对。这是可以的，因为 RSA 算法是不对称的。它还使用了 aes128 对称密钥算法来加密 Alice 生成的私钥。输入命令后，OpenSSL 会提示 Alice 输入密码，每次使用密钥时，她都必须输入该密码：alice $ openssl genrsa -aes128 -out alice_private.pem 1024 Generating RSA private key, 1024 bit long modulus (2 primes) ..........+++++ ..................................+++++ e is 65537 (0x010001) Enter pass phrase for alice_private.pem: Verifying - Enter pass phrase for alice_private.pem: alice $ alice $ alice $ ls -l alice_private.pem -rw-------. 1 alice alice 966 Mar 22 17:44 alice_private.pem alice $ alice $ file alice_private.pem alice_private.pem: PEM RSA private key alice $ Bob 使用相同的步骤来创建他的密钥对：bob $ openssl genrsa -aes128 -out bob_private.pem 1024 Generating RSA private key, 1024 bit long modulus (2 primes) ..................+++++ ............................+++++ e is 65537 (0x010001) Enter pass phrase for bob_private.pem: Verifying - Enter pass phrase for bob_private.pem: bob $ bob $ ls -l bob_private.pem -rw-------. 1 bob bob 986 Mar 22 13:48 bob_private.pem bob $ bob $ file bob_private.pem bob_private.pem: PEM RSA private key…

硬核观察 | Grafana、Loki 和 Tempo 改用 AGPLv3 许可证
type: item
date: 2021-04-22T05:43:00+08:00
description: Grafana、Loki 和 Tempo 改用 AGPLv3 许可证过去几年，多个知名的开源项目如 Elastic、Redis Labs 和 MongoDB 出于盈利考虑而修改许可证，切换到非自由的商业授权许可证（SSPL）。开发 Grafana 以及 Loki 和 Tempo 等开源项目的 Grafana Labs 公司决定不这么做，它宣布旗下核心开源项目采用的许可证从 Apache License 2.0 切换到 AGPL v3，允许其他人自由修改和提供服务，但修改的版本需要回馈上游。Grafana Labs 公司表示，它这么做是试图在开源和社区的“价值创造”以及商业化策略的“价值获取”上取得平衡。这也是一个不错的尝试，就是不知道 AGPL 是否能适当的保护开源项目，并与商业组织取得合适的平衡。明尼苏达大学开发者被禁止向 Linux 内核提供代码明尼苏达大学的 Qiushi Wu（博士生）和 Kangjie Lu（助理教授）提交了一篇研究论文《通过伪装的提交在开源软件中隐蔽地引入漏洞》，以看似有益的提交实际上引入了其他关键问题。而根据最近 Linux 内核接到的一些补丁来看，他们选择了 Linux 内核项目来进行他们的实验。负责维护 Linux 内核的格雷（GKH）是仅次于 Linus 的负责人，他对这种行为进行了强烈谴责！但是发送这些补丁的人认为这只是他们写的一个静态分析器提交的补丁，最多只是质量不佳。格雷认为这些是谎言，愤怒之下决定禁止该大学向 Linux 内核提交代码，并撤销了他们之前提交的补丁。简直是够了，Linux 内核不是试验场，供任何人随意摆弄。Google 资助开发 OpenSSL 的替代品 Rustls许多 SSL/TLS 库由于是用 C 语言编写的，所以安全问题由来已久。通过使用 Rust 开发的 OpenSSL 替代品 Rustls，开发人员可以尽可能确保代码是内存安全的，这将大大减少安全问题的数量。互联网安全研究组（ISRG）宣布，谷歌已经为 Rust 开发者提供了资金，以对 Rustls 进行改进。ISRG 将使用 Rustls 来使 Apache HTTP 服务器更加安全。期待看到 Rustls 能证明 Rust 的成功。

如何使用 OpenSSL：哈希值、数字签名等
type: item
date: 2020-08-13T23:03:00+08:00
description: 通过 OpenSSL 深入了解密码学的细节：哈希值、数字签名、数字证书等。本系列的第一篇文章通过 OpenSSL 库和命令行实用程序介绍了哈希、加密/解密、数字签名和数字证书。这第二篇文章将对细节进行深入探讨。让我们从计算中无处不在的哈希开始，并考虑是什么使哈希函数具备密码学意义。密码学哈希OpenSSL 源代码的下载页面包含了一个带有最新版本的表格。每个版本都有两个 哈希值 hash ：160 位 SHA1 和 256 位 SHA256。这些值可以用来验证下载的文件是否与存储库中的原始文件相匹配：下载者在本地重新计算下载文件的哈希值，然后将结果与原始文件进行比较。现代系统有计算这种哈希值的实用程序。例如，Linux 有 md5sum 和 sha256sum。OpenSSL 本身也提供了类似的命令行实用程序。哈希值被用于计算的许多领域。例如，比特币区块链使用 SHA256 哈希值作为区块标识符。挖比特币就是生成一个低于指定阈值的 SHA256 哈希值，也就是至少有 N 个前导零的哈希值。（N 的值可以上升或下降，这取决于特定时间的挖矿生产力）。作为一个兴趣点，如今的矿机是为并行生成 SHA256 哈希值而设计的硬件集群。在 2018 年的一个高峰期，全球的比特币矿工每秒产生约 7500 万个 太哈希值 terahash —— 这真是一个不可思议的数字。网络协议也使用哈希值（在这里通常叫做“ 校验和 checksum ”）来支持消息的完整性；也就是说，保证收到的消息与发送的消息是一样的。消息发送者计算消息的校验和，并将结果与消息一起发送。当消息到达时，接收方重新计算校验和。如果发送的校验和与重新计算的校验和不一致，那么消息在传输过程中可能出现了一些问题，或者发送的校验和出现了问题，或者两者都出现了问题。在这种情况下，应该重新发送消息和它的校验和，或者至少应该触发一个错误情况。（如 UDP 这样的低级网络协议不会理会校验和。）哈希的其他例子大家都很熟悉。比如一个网站，要求用户用密码进行验证，用户在浏览器中输入密码，然后，他们通过 HTTPS 连接到服务器，密码从浏览器加密发送到服务器。一旦密码到达服务器，就会被解密，然后进行数据库表的查询。在这个查询表中应该存储什么？存储密码本身是有风险的。风险要小得多的方式是存储一个由密码生成的哈希值，也许在计算哈希值之前“加一些 盐 salt （额外的位）改善口味”。你的密码可能会被发送到 Web 服务器上，但网站可以向你保证，密码不会存储在那里。哈希值还出现在安全的各个领域。例如， 基于哈希值的消息认证码 hash-based message authentication code （HMAC）使用一个哈希值和一个秘密的 加密密钥 cryptographic key 来认证通过网络发送的消息。HMAC 码轻量级且易于在程序中使用，在 Web 服务中很受欢迎。一个 X509 数字证书包括一个称为 指纹 fingerprint 的哈希值，它可以方便证书验证。一个存放于内存中的 可信存储 truststore 可以实现为一个以这种指纹为键的查找表 —— 作为一个支持恒定查找时间的 哈希映射 hash map 。来自传入的证书的指纹可以与可信存储中的密钥进行比较，以确定是否匹配。 密码学哈希函数 cryptographic hash function 应该具有什么特殊属性？它应该是 单向 one-way 的，这意味着很难被逆转。一个加密哈希函数应该是比较容易计算的，但是计算它的反函数（将哈希值映射回输入位串的函数）在计算上应该是困难的。下面是一个描述，用 chf 作为加密哈希函数，我的密码 foobar 作为样本输入。 +---+ foobar—>|chf|—>hash value ## 简单直接 +--–+ 相比之下，逆向操作是不可行的： +-----------+ hash value—>|chf inverse|—>foobar ## 棘手困难 +-----------+ 例如，回忆一下 SHA256 哈希函数。对于一个任意长度为 N > 0 的输入位串，这个函数会生成一个 256 位的固定长度的哈希值；因此，这个哈希值甚至不会反映出输入位串的长度 N，更不用说字符串中每个位的值了。顺便说一下，SHA256 不容易受到 长度扩展攻击 length extension attack 。唯一有效的逆向工程方法是通过蛮力搜索将计算出的 SHA256 哈希值逆向返回到输入位串，这意味着需要尝试所有可能的输入位串，直到找到与目标哈希值匹配的位串。这样的搜索在 SHA256 这样一个完善的加密哈希函数上是不可行的。现在，最后一个回顾的知识点是 有序 in order 。加密哈希值是统计学上的唯一，而不是无…

OpenSSL 精粹：SSL 证书、私钥和 CSR
type: item
date: 2020-06-08T06:58:00+08:00
description: 介绍OpenSSL 是一个多功能的命令行工具，可以用于与 公钥基础设施 （ Public Key Infrastructure ） （PKI）和 HTTPS（HTTP over TLS）相关的大量任务。这本小抄风格的指南提供了 OpenSSL 命令的快速参考，这些命令在常见的日常场景中非常有用。这包括生成私钥、 证书签署请求 （ certificate signing request ） （CSR）和证书格式转换的 OpenSSL 示例，但它并没有涵盖 OpenSSL 的所有用途。如何使用本指南如果你不熟悉证书签署请求（CSR），请阅读第一部分。除了第一部分，本指南采用了简单的小抄格式：自带了命令行代码片段。跳到与你准备完成的任务相关的任何部分。大多数命令都是单行的，为了清晰起见，已经扩展到多行（使用 \ 符号）。关于证书签署请求（CSR）如果你想从 证书颁发机构 （ certificate authority ） （CA）那里获得 SSL 证书，你必须生成一个 证书签署请求 （ certificate signing request ） （CSR）。一个 CSR 主要是由一个密钥对的公钥和一些附加信息组成。当证书被签署时，这两部分都会被插入到证书中。每当你生成一个 CSR 时，你会被提示提供有关证书的信息。这些信息被称为 区分名称 （ Distinguised Name ） （DN）。DN 中的一个重要字段是 通用名称 （ Common Name ） （CN），它应该是你打算使用证书的主机的 完全合格域名 （ Fully Qualified Domain Name ） （FQDN）。当创建 CSR 时，也可以通过命令行或文件传递信息来跳过交互式提示。DN 中的其他项目提供了有关你的业务或组织的附加信息。如果你是从证书机构购买 SSL 证书，通常要求这些附加字段（如“ 组织 （ Organization ） ”）准确地反映你的组织的详细信息。下面是一个 CSR 信息提示的例子：--- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:Brooklyn Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company Organizational Unit Name (eg, section) []:Technology Division Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com Email Address []:如果你想非交互式地回答 CSR 信息提示，你可以通过在任何请求 CSR 信息的 OpenSSL 命令中添加 -subj 选项来实现。这里是该选项的一个例子，使用上面代码块中显示的相同信息：-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"现在你已经了解了 CSR，可以自由跳转到本指南中涵盖你的 OpenSSL 需求的任何一节。生成 CSR本节介绍了与生成 CSR（以及私钥，如果它们还不存在的话）有关的 OpenSSL 命令。CSR 可以用来向证书颁发机构请求 SSL 证书。请记住，你可以通过上一节中提到的 -subj 选项非交互式地添加 CSR 信息。生成一个私钥和一个 CSR如果你想使用 HTTPS（HTTP over TLS）来保护你的 Apache HTTP 或 Nginx Web 服务器的安全，并且你想使用一个证书颁发机构（CA）来颁发 SSL 证书，那么就使用这个方法。生成的 CSR 可以发送给 CA，请求签发由 CA 签名的 SSL 证书。如果你的 CA 支持 SHA-2，请添加 -sha256 选项，用 SHA-2 签署 CSR。这条命令从头开始创建一个 2048 位的私钥（domain.key）和一个 CSR（domain.csr）：openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -out domain.csr回答 CSR 信息提问，完成该过程。选项 -newkey rsa:2048 指定密钥应该是 2048 位，使用 RSA 算法生成。选项 -nodes 指定私钥没有用密码加密。这里没有包含 -new 选项，而是隐含在其中，表示正在…