蚊章汇 - 证书
type: channel
link: https://linuxcn.bwsl.wang/tag/%E8%AF%81%E4%B9%A6/
items: 在 Linux 中解决 “Unacceptable TLS certificate” 的问题
items: OpenSSL 精粹：SSL 证书、私钥和 CSR
items: 自己成为一个证书颁发机构（CA）
items: DNS 和根证书
items: 公钥基础设施和密码学中的私钥的角色
items: 捐赠 Let's Encrypt，共建安全的互联网
items: 在主要浏览器禁用后，SHA-1 使用量得到了下降
items: 使用 openssl 命令行构建 CA 及证书
items: 建立你自己的 CA 服务：OpenSSL 命令行 CA 操作快速指南

在 Linux 中解决 “Unacceptable TLS certificate” 的问题
type: item
date: 2022-02-20T22:06:07+08:00
description: 当涉及到 SSL/TLS 证书时，你可能会遇到各种问题，有些与浏览器有关，有些则是网站后台的问题。其中一个错误是 Linux 中的 “Unacceptable TLS certificate”。不幸的是，对此没有“一劳永逸”的答案。然而，有一些潜在的解决方案，你可以尝试，在此，我打算为你强调这些。你什么时候会遇到这个 TLS 证书问题？在我的例子中，我是在通过终端添加 Flathub 仓库时注意到这个问题的，这个步骤可以让你在 设置 Flatpak 时访问大量的 Flatpak 集合。然而，在安装 Flatpak 应用或通过终端使用来自第三方仓库的 Flatpak 参考文件时，你也可能会遇到这个错误。一些用户在 Linux 上使用他们组织推荐的 VPN 服务工作时注意到这个问题。那么，如何解决这个问题呢？为什么这是一个问题？嗯，从技术上讲，这是两件事中的一个：你的系统不接受该证书（并说它是无效的）。该证书与用户连接的域不匹配。如果是第二种情况，你得联系网站的管理员，从他们那里解决这个问题。但是，如果是第一种情况，你有几种方法来处理它。1、在使用 Flatpak 或添加 GNOME 在线账户时修复 “Unacceptable TLS certificate”如果你试图添加 Flathub 远程或一个新的 Flatpak 应用，并在终端中注意到这个错误，你可以简单地输入：sudo apt install --reinstall ca-certificates 这应该会重新安装受信任的 CA 证书，以防止列表中出现某种问题。在我的例子中，当试图添加 Flathub 仓库时，我遇到了错误，通过在终端输入上述命令解决了这个问题。所以，我认为任何与 Flatpak 有关的 TLS 证书问题都可以用这个方法解决。2、在使用工作 VPN 时修复 “Unacceptable TLS certificate”如果你使用你的组织的 VPN 来访问与工作有关的材料，你可能要把证书添加到你的 Linux 发行版中的可信 CA 列表中。请注意，你需要 VPN 服务或你组织的管理员分享根证书的 .CRT 版本，才能开始使用。接下来，你需要进入 /usr/local/share/ca-certificates 目录。你可以下面创建一个目录，并使用任何名称来标识你组织的证书。然后，将 .CRT 文件添加到该目录。例如，它是 /usr/local/share/ca-certificates/organization/xyz.crt。请注意，你需要有 root 权限来添加证书或在 ca-certificates 目录下创建目录。当你添加了必要的证书，你所要做的就是输入以下命令更新证书支持列表：sudo update-ca-certificates 而且，每当你试图连接到你公司的 VPN 时，你的系统应将该证书视为有效。总结不可接受的 TLS 证书并不是一个常见的错误，但你可以在各种使用情况下发现它，比如连接到 GNOME 在线账户。如果上述两种方法都不能解决这个错误，那么你所连接的域/服务有可能存在配置错误。在这种情况下，你将不得不联系他们来解决这个问题。你是否遇到过这个错误？你是如何解决的？你是否知道这个问题的其他解决方案（有可能是容易操作的）？请在下面的评论中告诉我你的想法。via: https://itsfoss.com/unacceptable-tls-certificate-error-linux/作者：Ankush Das 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

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 选项，而是隐含在其中，表示正在…

