证书获取
通过浏览器查看网站证书已经可以看到许多信息,版本号、签名算法、公钥,证书链和各种扩展项,如果我们想获取该证书,用浏览器的方式也很简单。在查看证书处,详细信息,复制到文件就可以选择以某种格式导出证书。
获取网站证书也可以让我们看到其中的中间证书和根证书,例如我们可以看看CSDN网站的证书:
从Certificate chain证书链信息中可以看到,blog.csdn.net网站的服务器证书*.csdn.net,中间证书是Geo Trust RSA CA 2018,根证书DigiCert。往下看,从BEGIN CERTITICATE开始到END CERTITICATE就是证书的内容,如果BEGIN CERTITICATE前有编号为0,证明是服务器证书的内容,如果编号为1是中间证书的内容。在整个输出中我们都没有看到根证书的内容,因为根证书已经集成到了浏览器中。
证书生成
CSR文件就是证书申请文件,Certificate Signing Request,在服务器实体申请证书时,都要向CA机构提交CSR文件,里面包含了自己的域名,服务器公钥,还有服务器自己的一些机构信息等。最后使用服务器私钥对其进行签名,得到的CSR文件再发送给CA机构,
生成CSR文件
用req子命令可以选择交互式或者非交互式的方式来生成CSR文件和密钥对:
可以看到,在生成CSR文件和密钥对的命令中,-sha256表示证书使用的哈希算法和哈希值长度为256位。-newkey表示生成新的密钥对,后面接的rsa自然就是使用的非对称加密生成rsa密钥对,密钥长度为2048bit。最后-keyout和-out分别表示输出密钥对文件和输出CSR文件。这样的方式生成CSR文件和密钥对,需要手动输入一些信息,例如下面看到的需要手动输入国家,城市和机构名,邮箱地址等信息。当然也可以使用非交互式的方式,手动在命令里设置一些信息,上图中倒数第7行,加入-subj参数。
生成CSR文件后,我们可以打开看一看里面的信息:
Subject Public Key Info标识的是服务器公钥信息,Public Key Algorithm是使用的公钥算法rsa,密钥长度2048bit。下面的Signature Algorithm标识的是签名算法和签名值。
生成自签名证书
接下来就可以利用这个CSR文件生成自签名证书,自签名证书说白了就是用自己的私钥对证书进行签名,自己证明自己的身份,通常用在内部测试环境中。
生成自签名的证书用x509子命令,其中-days参数顾名思义就是证书的有效期为365天,-in domain_csr.pem标识使用该CSR文件,-signkey domain_key.pem标识使用该密钥对的公钥,最后-out输出生成的证书文件domain_cert.pem,看到Signature ok表示签名成功。
证书结构信息
生成自签名证书后,可以看看证书的一些内部信息:
例如-endate参数,查看证书的过期时间,记得上面设置的是365天也就是一年,这里第二行过期时间就是2021年。还有下面的-issuer参数,查看证书的使用者,也就是签发该证书的CA机构,由于这是一张自签名证书,签发者当然就是我们前面设置的信息。-pubkey参数用来查看证书公钥。
我们也可以使用x509子命令来查看服务器证书的所有信息:
可以看到,直接列出证书的所有结构信息,Version版本号,Serial Number证书的序列号,在身份校验阶段,查询证书吊销状态靠的就是这个序列号。Signature Algorithm是签名算法,Validity是校验时需要的证书有效期,可以看到,起始日期2020年,有效期为一年。Subject Public Key Info包含了证书的公钥信息,算法是rsa非对称加密,公钥长度2048bit,Modulus是非对称加密中的参数n,也就是RSA内部结构中,两个大质数p和q的乘积,n的长度就是密钥对的长度,同时n也是组成公钥的参数之一。往下走,Exponent是RSA内部结构中的参数e,e和n组合起来才得到最后的公钥。最后一项Signature Algorithm自然就是签名算法和下面的签名值。
来源:CSDN
作者:zzzjustin_z
链接:https://blog.csdn.net/justinzengTM/article/details/104480092