数据加密算法

网络安全设计很多方面,而网络数据的安全传输通常会面临一下几方面的威胁:

  • 数据窃听与机密性:即怎样保证数据不会因为被截获或窃听而暴露
  • 数据篡改与完整性:即怎样保证数据不会被恶意篡改
  • 身份冒充与身份验证:即怎样保证数据交互双方的身份没有被冒充 | 数据加密方式 | 描述 | 主要解决的问题 | 常用算法 | | —- | —- | —- | —- | | 对称加密 | 指数据加密和解密使用相同的密钥 | 数据的机密性 | DES,AES | | 非对称加密 | 也叫公钥加密,指数据加密和解密使用不同的密钥-密钥对儿 | 身份验证 | DSA,RSA | | 单向加密 | 指只能加密数据,而不能解密数据 | 数据的完整性 | MD5,SHA系列算法 |

网络安全证书

从上述加解密方式来看,对于网站的身份验证来看,公钥的获取尤为重要,发送方在顺利生成公私钥后,需要准确的将公钥传递给接收方,才能完全完成验证工作。
而证书的作用就是让用户使用网站时,能够直观明白网站安全的一种方式
== >> https

获取第三方证书

image.png

证书里有什么

image.png

openssl软件实践

openssl由三部分组成:

  • libcrpto:通用加密库
  • libssl:TSL/SSL组成库,基于会话实现了身份验证,数据加密和会话完整性
  • openssl:提供命令,例如模拟创建证书

    openssl命令行

  1. 检查版本

    openssl version

  2. 配置文件

    /etc/pki/tls/openssl.conf

  3. 获取openssl命令操作

    openssl -?

    标准命令

    Standard commands …

    信息摘要命令,单向加密命令

    Message Digest commands (see th ‘dgst’ command for more details) …

    加密命令

    Cipher commands (see the ‘enc’ command for more details) …

  4. 测试机器对openssl支持的加密算法进行速度测试,检测服务器性能

    openssl speed

openssl加密命令

语法:
openssl enc -加密算法 -in filename -out filename

  1. 文件加密

    openssl enc -des3 -salt -a -in password.txt -out pwd.des3

  2. 解密文件

    openssl enc -des3 -d -salt -a -n pwd.des3 -out pwd.src

参数解释:
enc:openssl把众多的对称加密算法,统一集成在了enc指令,用法是 enc -算法名
-des3:指定算法
-d:指定解密
-e:指定加密
-salt:密码加盐,防止密码被破解
-a:基于base64位编码,可选参数

openssl创建私有证书

  1. 创建私钥和公钥,模拟证书颁发机构生成证书,生成一对密钥

    指定私钥长度1024,并且将生成的私钥信息保存在文件里,且利用小括号功能,修改子shell的umask

    (umask 077;openssl genrsa -out server1024.key 1024)

    读取私钥文件,选择非对称加密算法rsa,生成公钥,写入到文件中

    openssl rsa -in server1024.key -pubout -out server1024.key.pub

    生成自签的证书

    openssl req -new -x509 -key server1024.key -out server.crt -days 365

image.png

搭建安全的站点

网络安全背景

image.png

网络安全涉及问题

image.png

Nginx部署HTTPS

利用证书实现HTTPS访问Nginx服务,需要nginx使用ssl模块配置HTTPS支持,默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定 -with-http_ssl_module 参数,安装模块依赖于openssl库和一些引用文件,这些文件并不在同一个软件包中,通常这个文件名类似 libssl-dev
nginx的https协议需要ssl模块的支持,不仅仅在编译nginx时使用对应参数加入ssl模块。还需要服务器私钥,服务器证书,如果是公司对外环境,这个证书需要购买第三方的权威证书,否则用户体验得不到保障

部署https实践

  1. 创建nginx需要的证书文件

    确保机器安装了openssl和openssl-devel,创建证书

    yum install openssl openssl-devel -y

  2. 确保nginx支持了ssl模块,查看nginx编译信息即可

    nginx -V

  3. 模拟证书颁发机构CA创建证书

    生成私钥文件,利用子shell降低文件权限

    (umask 077;openssl genrsa -out server1024.key 1024)

    自己签发证书,crt证书扩展名

    openssl req -new -x509 -key server1024.key -out server.crt -days 365

    向机构申请证书,我们这里生成的是证书请求文件,而不是直接生成证书,运维发送该文件给机构,请求合法证书

    openssl req -new -key server1024.key -out server.csr

    一般这个证书颁发,需要等待一周的时间

  4. 配置nginx,加载私钥,证书

    确保 nginx.conf 中 http{} 下有如下代码,且可以删除自带的 server{} 配置,将配置文件写在单独的文件,不让配置文件看的过于冗长

    include extra/*.conf

    创建https配置文件

    vim 443.conf

  1. #nginx默认的http虚拟主机80端口,且要支持转发到https的443端口
  2. server {
  3. listen 80;
  4. server_name _;
  5. charset utf-8;
  6. rewrite ^(.*)$ https://$host$1 permanent;
  7. location / {
  8. root html;
  9. index index.html;
  10. }
  11. }
  12. # 443 https的虚拟主机配置,且支持证书认证
  13. server {
  14. server_name _;
  15. listen 443 ssl;
  16. #写入对应证书和私钥的绝对路径
  17. ssl_certificate /opt/nginx/key/server.crt;
  18. ssl_certificate_key /opt/nginx/key/server1024.key;
  19. charset utf-8;
  20. location / {
  21. root html;
  22. index index.html index.htm;
  23. }
  24. }

检验结果:开启nginx服务,查看对应ip地址的首页网站,查看是否是https加密安全网站,注意:本地自建的证书,可能有些浏览器并不能读取