自己成为一个证书颁发机构（CA）
type: item
date: 2019-05-31T17:10:51+08:00
description: 为你的微服务架构或者集成测试创建一个简单的内部 CA。传输层安全（TLS）模型（有时也称它的旧名称 SSL）基于 证书颁发机构 certificate authoritie （CA）的概念。这些机构受到浏览器和操作系统的信任，从而签名服务器的的证书以用于验证其所有权。但是，对于内部网络，微服务架构或集成测试，有时候本地 CA更有用：一个只在内部受信任的 CA，然后签名本地服务器的证书。这对集成测试特别有意义。获取证书可能会带来负担，因为这会占用服务器几分钟。但是在代码中使用“忽略证书”可能会被引入到生产环境，从而导致安全灾难。CA 证书与常规服务器证书没有太大区别。重要的是它被本地代码信任。例如，在 Python requests 库中，可以通过将 REQUESTS_CA_BUNDLE 变量设置为包含此证书的目录来完成。在为集成测试创建证书的例子中，不需要长期的证书：如果你的集成测试需要超过一天，那么你应该已经测试失败了。因此，计算昨天和明天作为有效期间隔：>>> import datetime >>> one_day = datetime.timedelta(days=1) >>> today = datetime.date.today() >>> yesterday = today - one_day >>> tomorrow = today - one_day现在你已准备好创建一个简单的 CA 证书。你需要生成私钥，创建公钥，设置 CA 的“参数”，然后自签名证书：CA 证书总是自签名的。最后，导出证书文件以及私钥文件。from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives import hashes, serialization from cryptography import x509 from cryptography.x509.oid import NameOID private_key = rsa.generate_private_key( public_exponent=65537, key_size=2048, backend=default_backend() ) public_key = private_key.public_key() builder = x509.CertificateBuilder() builder = builder.subject_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, 'Simple Test CA'), ])) builder = builder.issuer_name(x509.Name([ x509.NameAttribute(NameOID.COMMON_NAME, 'Simple Test CA'), ])) builder = builder.not_valid_before(yesterday) builder = builder.not_valid_after(tomorrow) builder = builder.serial_number(x509.random_serial_number()) builder = builder.public_key(public_key) builder = builder.add_extension( x509.BasicConstraints(ca=True, path_length=None), critical=True) certificate = builder.sign( private_key=private_key, algorithm=hashes.SHA256(), backend=default_backend() ) private_bytes = private_key.private_bytes( encoding=serialization.Encoding.PEM, format=serialization.PrivateFormat.TraditionalOpenSSL, encryption_algorithm=serialization.NoEncrption()) public_bytes = certificate.public_bytes( encoding=serialization.Encoding.PEM) with open("ca.pem", "wb") as fout: fout.write(private_bytes + public_bytes) wit…

