openssl——自签名根证书、签名客户端和服务器证书

openssl——自签名根证书、签名客户端和服务器证书,第1张

openssl genrsa -out root.key 2048

也可以是pem文件,也可为了区分这是私钥而改用key后缀名,内容如下:

查看详细解析:包含两个大素数和两个指数和一个系数

openssl rsa -in root.key -text

可通过命令提取公钥:

openssl rsa -pubout -in root.key

openssl req -new -out root-req.csr -key root.key -keyform PEM

-keyform PEM:证书有pem和der格式之分,前者文本,多用于java和windows服务器,后者二进制

CSR是Certificate Signing Request的英文缩写,即证书请求文件

openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root.key -CAcreateserial -days 365

-CAcreateserial ,创建证书序列号,使用此选项,当CA序列号文件不存在时将被创建:它将包含序列号“02”,正在签名的证书将具有1作为其序列号。通常如果指定了-CA选项并且序列号文件不存在,则会出现错误。

-days 据说3650天有时候会意外导致证书验证失败,没遇到过

此处可有pem、crt、cer多种输出格式,其实内容都一样,来试一下:

每次生成的证书都不一样,但是未发现不同后缀名下的证书格式不同。

我的理解:

pem是最基本的编码格式,der也相同。

CRT文件是由第三方证书颁发机构(例如VeriSign或DigiCert)提供和生成的安全文件,ASCII编码格式。

cer是crt的微软形式。

为了统一,全使用cer格式。

可选择将证书和私钥导入密钥库,通常用p12和jks( Java Key Store)格式:

openssl pkcs12 -export -in root-cert.cer -inkey root.key -out root.p12 -name "lab"

需要加密保护, -name 设置别名

然后可选择使用keytool将p12转为jks格式,此处就不做转换了。

步骤基本相同

步骤基本相同

openssl genrsa -out server-key.key 2048

openssl req -new -out server-req.csr -key server-key.key -keyform PEM

openssl x509 -req -in server-req.csr -out server-cert.cer -CA F:\CERT\mycert\ test\openssl\win\root\root-cert.cer -CAkey F:\CERT\mycert\test\openssl\win\root\root.key -CAcreateserial -days 360

openssl pkcs12 -export -in server-cert.cer -inkey server-key.key -out server. p12 -name "lab-server"

运行环境要包含完整证书链。需要将证书链放到系统可信目录下。

为证书绑定ip,只能通过config文件,

文件如下【可将常用参数写入,生成请求文件时直接enter即可】:

使用配置文件时在生成请求文件和签发证书时的参数不同:

生成请求文件:

openssl req -new -out server-req1.csr -key server-key.key -keyform PEM -extensions v3_req -config openssl. cnf

签发证书:

openssl x509 -req -in server-req1.csr -out server-cert1.cer -CA F:\CERT\mycert\test\openssl\win\root\root- cert.cer -CAkey F:\CERT\mycert\test\openssl\win\root\root.key -CAcreateserial -days 360 -extensions v3_req -extfile openssl.cnf

默认证书链长度为2,使用中间ca签发时,中间ca的生成需要在配置文件中加修改长度参数:

[ v3_ca ]

basicConstraints = CA:true,pathlen:3

Note:

参考:

OpenSSL主配置文件openssl.cnf

利用OpenSSL创建证书链并应用于IIS7

openssl系列文章: http://www.cnblogs.com/f-ck-need-u/p/7048359.html

Microsoft 在 Microsoft Windows 的不同版本中推出了新的根更新机制。这些机制都逐渐开始致力分发较少的根证书,而是使分配根证书是必需的而分发通过 Windows 根证书程序尽可能平稳顺畅。若要了解根更新机制中的区别,将 Windows 版本分为两个类别是最方便的方式:

支持自动根的操作系统版本更新的单独的根证书

依赖于较早的、 可选的根元素的操作系统版本更新的包 (包含所有当前分布式的根证书的包)

在 Windows 客户端 Sku,Windows Vista 或更高版本完全支持自动根更新机制。建议早于 Windows Vista 版本的 Windows 下载可选根目录更新包,其中包含所有当前分布式的根证书。

Windows Vista 和 Windows 7

Windows Vista 或更高版本上的根证书分发通过自动根更新机制。即,它们是通过根证书分发。当用户进入一个安全网站 (例如,通过使用 HTTPS SSL),读取安全电子邮件 (S/MIME),或下载 ActiveX 控件,它是签名 (代码签名),然后遇到一个新的根证书时,则 Windows 证书链验证软件检查 Microsoft 更新根证书。如果软件找到根证书,则软件下载当前证书信任列表 (CTL)。CTL 包含程序中的所有受信任的根证书的列表,并验证存在列出了根证书。然后,它将指定的根证书下载到系统并在 Windows 受信任根证书颁发机构存储中安装证书。如果找不到根证书,证书链未完成,并且系统会返回一个错误。

