工作中有些Web站点部署在公司内部服务器,访问者也都是公司的同事。为了配置https安全访问,可以使用自签名证书或私有CA签名证书。
如果有很多的内部域名需要实现https的访问,最好配置一个私有的CA,如果仅有一两个域名,直接使用自签名证书更方便些。
自签名证书和CA签名证书的区别:
自签名证书不能被吊销,如果证书私钥泄露,你需要重新生成新的证书和私钥并配置到Web服务器上如果有多个自签名证书,为了建立客户端的信任,每个证书都需要在客户端完成安装。如果采用CA签名证书的方式,每个客户端只需要安装CA的证书即可,该CA签名的证书,客户端都将信任本文仅介绍自签名证书的生成和使用。
生成自签名证书使用Li我爱线报网每日持续更新海量各大内部创业教程nux自带的openssl命令,如下:
openssl \ req \ -newkey rsa:2048 \ -nodes \ -keyout key.pem \ -x509 -days 365 -out cert.pem \ -subj “/C=CN/ST=Guangdong/L=Shenzhen/O=CompanyName/OU=IT/CN=www.example.com/emailAddress=email@example.com”重要参数解释:
-newkey,这个选项会生成新的CSR(证书签名请我爱线报网每日持续更新海量各大内部创业教程求)和新的私钥-nodes,产生的私钥不用加密,不会弹出输入密码的提示-subj,指定证书的Subject Name,如果是域名证书,保证CN为站点域名即可上面命令执行后,当前目录将生成域名证书和对应的私钥,
[aneirin@host-1~]$ls -lh -rw-rw-r– 1 aneirin aneirin 1.5K Jun 23 14:43 cert.pem -rw-rw-r– 1 aneirin aneirin 1.7K Jun 23 14:43 key.pem测试自签名证书通过上面命令就可以生成自签名证书和私钥。如何测试证书是否可以正常使用,依赖Python的Flask模块即可(如果没有安装,使用pip提前安装),运我爱线报网每日持续更新海量各大内部创业教程行下面代码:
from flask import Flask Flask(__name__).run(ssl_context=(cert.pem, key.pem))运行上面脚本后,Flask将启动一个Web服务,并监听在服务器环回接口的端口5000上,
[aneirin@host-1~]$sudo ss -tnlp | grep 5000 LISTEN 0 128 127.0.0.1:5000 *:* users:((“python”,pid=19906,fd=3))使用curl测试,
[aneirin@host-1~]$curl -vvvI https://www.example.com:5000 –resolve www我爱线报网每日持续更新海量各大内部创业教程.example.com:5000:127.0.0.1 * Added www.example.com:5000:127.0.0.1 to DNS cache * About to connect() to www.example.com port 5000 (#0) * Trying 127.0.0.1… * Connected to www.example.com (127.0.0.1) port 5000 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * Server cer我爱线报网每日持续更新海量各大内部创业教程tificate: * subject: E=email@example.com,CN=www.example.com,OU=IT,O=ExampleCOM,L=Shenzhen,ST=Guangdong,C=CN * start date: Jun 23 06:43:18 2021 GMT * expire date: Jun 23 06:43:18 2022 GMT * common name: www.example.com * issuer: E=email@example.com,CN=www.example.com,OU=IT,O=ExampleCOM,L=Shenzhen,ST=Guangdong,C=CN * NSS error我爱线报网每日持续更新海量各大内部创业教程 -8172 (SEC_ERROR_UNTRUSTED_ISSUER) * Peers certificate issuer has been marked as not trusted by the user. * Closing connection 0 curl: (60) Peers certificate issuer has been marked as not trusted by the user. More details here: http://curl.haxx.se/docs/sslcerts.html ……因为证书是自签名的,curl并不信任这个证书,可以配置服务器让其信任该证书,
[aneirin@host-1~]$sudo c我爱线报网每日持续更新海量各大内部创业教程p cert.pem /etc/pki/ca-trust/source/anchors/selfsign-cert.pem [aneirin@host-1~]$sudo update-ca-trust备注:服务器操作系统为“CentOS Linux release 7.9.2009 (Core)”
再次运行上面的命令:
[aneirin@host-1~]$curl -vvvI https://www.example.com:5000 –resolve www.example.com:5000:127.0.0.1 * Added www.example.com:5000:127.0.0.1 to DNS ca我爱线报网每日持续更新海量各大内部创业教程che * About to connect() to www.example.com port 5000 (#0) * Trying 127.0.0.1… * Connected to www.example.com (127.0.0.1) port 5000 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 * Server certificate: * subj我爱线报网每日持续更新海量各大内部创业教程ect: E=email@example.com,CN=www.example.com,OU=IT,O=ExampleCOM,L=Shenzhen,ST=Guangdong,C=CN * start date: Jun 23 06:43:18 2021 GMT * expire date: Jun 23 06:43:18 2022 GMT * common name: www.example.com * issuer: E=email@example.com,CN=www.example.com,OU=IT,O=ExampleCOM,L=Shenzhen,ST=Guangdong,C=CN > HEAD / HTTP/1.1 > User-Age我爱线报网每日持续更新海量各大内部创业教程nt: curl/7.29.0 > Host: www.example.com:5000 > Accept: */* > * HTTP 1.0, assume close after body < HTTP/1.0 404 NOT FOUND HTTP/1.0 404 NOT FOUND < Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8 < Content-Length: 232 Conte我爱线报网每日持续更新海量各大内部创业教程nt-Length: 232 < Server: Werkzeug/2.0.1 Python/3.6.8 Server: Werkzeug/2.0.1 Python/3.6.8 < Date: Wed, 23 Jun 2021 07:16:39 GMT Date: Wed, 23 Jun 2021 07:16:39 GMT < * Closing connection 0可以看到自签名证书已经可以正常使用。
是不是自签名证书可以从curl返回的结果一眼看出来:键“issuer”和“subject”一模一样的证书就是自签名证书,可以看到,我们的我爱线报网每日持续更新海量各大内部创业教程证书是自签名证书。
总结本文对自签名证书的生成和使用做了介绍。生成自签名域名证书时,特别注意CN的值是域名即可。有些证书可以包含多个域名,这时需要配置“ X509v3 Subject Alternative Name”。通过私有CA生成域名证书,可以参考简便的HTTPS证书生成工具-CFSSL。
希望这篇文章能帮到正在努力的你,欢迎点赞,评论!