DNS 和根证书
type: item
date: 2019-02-13T21:05:45+08:00
description: 关于 DNS 和根证书你需要了解的内容。由于最近发生的一些事件，我们（Privacy Today 组织）感到有必要写一篇关于此事的短文。它适用于所有读者，因此它将保持简单 —— 技术细节可能会在稍后的文章发布。什么是 DNS，为什么它与你有关？DNS 的意思是 域名系统 Domain Name System ，你每天都会接触到它。每当你的 Web 浏览器或任何其他应用程序连接到互联网时，它就很可能会使用域名。简单来说，域名就是你键入的地址：例如 duckduckgo.com。你的计算机需要知道它所导向的地方，会向 DNS 解析器寻求帮助。而它将返回类似 176.34.155.23 这样的 IP —— 这就是连接时所需要知道的公开网络地址。 此过程称为 DNS 查找。这对你的隐私、安全以及你的自由都有一定的影响：隐私由于你要求解析器获取域名的 IP，因此它会确切地知道你正在访问哪些站点，并且由于“物联网”（通常缩写为 IoT），甚至它还知道你在家中使用的是哪个设备。安全你可以相信解析器返回的 IP 是正确的。有一些检查措施可以确保如此，在正常情况下这一般不是问题。但这些可能措施会被破坏，这就是写作本文的原因。如果返回的 IP 不正确，你可能会被欺骗引向了恶意的第三方 —— 甚至你都不会注意到任何差异。在这种情况下，你的隐私会受到更大的危害，因为不仅会被跟踪你访问了什么网站，甚至你访问的内容也会被跟踪。第三方可以准确地看到你正在查看的内容，收集你输入的个人信息（例如密码）等等。你的整个身份可以轻松接管。自由审查通常是通过 DNS 实施的。这不是最有效的方法，但它非常普遍。即使在西方国家，它也经常被公司和政府使用。他们使用与潜在攻击者相同的方法；当你查询 IP 地址时，他们不会返回正确的 IP。他们可以表现得就好像某个域名不存在，或完全将访问指向别处。DNS 查询的方式由你的 ISP 提供的第三方 DNS 解析器大多数人都在使用由其互联网接入提供商（ISP）提供的第三方解析器。当你连接调制解调器时（LCTT 译注：或宽带路由器），这些 DNS 解析器就会被自动取出，而你可能从来没注意过它。你自己选择的第三方 DNS 解析器如果你已经知道 DNS 意味着什么，那么你可能会决定使用你选择的另一个 DNS 解析器。这可能会改善这种情况，因为它使你的 ISP 更难以跟踪你，并且你可以避免某些形式的审查。尽管追踪和审查仍然是可能的，但这种方法并没有被广泛使用。你自己（本地）的 DNS 解析器你可以自己动手，避免使用别人的 DNS 解析器的一些危险。如果你对此感兴趣，请告诉我们。根证书什么是根证书？每当你访问以 https 开头的网站时，你都会使用它发送的证书与之通信。它使你的浏览器能够加密通信并确保没有人可以窥探。这就是为什么每个人都被告知在登录网站时要注意 https（而不是 http）。证书本身仅用于验证是否为某个域所生成。以及：这就是根证书的来源。可以其视为一个更高的级别，用来确保其下的级别是正确的。它验证发送给你的证书是否已由证书颁发机构授权。此权限确保创建证书的人实际上是真正的运营者。这也被称为信任链。默认情况下，你的操作系统包含一组这些根证书，以确保该信任链的存在。滥用我们现在知道：DNS 解析器在你发送域名时向你发送 IP 地址证书允许加密你的通信，并验证它们是否为你访问的域生成根证书验证该证书是否合法，并且是由真实站点运营者创建的怎么会被滥用呢？如前所述，恶意 DNS 解析器可能会向你发送错误的 IP 以进行审查。它们还可以将你导向完全不同的网站。这个网站可以向你发送假的证书。恶意的根证书可以“验证”此假证书。对你来说，这个网站看起来绝对没问题；它在网址中有 https，如果你点击它，它会说已经通过验证。就像你了解到的一样，对吗？不对！它现在可以接收你要发送给原站点的所有通信。这会绕过想要避免被滥用而创建的检查。你不会收到错误消息，你的浏览器也不会发觉。而你所有的数据都会受到损害！结论风险使用恶意 DNS 解析器总是会损害你的隐私，但只要你注意 https，你的安全性就不会受到损害。使用恶意 DNS 解析程序和恶意根证书，你的隐私和安全性将完全受到损害。可以采取的动作不要安装第三方根证书！只有非常少的例外情况才需要这样做，并且它们都不适用于一般最终用户。不要被那些“广告拦截”、“军事级安全”或类似的东西营销噱头所吸引。有一些方法可以自行使用 DNS 解析器来增强你的隐私，但安装第三方根证书永远不会有意义。你正在将自己置身于陷阱之中。实际看看警告有位友好的系统管理员提供了一个现场演示，你可以实时看到自己。这是真事。千万不要输入私人数据！之后务必删除证书和该 DNS！如果你不知道如何操作，那就不要安装它。虽然我们相信我们的朋友，但…

