专栏首页MyPanda的学习笔记用openssl添加https访问并设置客户端信任

用openssl添加https访问并设置客户端信任

前置知识:

x.509 是密码学里面的公钥证书的格式标准. 就是说x.509是一种证书的格式,其实我们经常用这种格式的证书,只是可能没怎么注意过证书格式的标准而已.

pkcs 是公钥密码学标准. 其包含了一系列的标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议 (引用自百度百科)

  1. 数字证书一般是第三方机构签发的,这时候我们需要向第三方机构提供“证书请求文件”(通常为csr后缀的文件), 证书请求文件的特征是: 以“-----BEGIN CERTIFICATE REQUEST-----” 开头,以 “-----END CERTIFICATE REQUEST-----” 结尾. 在linux中,我们可以通过如下openssl 命令生成证书请求文件:
~]# openssl genrsa -out private.key    # 首先生成私钥 private.key 
~]# openssl req -new  -key private.key -out request.csr  -days 365     #根据证书签发机构提供的信息,按照提示生成csr 文件.其中的 C, ST, O 必须和证书签发机构提供的信息相一致,否则无法签发成功.
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) [XX]:  
......    #忽略后面一长串的内容
  1. 用linux的openssl 命令来生成证书的命令只需要比上面生成 csr 文件命令多一个 “-x509 ” 参数. 首先看下 openssl req 命令的-x509 option的意义, 在如下的结果中,我们可以看到-x509指出 其输出 一个x509结构的文件来代替 req 文件. 所以没有 -x509选项,那么默认生成的是csr 的证书请求文件,而加上 x509就表示生成一个x509结构的证书文件.
OpenSSL> req help
unknown option help
req [options] <infile >outfile
where options  are
 ......   #忽略了一大段,我们只关注x509 参数的意义.
 -x509          output a x509 structure instead of a cert. req.
......   #忽略了一大段,我们只关注x509 参数的意义.

证书有两种,一种是通过对CSR进行签发生成的,还有一种就是无需签发的证书。这种无需签发的证书通常也叫做CA证书. 无论是签发的还是CA证书,都是X.509格式的证书. X.509格式的证书的特点是: 以 “-----BEGIN CERTIFICATE-----” 开头,以“-----END CERTIFICATE-----” 结尾.

  1. 对于X509格式的证书(无论是CA证书还是签发生成的证书),如何查看这个证书的subject 信息呢?
~]# openssl x509 -in ./myca.pem -subject    #其中 myca.pem 是需要查看subject信息的证书.
......  #这里省略输出的结果.

除了X509格式的证书,我们也可以查看证书请求文件的subject 信息:

~]# openssl req -in my_request.csr  -noout -text -subject      #其中my_request.csr 就是证书请求文件
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CN, ST=HB, L=NONE, O=ITCOMPANY, OU=ST, CN=*.my.com
      ......   #省略了大部份的输出结果

################################################################################# #################################################################################

上面介绍了如何创建CSR ,CA以及查看CSR 以及CA中的subject 信息,有了上面的基础,我们来生成自己小站需要的https证书,然后在server end 和client end 进行配置:

  1. 生成我们自己的CA证书.
#忽略生成私钥my.key的过程.
~]# openssl req -x509 -new  -key my.key -out mycert.pem  -days 365
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) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:HD
Organization Name (eg, company) [Default Company Ltd]:ITCOMPANY
Organizational Unit Name (eg, section) []:TECH
Common Name (eg, your name or your server's hostname) []:COMPUTER
Email Address []:xxx@xxx.com
  1. 查看我们自签CA证书的subject 信息:
~]# openssl x509 -in ./mycert.pem -subject 
subject= /C=CN/ST=HB/L=HD/O=ITCOMPANY/OU=TECH/CN=COMPUTER emailAddress=xxx@xxx.com          #此为证书的subject信息
-----BEGIN CERTIFICATE-----
......
  1. 生成证书请求文件,证书请求文件生成过程中要求的 Country Name(C), State or Province Name (ST) 以及Organization Name(O) 必须和CA 的相同,否则在后面进行签名的时候会报错. 而Common Name 通常是证书需要绑定的URL. 至于L ,OU 如果没有明确指定,那么就随意了.
