Skip to content

Latest commit

 

History

History
266 lines (154 loc) · 7.46 KB

3.17_20170517_网络通信安全基础和openssl命令行工具.md

File metadata and controls

266 lines (154 loc) · 7.46 KB

网络通信安全基础和openssl命令行工具

美国国家安全署NIST定义了网络通信安全涉及到三个方面,分别是保密性、完整性和可用性,保密性包括数据的保密性和隐私性,完整性涉及了数据完整性和系统完整性。

目前的安全攻击有主动攻击和被动攻击,被动攻击如窃听;主动攻击有伪装、重放、消息篡改、拒绝服务。

为了保证网络安全通信的安全,有一些安全机制,如加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证等。

安全机制要通过安全服务来提供,安全服务有:认证、访问控制、数据保密性(连接保密性;无连接保密性;选择域保密性;流量保密性)、数据完整性、不可否认性。

安全服务会使用一些密码算法和协议,如对称加密协议、公钥加密、单向加密、认证协议。

在linux系统中常用的通信安全工具是Openssl和gpg。gpg是pgp的实现,gpg是软件,pgp是协议。

##加密算法和协议

  • 对称加密:加密和解密使用同一个密钥

    对称加密的算法有:

    DES(Data Encryption Standard)和3DES

    AES(Advanced Encryption Standard),密钥长度可变,有128bits,192bits, 258bits, 384bits, 512bits)

    Blowfish、Twofish、IDEA、RC6、CAST5

    对称加密的特性:

    1、加密、解密使用同一个密钥; 2、将原始数据分割成固定大小的块,逐个进行加密;

    对称加密的缺陷: 1、密钥过多 2、密钥分发

  • 公钥加密:密钥成对出现,一公一私

    公钥(public key)公开给所有人,私钥(secret key)自己留存,必须保证其私密性,如加密或设置权限。

    特点:用公钥加密的数据,只能使用与之配对的私钥解密;反之亦然;

    公钥加密有三种用途:数字签名和密钥交换、数据加密

    数字签名:主要在于让接收方确认发送方身份,并确定数据没有篡改; 密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;

    公钥加密使用的算法有:RSA(数字签名和加密), DSA(数字签名), ELGamal(商业加密算法)

  • 单向加密,只能加密不能解密,也叫做提取数据指纹

    特性:定长输出、雪崩效应;

    功能:保证数据的完整性

    算法

    md5: 128bits sha1: 160bits sha224 sha256 sha384 sha512

  • 密钥交换(IKE)协议

    密钥交换使用DH (Deffie-Hellman)算法,密钥不需要发送。

  • Public Key Infrastructure(PKI)

    有下面四个组件:

    签证机构:CA,签证机构是互相信任的,对于windows操作系统已经集成了大部分的签证机构的公钥。

    注册机构:RA

    证书吊销列表:CRL

    证书存取库

    X.509定义了证书的结构以及认证协议标准,目前使用的第三版证书。

    第三版的x.509证书定义的项目:

    版本号、序列号、签名算法ID、发行者名称、有效期限、主体名称、主体公钥、发行者惟一标识、主体的惟一标识、扩展、发行者签名

openssl

ssl: Secure Socket Layer),TLS: Transport Layer Security,是ssl的增强版。ssl/tls相当于在应用层和传输层加了半层。

1995: SSL 2.0, 由Netscape提出

1996: SSL 3.0, 由Netscape提出

1999: TLS 1.0

2006: TLS 1.1 RFC 4346

2008: TLS 1.2

2015: TLS 1.3

ssl内部也采用了分层设计

1、最底层:基础算法原语的实现,如aes, rsa, md5的实现和定义 2、向上一层:各种算法的实现 3、再向上一层:组合算法实现的半成品 4、用各种组件拼装而成的种种成品密码学协议/软件:如tls, ssh,

openssl是一个开源项目,由三个组件组成:

  • openssl: 多用途的命令行工具
  • libcrypto: 加密解密库
  • libssl: ssl及tls的实现

openssl命令行工具

openssl命令分为标准命令、消息摘要命令和加密命令。openssl version查看openssl程序版本号

  • 对称加密

工具:openssl enc, gpg 算法:3des, aes, blowfish, twofish

enc命令

加密:]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext 解密:]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

  • 单向加密

工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst

dgst命令:openssl dgst -md5 /PATH/TO/SOMEFILE

单向加密中的Message Authentication Code(MAC)机制:单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性

MAC有两种机制:CBC-MAC和HMAC(使用md5或sha1算法)

  • 生成用户密码:使用openssl的passwd子命令。如openssl passwd -1 -salt 123457892
  • 生成随机数:openssl rand -base64|-hex NUM。NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2;
  • 公钥加密

加密

不建议使用公钥进行数据加密,太耗时。

算法:RSA, ELGamal 工具:gpg和openssl rsautl

数字签名

算法:RSA, DSA, ELGamal

密钥交换 算法:dh

DSA: Digital Signature Algorithm DSS:Digital Signature Standard RSA:算法统称,安全公司

openssl生成密钥对

openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS,创建完成后要修改文件的权限

也可以使用:# (umask 077; openssl genrsa -out key.pri 2048)。使用括号表示在子shell运行,不会影响当前的shell设定。

提取出公钥

# openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout

随机数生成器: /dev/random:仅从熵池返回随机数;随机数用尽,阻塞; /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;

  • openssl建立私有CA

1、生成密钥 2、自签署证书

节点: 1、生成密钥对儿 2、生成证书签署请求 3、把请求发送给CA

CA: 1、验正请求者信息; 2、签署证书; 3、把签好的证书发送给请求者;

openCA

一、建立CA服务器

1、生成密钥 # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

2、自签证书 # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

req: 生成证书签署请求 ​ -news: 新请求 ​ -key /path/to/keyfile: 指定私钥文件 ​ -out /path/to/somefile: ​ -x509: 生成自签署证书 ​ -days n: 有效天数

3、初始化工作环境

# touch /etc/pki/CA/{index.txt,serial} # echo 01 > /etc/pki/CA/serial

二、节点申请证书

(一) 节点生成请求

1、生成密钥对儿 # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

2、生成证书签署请求 # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

3、把签署请求文件发送给CA服务 # scp

(二) CA签署证书

1、验正证书中的信息; 2、签署证书 # openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N

3、发送给请求者;

三、吊销证书

(一)节点

1、获取证书serial # openssl x509 -in /path/to/certificate_file.crt -noout -serial -subject

(二) CA

2、根据节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致;

3、吊销证书

# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

4、生成吊销证书的编号(如果是第一次吊销)

# echo 00 > /etc/pki/CA/crlnumber

5、更新证书吊销列表

# cd /etc/pki/CA/crl/ # openssl ca -gencrl -out thisca.crl

如果需要,查看crl文件的内容 # openssl crl -in /path/to/crlfile.crl -noout -text