公钥基础设施和密码学中的私钥的角色
type: item
date: 2018-09-26T17:09:11+08:00
description: 了解如何验证某人所声称的身份。在上一篇文章中，我们概述了密码学并讨论了密码学的核心概念： 保密性 confidentiality （让数据保密）、 完整性 integrity （防止数据被篡改）和 身份认证 authentication （确认数据源的 身份 identity ）。由于要在存在各种身份混乱的现实世界中完成身份认证，人们逐渐建立起一个复杂的 技术生态体系 technological ecosystem ，用于证明某人就是其声称的那个人。在本文中，我们将大致介绍这些体系是如何工作的。快速回顾公钥密码学及数字签名互联网世界中的身份认证依赖于公钥密码学，其中密钥分为两部分：拥有者需要保密的私钥和可以对外公开的公钥。经过公钥加密过的数据，只能用对应的私钥解密。举个例子，对于希望与记者建立联系的举报人来说，这个特性非常有用。但就本文介绍的内容而言，私钥更重要的用途是与一个消息一起创建一个 数字签名 digital signature ，用于提供完整性和身份认证。在实际应用中，我们签名的并不是真实消息，而是经过 密码学哈希函数 cryptographic hash function 处理过的消息 摘要 digest 。要发送一个包含源代码的压缩文件，发送者会对该压缩文件的 256 比特长度的 SHA-256 摘要进行签名，而不是文件本身进行签名，然后用明文发送该压缩包（和签名）。接收者会独立计算收到文件的 SHA-256 摘要，然后结合该摘要、收到的签名及发送者的公钥，使用签名验证算法进行验证。验证过程取决于加密算法，加密算法不同，验证过程也相应不同；而且，很微妙的是签名验证漏洞依然层出不穷。如果签名验证通过，说明文件在传输过程中没有被篡改而且来自于发送者，这是因为只有发送者拥有创建签名所需的私钥。方案中缺失的环节上述方案中缺失了一个重要的环节：我们从哪里获得发送者的公钥？发送者可以将公钥与消息一起发送，但除了发送者的自我宣称，我们无法核验其身份。假设你是一名银行柜员，一名顾客走过来向你说，“你好，我是 Jane Doe，我要取一笔钱”。当你要求其证明身份时，她指着衬衫上贴着的姓名标签说道，“看，Jane Doe！”。如果我是这个柜员，我会礼貌的拒绝她的请求。如果你认识发送者，你们可以私下见面并彼此交换公钥。如果你并不认识发送者，你们可以私下见面，检查对方的证件，确认真实性后接受对方的公钥。为提高流程效率，你可以举办聚会并邀请一堆人，检查他们的证件，然后接受他们的公钥。此外，如果你认识并信任 Jane Doe（尽管她在银行的表现比较反常），Jane 可以参加聚会，收集大家的公钥然后交给你。事实上，Jane 可以使用她自己的私钥对这些公钥（及对应的身份信息）进行签名，进而你可以从一个线上密钥库)获取公钥（及对应的身份信息）并信任已被 Jane 签名的那部分。如果一个人的公钥被很多你信任的人（即使你并不认识他们）签名，你也可能选择信任这个人。按照这种方式，你可以建立一个 信任网络 Web of Trust 。但事情也变得更加复杂：我们需要建立一种标准的编码机制，可以将公钥和其对应的身份信息编码成一个 数字捆绑 digital bundle ，以便我们进一步进行签名。更准确的说，这类数字捆绑被称为 证书 cerificate 。我们还需要可以创建、使用和管理这些证书的工具链。满足诸如此类的各种需求的方案构成了 公钥基础设施 public key infrastructure （PKI）。比信任网络更进一步你可以用人际关系网类比信任网络。如果人们之间广泛互信，可以很容易找到（两个人之间的）一条 短信任链 short path of trust ：就像一个社交圈。基于 GPG 加密的邮件依赖于信任网络，（理论上）只适用于与少量朋友、家庭或同事进行联系的情形。（LCTT 译注：作者提到的“短信任链”应该是暗示“六度空间理论”，即任意两个陌生人之间所间隔的人一般不会超过 6 个。对 GPG 的唱衰，一方面是因为密钥管理的复杂性没有改善，另一方面 Yahoo 和 Google 都提出了更便利的端到端加密方案。）在实际应用中，信任网络有一些“ 硬伤 significant problems ”，主要是在可扩展性方面。当网络规模逐渐增大或者人们之间的连接较少时，信任网络就会慢慢失效。如果信任链逐渐变长，信任链中某人有意或无意误签证书的几率也会逐渐增大。如果信任链不存在，你不得不自己创建一条信任链，与其它组织建立联系，验证它们的密钥以符合你的要求。考虑下面的场景，你和你的朋友要访问一个从未使用过的在线商店。你首先需要核验网站所用的公钥属于其对应的公司而不是伪造者，进而建立安全通信信道，最后完成下订单操作。核验公钥的方法包括去实体店、打电话等，都比…