#忽略了生成私钥my_csr_key.key的过程.
~]# openssl req -new  -key my_csr_key.key -out my_request.csr   -days 365
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) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:Town
Organization Name (eg, company) [Default Company Ltd]:ITCOMPANY
Organizational Unit Name (eg, section) []:develop
Common Name (eg, your name or your server's hostname) []:*.my.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
  1. 查看生成的证书请求文件my_request.csr:
~]# openssl req -in my_request.csr  -noout -text -subject
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CN, ST=HB, L=Town, O=ITCOMPANY, OU=develop, CN=*.my.com
......  #省略大部分内容
  1. 用openssl 命令实现对CSR的签名, 生成签名证书. 在执行签名命令之前,需要注意: A. /etc/pki/CA/index 这个文件用于跟踪已经签发的证书,如果没有签发过,那么该文件应该为0字节. B. /etc/pki/CA/serial 这个文件里面里面保存的是最后一次签发的证书的序列号,初始值应该为01,也可以为00等其他的值. 如果以上两个文件缺失或者内容不符合规范,会导致签发命令执行时报错.
~]# openssl ca -in ./my_request.csr -out ./my.crt -days 365 -cert ./mycert.pem  -keyfile ./my.key 
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jul  4 12:11:59 2020 GMT
            Not After : Jul  4 12:11:59 2021 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HB
            organizationName          = ITCOMPANY
            organizationalUnitName    = develop
            commonName                = *.my.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
......     #忽略后面的内容,签发成功后的证书文件为 my.crt. 

上面用CA证书对CSR进行签发,签发完成后,我们就获得了CSR对应的证书my.crt. 那么作为同样是x509格式的my.crt , 是否可以像CA一样对CSR进行签发呢? 经个人验证,这个确实可以.

  1. 查看生成的证书文件my.crt 的subject, 因为生成的my.crt 也是x.509格式的数字证书,所以用该openssl x509命令
~]# openssl x509 -in ./my.crt   -subject 
subject= /C=CN/ST=HB/O=ITCOMPANY/OU=develop/CN=*.my.com
-----BEGIN CERTIFICATE-----
MIIDwjCCAqqgAwIBAgIBATANBgkqhkiG9w0BAQsFADB5MQswCQYDVQQGEwJDTjEL
......
-----END CERTIFICATE-----
  1. 上面生成的my.crt 就是要用于https的证书文件,而my_csr_key.key就是该证书对应的私钥. CA证书是:mycert.pem httpd 的conf.d/ssl.conf 中需要指定如下的配置项:
SSLCertificateFile /etc/httpd/conf.d/my.crt          #指定证书路径
SSLCertificateKeyFile /etc/httpd/conf.d/my_csr_key.key  #指定私钥的路径
SSLCACertificateFile  /etc/httpd/conf.d/mycert.pem  #指定根证书的路径.

在上述的配置中需要注意的是: SSLCertificateFile 指定的是用于https的证书,SSLCertificateKeyFile指定的是相应的私钥 而SSLCACertificateFile通常是指定CA证书的路径,但是也可以是my.crt的签发者(不一定是CA),正如上面所述,openssl需要的证书并不一定需要CA来签发. 配置完成,重启httpd服务就可以了。

  1. 在客户端,只需要信任server.crt 的签发者 mycert.pem 就可以了。不同类型的客户端配置信任的方式不同,比如浏览器,通常会提示是不可信的证书,根据提示一步步信任就可以了(在实际的上网中,不要随便信任提示不安全的证书哦,以防掉入钓鱼网站的陷阱). 而在linux系统中,比如curl 命令则使用的是 os层面信任的证书。这时候需要在os层面信任该证书: 下面演示的是在linux (centos 7)os 中信任这个根证书的方式:
