通过openssl验证ssl证书匹配性

背景:SSL证书是private key + public key一起工作才能完成加密过程的。

大致来说就是client在handshake过程中先拿public key加密发送随机session encryption key set以及其它关键信息,通过public key密码的报文只能通过server端安装的SSL certificate key pair中的private key才能进行解密。

如果private key与public key不匹配,那么首先是server端在安装的时候就会提示密钥对不匹配并拒绝安装;其次,即便server允许安装不正确的证书对,那么在实际运行中,因为server无法解密client发送的加密报文,也会造成SSL handshake过程失败,进而导致session无法继续。

 

But, 证书购买过程会涉及到域名验证等等操作,可能在有的公司里面不会将此操作交由工程师完成,故作为运维人员的们即便明白SSL如何工作与申请、部署等等,也有可能等领导购买并生成SSL证书对。

 

那么拿到证书对的时候,应该如何验证private key与public key是不是一对的呢?

可以通过openssl工具public key信息提取然后进行精准的对比,命令如下

 

1). 针对private key(以rsa为例)

openssl rsa -pubout -in cert.key

2). 针对public key

openssl x509 -pubkey -noout -in cert.crt

 

然后对比两次输出,如果是正常的话,那么-----BEGIN PUBLIC KEY-----与-----END PUBLIC KEY-----之间的内容应该是完全一致的。

 

再借助diff工具,那么不必自己斗鸡眼对看长长的信息了

diff -eq <(openssl x509 -pubkey -noout -in cert.crt) <(openssl rsa -pubout -in cert.key)

如果是正常的话,上面的输出应该是与下面类似

writing RSA key

这表明,除了writing RSA key这部分内容以外均相同

 

openssl x509部分命令
打印出证书的内容:
openssl x509 -in cert.pem -noout -text
打印出证书的系列号
openssl x509 -in cert.pem -noout -serial
打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject
以RFC2253规定的格式打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
在支持UTF8的终端一行过打印出证书的拥有者名字
openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
打印出证书的MD5特征参数
openssl x509 -in cert.pem -noout -fingerprint
打印出证书的SHA特征参数
openssl x509 -sha1 -in cert.pem -noout -fingerprint
把PEM格式的证书转化成DER格式
openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
把一个证书转化成CSR
openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
给一个CSR进行处理,颁发字签名证书,增加CA扩展项
openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca -signkey key.pem -out cacert.pem
给一个CSR签名,增加用户证书扩展项
openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr -CA cacert.pem -CAkey key.pem -CAcreateserial

 

 

你可能感兴趣的:(https)