捐赠 Let's Encrypt，共建安全的互联网
type: item
date: 2016-11-03T16:49:00+08:00
description: 最近关于沃通和 StartCom 这两家 CA 公司的消息让人们再次关注到了网络隐私和安全的问题。随着 Mozilla、苹果和谷歌对这两家 CA 公司处罚落定，很多使用这两家 CA 所签发证书的网站纷纷寻求新的证书签发商。这里面固然有不少可信赖的 CA 公司可以提供服务，不过，有另外一个非盈利组织却为大家提供了免费、可靠和安全的 SSL 证书服务，这就是 Let's Encrypt 项目。Let's Encrypt 项目是由 互联网安全研究小组 ISRG，Internet Security Research Group 主导并开发的一个新型 数字证书认证机构 CA，Certificate Authority 。该项目旨在开发一个自由且开放的自动化 CA 套件，并向公众提供相关的证书免费签发服务以降低安全通讯的财务、技术和教育成本。网站的完全加密是非常有必要的，这样每个人都可以随意在网上畅游而不用担心他们的活动被监视、拦截和修改。 Let’s Encrypt 的做法与一般的 CA 服务商不同。他们为那些需要加密的网站提供了免费、易用的获取和管理证书的服务，而且在全球的每一个国家都可以使用。这些服务可以帮助人们或组织战胜来自经济、技术和培训方面的障碍，在互联网上安全地通讯。 仅仅在 Let’s Encrypt 运营了 10 个月之后，加密的页面数量就有了快速提升！这里面，Let’s Encrypt 项目居功甚伟，采用加密 Let’s Encrypt 的页面 90% 都是之前从未进行过加密的。然而，互联网上还有超过一半的页面仍然没有加密。所以 Let’s Encrypt 还任重而道远，为了达成让互联网全都变成加密的这一目标，他们需要你的帮助！因此 Let’s Encrypt 在众筹网站 generosity.com 上发起了众筹，募集更多的运营资金，以期做的更好！如果您能捐助他们，您就为建立一个更安全的互联网埋下了一块基石。您所捐赠的每一块钱，都可以帮助 Let’s Encrypt 为所有用户创建一个尊重隐私的互联网体验。他们划定了几个从 $25 到 $42000 不等的捐赠级别，并且为了感谢您的支持，会提供给您一些有趣的礼品以示谢意：第一个级别 $25，您将收到一声感谢！第二个级别 $50，您将收到一些精美的贴纸，可以贴在你的保险杠、水杯或者其它的什么地方。 第三个级别是 $100，他们叫这个“To Encryption and Beyond!”，礼品是这些漂亮的、合身的 T恤。如果您捐赠了 $250，您将同时收到 T 恤和贴纸。更高额度的捐赠就不在这里一一列出了，富有爱心的土豪可以移步这个众筹网站去看看。如果您暂时手头比较紧张，你还有其它的几种方式支持：分享这篇文章或其中的视频到你常用的社交媒体中。转发这个的捐赠计划。参与他们的社区论坛。帮助他们找到 bug 以便可以修复它。关于 Let's Encrypt 的更多信息，您可以访问其官网： https://letsencrypt.org/ ；如何使用他们的服务，你可以参考这篇文章。

在主要浏览器禁用后，SHA-1 使用量得到了下降
type: item
date: 2016-10-23T19:10:00+08:00
description: 在 Mozilla 宣布计划阶段性废弃 SHA-1 算法签名的证书一年后，SHA-1 的使用量得到了显著下降。据 Firefox 的数据看，使用量从去年的 50% 降至今年三月的 3.5%，而到这个月仅占到加密流量的 0.8%。Mozilla 最近宣布，从 Firefox 51 开始，该浏览器将对 SHA-1 签名的证书显示“不可信的连接”错误信息。Firefox 51 将发布于 2017 年 1 月，Mozilla 最初计划于 2017 年初拉黑 SHA-1 证书。Mozilla 率先推动了 SHA-1 废弃在去年秋天荷兰和法国的大学研究人员们发现可以非常容易地破解 SHA-1 加密后， Mozilla 率先推动了 SHA-1 废弃的活动。在 Mozilla 制定了其阶段性废弃 SHA-1 算法的时间表之后，谷歌和微软也跟着做了相同的决定，这些计划得到了 NIST 的支持。从 2016 年元旦开始，浏览器厂商们就禁用了之后新签发的 SHA-1 签名的 SSL/TLS 证书。SHA-1 废弃基本上完成了即便是有一些例外，甚至还有一些争议，但是在多数情况下，CA 厂商们都遵从了此次 SHA-1 禁用行动，SHA-1 市场份额的降低表明了他们的工作成果。如今，之前签发的使用 SHA-1 签名的旧证书仍然被标为可信，但是从 2017 年元旦开始，浏览器厂商们就会将这类证书标为不可信，无论其签发日期是何时。Mozilla 的加密工程师 J.C. Jones 说，特殊情况下，比如在内部站点或其它封闭性网络内，如果 SHA-1 证书是由手动导入的根证书签发的，Firefox 不会显示该警告。在 2015 年底，Facebook 和 Cloudflare 提议允许 CA 厂商们为那些不支持 SHA-2 和其它算法的老浏览器签发 SHA-1 证书，但是这个倡议基本上没得到响应，尽管这有一定的意义。

