目录
一、docker安全
二、http与https的区别
三、为什么要使用 SSL 证书?
四、https证书认证的过程
https单向认证的访问流程
https双向认证的访问流程
五、如何获取证书?
六、实操获取证书并验证
1、通过阿里云获取证书
2、通过mkcert获取证书
3、通过openssl获取证书
一、docker安全
docker容器使用安全注意点:
尽量别做的事:
- 尽量不用 –privileged 运行容器(授权容器root用户拥有宿主机的root权限)
- 尽量不用 –network host 运行容器(使用host网络模式共享宿主机的网络命名空间)
- 尽量不在容器中运行 ssh 服务
- 尽量不把宿主机系统的关键敏感目录挂载到容器中
尽量要做的事:
- 尽量使用较小体积的镜像
- 尽量以单一应用进程运行容器
- 尽量在容器中使用最新稳定版本的应用
- 尽量安装使用最新稳定版本的docker
- 尽量以最低权限运行容器
- 尽量使用官方提供的镜像或自己构建的镜像
- 尽量给docker目录(默认/var/lib/docker/)分配独立的文件系统
- 尽量以资源限制的方式运行容器 -m –memory-swap –cpu-quota–cpu-shares –cpuset-cpus–device-write-bps
- 尽量以只读的方式挂载数据卷,持久化容器数据到宿主机的除外 -v 宿主机目录:容器数据卷目录:ro
- 尽量设置容器的重启策略和次数–restart always|on-failure:N
- 尽量对镜像进行漏洞扫描
二、http与https的区别
HTTP与HTTPS的区别如下:
- 加密与安全性:HTTP是明文传输,数据在传输过程中容易被篡改和窃取;HTTPS通过SSL或TLS协议对数据进行加密传输,保证数据传输的安全性。
- 数据完整性:HTTP没有提供数据完整性的保护机制,容易受到中间人攻击;HTTPS使用消息摘要算法来确保数据的完整性。
- 身份验证:HTTP没有提供身份验证机制;HTTPS使用数字证书来验证服务器的身份。
- 端口号:HTTP使用的是80端口;HTTPS使用的是443端口。
三、为什么要使用 SSL 证书?
HTTP协议无法加密数据,数据传输可能产生泄露、篡改或钓鱼攻击等问题,而启用HTTPS后,可帮助Web服务器和网站间建立可信的HTTPS协议加密链接,为网站安全加锁,保证数据安全传输。
四、https证书认证的过程
https单向认证的访问流程
https的单向认证流程:
0)服务端会事先通过CA签发证书和私钥文件
1)客户端发送https请求到服务端的443端口
2)服务端会先返回一个包含公钥、证书有效期、CA机构等信息的证书给客户端
3)客户端受到服务端发来的证书后,会先用本地的CA证书校验服务端证书的有效性,如果证书有效,则继续,否则告警
4)客户端发送自己可支持的对称加密方案给服务端
5)服务端会选择加密程度最高的方案,并通过明文方式发送给客户端(与双向认证的核心区别)
6)客户端使用选择的加密方案生成随机会话密钥并通过证书中的公钥进行加密,再发送给服务端
7)服务端会用私钥进行解密获取客户端发来的随机会话密钥,并使用这个会话密钥加密要返回的报文,再发送给客户端
8)客户端也是这个会话密钥进行解密获取服务端返回的数据,之后双方可继续这个会话密钥进行加密和解密来实现密文通信
https双向认证的访问流程
https的双向认证流程:
0)服务端和客户端会事先通过CA签发服务端证书和私钥文件
1)客户端发送https请求到服务端的443端口
2)服务端会先返回一个包含公钥、证书有效期、CA机构等信息的证书给客户端
3)客户端收到服务端发来的证书后,会先用本地的CA证书校验服务端证书的有效性,如果证书有效,再将包含公钥的客户端证书发送给服务端
4)服务端收到客户端证书后也会校验证书的有效性,客户端还会发送自己可支持的对称加密方案给服务端
5)服务端会选择加密程度最高的方案,并通过客户端证书里的公钥加密后发送给客户端
6)客户端使用私钥解密获取选择的加密方案,并使用此加密方案生成随机会话密钥,再通过服务端证书中的公钥进行加密,再发送给服务端
7)服务端会用私钥进行解密获取客户端发来的随机会话密钥,并使用这个会话密钥加密要返回的报文,再发送给客户端
8)客户端也是这个会话密钥进行解密获取服务端返回的数据,之后双方可继续这个会话密钥进行加密和解密来实现密文通信
五、如何获取证书?
1)在阿里云、华为云、腾讯云等云服务商那里申请一年有效期的免费证书或者购买证书
2)在本地使用 openssl、mkcert、cfssl、certbot(Let’s Encrypt)的工具生成本地私钥证书
六、实操获取证书并验证
1、通过阿里云获取证书
https://www.aliyun.com/product/cas" /> 2、通过mkcert获取证书
[root@localhost ~]#mkdir mkcert_list[root@localhost ~]#cd mkcert_list/[root@localhost ~/mkcert_list]#mkcert www.xueyin.com[root@localhost ~/mkcert_list]#lswww.xueyin.com-key.pemwww.xueyin.com.pem
server {listen 443 ssl; #SSL访问端口号为 443server_namewww.xueyin.com; #指定绑定证书的域名root /usr/share/nginx/html;ssl_certificate /root/mkcert_list/www.xueyin.com.pem; #指定服务端证书文件路径ssl_certificate_key /root/mkcert_list/www.xueyin.com-key.pem; #指定服务端私钥文件路径ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定SSL服务器端支持的协议版本ssl_prefer_server_cipherson;...}
3、通过openssl获取证书
//用 ca 证书签发 server 端证书创建服务器私钥openssl genrsa -out server-key.pem 4096生成证书签名请求文件(csr文件)openssl req -new -key server-key.pem -sha256 -subj "/CN=*" -out server.csr创建ca私钥openssl genrsa -out ca-key.pem 4096----------------------------------------------------------------------------------------------------------genrsa:使用RSA算法产生私钥-aes256:使用256位密钥的AES算法对私钥进行加密,这样每次使用私钥文件都将输入密码,可省略-out:输出文件的路径,若未指定输出文件,则为标准输出4096:指定私钥长度,默认为1024。该项必须为命令行的最后一项参数----------------------------------------------------------------------------------------------------------
创建ca证书openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem#输入123123----------------------------------------------------------------------------------------------------------req:执行证书签发命令-new:新证书签发请求-x509:生成x509格式证书,专用于创建私有CA时使用-days:证书的有效时长,单位是天-key:指定私钥路径-sha256:证书摘要采用sha256算法-subj:证书相关的用户信息(subject的缩写)-out:输出文件的路径----------------------------------------------------------------------------------------------------------使用ca 证书与私钥证书签发服务端签名证书,输入 123123,(需要签名请求文件,ca 证书,ca 密钥)openssl x509 -req -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -days 1000 -out server-cert.pem----------------------------------------------------------------------------------------------------------x509:生成x509格式证书-req:输入csr文件-in:要输入的csr文件-CA:指定ca证书的路径-CAkey:指定ca证书的私钥路径-CAcreateserial:表示创建证书序列号文件,创建的序列号文件默认名称为ca.srl----------------------------------------------------------------------------------------------------------
准备nginx的测试文件
server {listen 443 ssl;server_namewww.benet.com;ssl_certificate /root/openssl/server-cert.pem;ssl_certificate_key /root/openssl/server-key.pem;ssl_session_timeout5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;location ~ \.html$ {root html;indexindex.html index.htm;}}