~]# cp mycert.pem /etc/pki/ca-trust/source/anchors
~]# update-ca-trust  

在这里有几点需要说明的是: A. pkcs 是公钥密码学标准,在os 里面一般都有一个 /etc/pki/ 这个目录,个人猜测是 pki 是pkcs interface的缩写。所以关于证书相关的配置基本都在这个目录下。 B. 更新信任证书 的命令在不同的系统中可能不同,请查看相应命令的man 帮助文档来找到存放 待信任证书的正确位置(centos/rhel 是 update-ca-trust), 然后运行更新证书的命令. C. 更新完成之后,这个证书在/etc/pki/ca-trust/extracted 下面对应的每种证书里面都是可信任的,比如这个证书会出现在 java/cacerts 里面,也就是java 的keystore 里面,查看这个文件中包含的证书,需要用keytool命令, 也会出现在 pem 目录下的其他证书里面, 还有openssl 目录下面的证书列表里...也就是说,这是一个全局状态的更新

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • https通信过程的简单理解

    A. client 连接请求发送到server, server根据配置,发送自己相应的证书给客户端的应用程序(通常是浏览器),这时候的证书中含有的信息包括:证...

    qsjs
  • 数字证书系列--用证书搭建https网站

    在前面一节介绍了如何创建CA, 以及如何用CA对CSR 证书请求文件进行签名,从而生成签名的服务器端证书。生成签名证书不是我们的最终目的,利用生成的签名证书来加...

    qsjs
  • 数字证书系列-CA以及用CA 签发用户证书

    我们如何由证书请求文件获得证书呢? 我们的证书请求文件一般发送给相应(取决于CSR文件创建向导中填写的X.509信息)的可信任“证书签发”机构,他们会给我们生成...

    qsjs
  • 根证书和中间证书的区别

    让我们花几分钟时间讨论一下中间证书和根CA证书。SSL(或者更准确地说,TLS)是一项大多数终端用户知之甚少甚至一无所知的技术。即使是获取了SSL证书的人通常也...

    亚洲诚信SSL
  • https连接的前几毫秒发生了什么

    在讨论这个话题之前,先提几个问题: 为什么说https是安全的,安全在哪里? https是使用了证书保证它的安全的么? 为什么证书需要购买? 我们先来看http...

    用户1257215
  • HTTPS 证书有效期被提议缩短至13个月

    由 Web 浏览器制造商、软件开发人员和安全证书颁发机构组成的行业团体 CA/Browser Forum,正在考虑将 HTTPS 证书的有效期从 27 个月缩短...

    Debian社区
  • 替换VCenter6.0自签名证书

         很多时候Vcenter需要把自签名的证书替换掉,使用公有证书或者自己搭建的证书服务器进行替换,本实验是使用Windows Server搭建的证书服务器...

    月缺
  • 一款使用PowerShell和证书来加密文件的工具

    在之前的两篇文章中,我已经教大家如何使用证书加解密文件,但总的来说操作过程还是有些繁杂。今天我将为你们提供一个文件加密工具,来自动化的帮我们完成这些过程。关于证...

    FB客服
  • 证书功能来了,打造员工专属荣誉墙!

    每周总有一天,乐乐想和你们唠唠嗑 ? 那个啥,屏幕前的朋友们,你们听过“酿材师”吗? 第一次听到这个名字我的感受是——酿酒师?调酒师?专门酿造食材的师傅? ?...

    腾讯乐享
  • 一键开通免费证书,你get了嘛?

    ? 点击上方蓝字关注我们 据媒体报道,自4月3日下午开始,Let's Encrypt证书签发和续期遭遇不可抗力故障。不论用户是新申请证书还是对已有证书进行续期...

    腾讯云DNSPod团队

扫码关注云+社区

领取腾讯云代金券