使用 openssl 命令行构建 CA 及证书
type: item
date: 2015-10-31T01:51:55+08:00
description: 这是一篇快速指南，使用 OpenSSL 来生成 CA （ 证书授权中心 （ certificate authority ） ）、 中级 CA （ intermediate CA ） 和 末端证书 （ end certificate ） 。包括 OCSP、CRL 和 CA 颁发者 （ Issuer ） 信息、具体颁发和失效日期。我们将设置我们自己的 根 CA （ root CA ） ，然后使用根 CA 生成一个示例的中级 CA，并使用中级 CA 签发最终用户证书。根 CA为根 CA 创建一个目录，并进入：mkdir -p ~/SSLCA/root/ cd ~/SSLCA/root/ 生成根 CA 的 8192 位长的 RSA 密钥：openssl genrsa -out rootca.key 8192 输出类似如下：Generating RSA private key, 8192 bit long modulus .........++ ....................................................................................................................++ e is 65537 (0x10001) 如果你要用密码保护这个密钥，在命令行添加选项 -aes256。创建 SHA-256 自签名的根 CA 证书 ca.crt；你需要为你的根 CA 提供识别信息：openssl req -sha256 -new -x509 -days 1826 -key rootca.key -out rootca.crt 输出类似如下：You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Beijing Locality Name (eg, city) []:Chaoyang dist. Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linux.CN Organizational Unit Name (eg, section) []:Linux.CN CA Common Name (e.g. server FQDN or YOUR name) []:Linux.CN Root CA Email Address []:ca@linux.cn 创建几个文件， 用于该 CA 存储其序列号：touch certindex echo 1000 > certserial echo 1000 > crlnumber 创建 CA 的配置文件，该文件包含 CRL 和 OCSP 终端的存根。# vim ca.conf [ ca ] default_ca = myca [ crl_ext ] issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always [ myca ] dir = ./ new_certs_dir = $dir unique_subject = no certificate = $dir/rootca.crt database = $dir/certindex private_key = $dir/rootca.key serial = $dir/certserial default_days = 730 default_md = sha1 policy = myca_policy x509_extensions = myca_extensions crlnumber = $dir/crlnumber default_crl_days = 730 [ myca_policy ] commonName = supplied state…

建立你自己的 CA 服务：OpenSSL 命令行 CA 操作快速指南
type: item
date: 2015-05-14T16:19:00+08:00
description: 这些是关于使用 OpenSSL 生成证书授权（CA）、中间证书授权和末端证书的速记随笔，内容包括 OCSP、CRL 和 CA 颁发者信息，以及指定颁发和有效期限等。我们将建立我们自己的根 CA，我们将使用根 CA 来生成一个中间 CA 的例子，我们将使用中间 CA 来签署末端用户证书。根 CA创建根 CA 授权目录并切换到该目录：mkdir ~/SSLCA/root/ cd ~/SSLCA/root/ 为我们的根 CA 生成一个8192位长的 SHA-256 RSA 密钥：openssl genrsa -aes256 -out rootca.key 8192 样例输出：Generating RSA private key, 8192 bit long modulus .........++ ....................................................................................................................++ e is 65537 (0x10001) 如果你想要用密码保护该密钥，请添加 -aes256 选项。创建自签名根 CA 证书 ca.crt；你需要为你的根 CA 提供一个身份：openssl req -sha256 -new -x509 -days 1826 -key rootca.key -out rootca.crt 样例输出：You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:NL State or Province Name (full name) [Some-State]:Zuid Holland Locality Name (eg, city) []:Rotterdam Organization Name (eg, company) [Internet Widgits Pty Ltd]:Sparkling Network Organizational Unit Name (eg, section) []:Sparkling CA Common Name (e.g. server FQDN or YOUR name) []:Sparkling Root CA Email Address []: 创建一个存储 CA 序列的文件：touch certindex echo 1000 > certserial echo 1000 > crlnumber 放置 CA 配置文件，该文件持有 CRL 和 OCSP 末端的存根。# vim ca.conf [ ca ] default_ca = myca [ crl_ext ] issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always [ myca ] dir = ./ new_certs_dir = $dir unique_subject = no certificate = $dir/rootca.crt database = $dir/certindex private_key = $dir/rootca.key serial = $dir/certserial default_days = 730 default_md = sha1 policy = myca_policy x509_extensions = myca_extensions crlnumber = $dir/crlnumber default_crl_days = 730 [ myca_policy ] commonName = supplied stateOrProvinceName = supplied countryName = optional emailAddress = optional organizationName = sup…