场景
网站等服务面向公网提供服务一般都会通过一个申请的外网域名并通过https 协议提供服务,而https 就是通过证书对通讯信息加密。所以这就涉及到了证书相关内容。
关于域名
公网的域名都是要通过备案的否则被视为非法的会被禁掉,而域名备案的前提是有实体信息就是公司名称必须已经注册。
关于证书
证书部署
在采用https的时候,证书的配置可以配置在多个地方,例如后端采用的是tomcat 服务,那么就可以在tomcat 上配置,而如果tomcat 上方是通过nginx代理的那么一般配置在nginx就可以了。
现实场景一般更复杂,例如服务部署在云上有可能采用了DDOS高防+WAF+SLB+Nginx ,所以这几个产品都要部署证书才能使用https 协议,当然如果SLB走的是TCP 可以不部署,如果是静态也没走CND那么CDN也要部署。
Tips :其实后端服务器前面的nginx、waf 等产品都可以简单理解为代理,客户端与代理之间通过都是通过证书加密,然后代理把请求一层层转发。
几个概念
(1)非对称加密:一个公钥、一个私钥,公钥加密的文件可以用私钥解密,反之也可以;RSA就是一种常见的非对称加密算法;
另外,私钥一般自己保存,只有自己知道;公钥则是公开的
(2)openssl:一个开源的组织、一个开源的软件代码库和密码库工具,囊括了主要的密码算法;
(3)CA:证书认证中心;拿到一个证书之后,得先去找CA验证下,拿到的证书是否是一个“真”的证书,而不是一个篡改后的证书。如果确认证书没有问题,那么从证书中拿到公钥之后,就可以与对方进行安全的通信了,基于非对称加密机制。CA自身的分发及安全保证,一般是通过一些权威的渠道进行的,比如操作系统会内置一些官方的CA、浏览器也会内置一些CA;
证书介绍
第三方购买的证书产品一般包括两个文件:asdf.key asdf.crt ,key 文件是公私钥密钥对文件,crt是证书(公钥+公司实体和加密算法等信息)
证书和公私钥对等信息其实是可以通过openssl 等工具自己生成,但是自己生成的只能内部使用对外是不被信任的。
生成过程:
openssl genpkey -algorithm rsa -out rsa_private.key #生成公私钥
openssl rsa -in rsa_private.key -text #查看
openssl rsa -pubout -in rsa_private.key #提取其中的公钥
生成证书过程
openssl req -new -key rsa_private.key -out server.csr #采用私钥生成一个CSR,过程中需要输入一些信息,这些信息都是公开的
openssl req -in server.csr -text -noout #CSR文件生成了,查看一下,可以看到输入的信息
openssl x509 -req -days 365 -in server.csr -signkey rsa_private.key -out mycert.crt #生成一个证书:mycert.crt 证书的有效期 365天
openssl x509 -in mycert.crt -text #查看证书的相关信息