对用户来说,成功的根更新是无缝的。用户不会看到任何安全性对话框或警告。下载将自动进行。此外,为 Windows Vista 或更高版本中,客户端 Sku 支持每周预取从 Microsoft 更新,以检查有更新的根证书属性 (例如,扩展的验证 (EV)、 代码签名,或服务器身份验证属性,即会添加到根证书的证书属性)。

Windows XP

Windows XP 不完全支持自动根更新机制。已经存在于用户的系统上的根证书时,它不会更新不论是否可在 Microsoft 更新根证书的副本已更改。Windows XP 也不支持的每周预提取证书属性从 Microsoft 更新功能,并在 Windows XP 上安装新的根证书属性的唯一方法是通过安装的根更新软件包。

建议在运行 Windows XP 的用户下载和安装根更新包,更新他们的根证书。根证书作为可选根更新包 – 包含每个根证书分发 Windows 根证书程序的可执行文件传递对于 Windows XP,通过 Microsoft 更新。Windows XP 用户可以选择每次更新,并将其由 Microsoft 更新的下载程序包。或者,也可以选择在更新时自动下载的根更新程序包。每年,大约三至四次或每季度更新可选根更新软件包。

Windows Server 2003 和 Windows Server 2008 中,Windows Server 2008 R2

Windows Server 2008 和更高版本,而不是 Windows Server 2003,则会启用自动根更新机制。Windows Server 2003 仅部分支持自动根更新机制。(这是不同于在 Windows XP 上的支持。和根更新程序包适用于 Windows XP Sku 仅用于客户端,因为它不是针对 Windows 服务器 Sku。但是,根更新包可能会下载并安装 Windows 服务器 Sku,受以下限制的约束。

如果您在 Windows 服务器 Sku 上安装根更新软件包,您可能会超过在 TLX 或 SSL 握手中想客户端报告根列表时 Schannel 可以处理的根证书数量的限制,因为在根更新软件包中分发的根证书的数量可能超过该限制。根证书更新时,受信任的 Ca 列表显著增大,并可能变得太长。列表然后被截断,并且可能导致问题的授权。这种行为也可能导致 Schannel 事件 ID 36885。在 Windows Server 2003 中,不能大于 0x3000 的发行者列表。

如果您需要在网站上的客户端证书,或者如果您在 Windows Server 2003 中使用 IAS,客户端无法建立连接。

注意您只有在 Windows 服务器上启用 SSL 客户端身份验证,将应用这些限制。

在断开连接的环境的根更新软件包安装

建议在断开连接环境中 (例如,位置自动根更新机制无法工作,因为连接到 Microsoft 更新不可用) 运行 Windows 的客户端或服务器 Sku 的系统应该安装根更新软件包。根更新程序包将安装 Windows Vista 和 Windows 7 在断开连接的环境中的一种解决办法。但是,我们不建议已通过网络连接到 Microsoft 更新的系统安装的根更新软件包,因为自动根更新机制将适用于它们。

您可以使用组策略将根证书分发到一组服务器在断开连接的环境中。

Windows Vista Crypt32.dll 资源文件中包括一组受信任第三方根证书,这些证书可以用作回退,与 Windows 更新的连接不可用时。触发自动根更新后,它会尝试从网络上下载的受信任第三方根证书。在离线的环境中,网络检索失败,和 CAPI 检查 Crypt32.dll 中的根证书的资源。如果根目录,则使用和安装在根存储区中。Windows 7 的类似行为。

如果禁用自动根更新,则不检索根尝试。因此,不会安装根目录。请注意,Crypt32.dll 中的资源包括那些已存在于根程序操作系统发行版之前的一次的证书。在以后添加任何根证书中不存在该资源,和此类证书都可以仅通过根更新包。

发现服务器证书无效的话,要是系统时间也调整的话,可能还会有如下几种情况:

原因1、SSL证书来自不受信任的机构颁发

市面上提供SSL证书的品牌商有很多,有些机构不受浏览器信任,所以它们签发的SSL证书不能通过浏览器安全审核 ,从而会提示服务器证书无效。

针对这种情况,最好的解决方法是重新向受信任的CA机构申请颁发新的SSL证书,并删除原来的证书,再将新签发的SSL证书部署到服务器上,然后重新用浏览器访问网站,看能否安全访问。

原因2、SSL证书包含的域名与网址不匹配

每一个SSL证书所对应的域名都具有唯一性,是一个全域名FQDN。当网站安装部署的SSL证书所包含的域名和网站域名不一致,系统就会自动发出报告,提示证书域名不匹配。

如果是SSL证书包含的域名与网址不匹配,则需要重新申请SSL证书。比如您网站拥有多个域名,则可申请通配符SSL证书或多域名SSL证书。

原因3、服务器配置问题

为了让一张证书受到信任,每个浏览器都需要建立起一条信任链,从服务器证书到一个可信任的根证书。如果服务器配置上出错,则需要重新配置SSL证书。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/141016.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-18
下一篇2023-03-18

发表评论

登录后才能评论

评论列表(0条)

    保存