从2017年开始意味着浏览器迁移HTTPS的重要开始,因为Chrome 56版本讲HTTP标记为非安全的网站。证书是用于SSL安全通信信道鉴权,它可以防止中间人攻击。证书有一条信任链,证书的真实安全身份由签发者提供保证,这一个信任关系常见的有2~4级,根证书的机构就是那些知名机构,这些知名机构被安装于世界上几乎所有主流的浏览器。一个证书通过工具查看到证书的拥有者和签发者。
openssl的x509工具提供了查看所有者(subject)和颁发者(issuer)的方法。
> openssl x509 -subject -issuer -noout -in root-ca.crt
subject=C = CN, ST = guangdong, L = shenzhen, O = Shenzhen Tencent Computer Systems Company Limited, CN = nc.qzone.qq.com
issuer=C = BE, O = GlobalSign nv-sa, CN = GlobalSign Organization Validation CA - SHA256 - G2
机构签发的证书subject和issuer项目名字不一样,而自签的证书subject和issuer是同一个项目。比如下面就是一个自签发的证书。
subject=C = cn, ST = gd, L = sz, O = tencent, OU = apd, CN = www.mariolu.com
issuer=C = cn, ST = gd, L = sz, O = tencent, OU = apd, CN = www.mariolu.com
自签发的证书是没有被信任。机构证书的签发者都是公认的知名CA机构。知名CA机构会被主流客户端和服务器所认可。所以自签发的证书在https通信中会被浏览器识别并向访问者发出安全警告。
目前公认的知名CA机构有(RapidSSL,Symantec(VeriSign),GeoTrust,Thawte,Cornodo,Sectigo等)(https://www.sslrenewals.com/ssl-brands.aspx)。每家CA机构提供不同安全等级的证书和价格服务。
证书鉴权分为三种安全类型等级:
收费的和免费的签发证书有什么区别呢?有以下三个主要区别
这里以签发一本ECC证书为例介绍如何生成自签名证书,如何生成免费的非自签证书。
利用openssl自带工具生成ECC证书:
openssl ecparam -genkey -name prime256v1 -out key.pem //生成ECC key
openssl req -new -sha256 -key key.pem -out csr.csr //生成CSR证书签名请求
openssl req -x509 -sha256 -days 365 -key key.pem -in csr.csr -out certificate.pem//生成证书
openssl req -in csr.csr -text -noout | grep -i "Signature.*SHA256" && echo "All is well" || echo "This certificate will stop working in 2017! You must update OpenSSL to generate a widely-compatible certificate"
需要注意的是:如果遇到生成pem使用openssl格式报RAND file不存在,需要在openssl.cnf(我的路径/usr/local/openssl_1.1.1/ssl/openssl.cnf)的RANDFILE = /data/mariolu/ecc/randfile。这个randfile使用urandom设备生成。命令dd if=/dev/urandom of=randfile bs=256 count=1
这里以网上比较流行的免费CA机构签发者Let's Encrypt(https://letsencrypt.org/getting-started/)为例生成非自签发ECC证书,通过该网站的连接https://certbot.eff.org/找到cerbot这个shell工具,用这个工具生成ECC证书。
生成步骤:
openssl ecparam -genkey -name secp384r1 | openssl ec -out elsenow-ecc.key
openssl req -new -sha256 -key elsenow-ecc.key -nodes -out elsenow-ecc.csr -outform pem
sh -x ./certbot-auto --cb-auto-has-root --le-auto-phase2 certonly --csr /data/mariolu/elsenow-ecc.csr --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
执行完成后,会生成三个文件0000_cert.pem(业务证书部分),0000_chain.pem(CA证书部分),0001_chain.pem(业务证书部分+CA证书部分)。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。