ssl以及构建私有CA

ssl协议:将报文在传输前进行加密;

#

ssl

所谓的安全,加密是指保证:保密,完整,可用;

ssl将明文通过密钥转为密文,

密码算法和协议:

对称加密;

单向加密;

公钥加密;

认证协议;

#

对称加密:

即单密钥加密,发送方和接收方都拿着相同的密钥(钥匙),发送方用密钥给报文加密,其他人想要查看报文内容就必须要有密钥,而此时只有接收方有;


[ " 甲和乙是一对生意搭档,由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定制作一个保险盒,将物品放入其中。他们打造了两把相同的钥匙分别保管,以便在收到包裹时用这个钥匙打开保险盒,以及在邮寄货物前用这把钥匙锁上保险盒。" ]

#

常用的对称加密算法:

DES,3DES,TDEA,AES等,

特点:

算法公开,计算量小,加密速度快,加密效率高;

必须实现协商好秘钥,秘钥的唯一性(只能双方知道),是的双方收发会拥有密钥量大,不易管理;

不能保证内容完整性,可用性,

公鈅加密:

公钥是从私钥提取的,公钥是隐藏在私钥中的,通过某种算法从私钥提取公钥,

[ " 甲在和乙建立会话的时候把自己的公钥(箱子)给乙,乙把报文放入箱子(用公钥加密)还给甲,而只有甲才有开这箱子的钥匙,而甲想发报文给乙,就需要乙先给甲一个公钥(钥匙),由此就解决了对称加密的管理多组密对儿的麻烦,此时甲可以同时给多个人提供箱子(公钥),能开这些箱子的只有甲才有的私钥(钥匙)" ]

常用的对称加密算法:

RSA、ElGamal

特点:

可靠,性能差,

常用的公钥加密算法:

SAR

甲乙通信,甲先将公钥发给乙,然后乙先将需要发给甲的报文用对称加密加密,(此时甲不知道对称加密密码),然后乙将对称加密的密码用甲给的公钥加密,完成后附加到报文后面,然后发给甲,甲拿到乙发的后,先用公钥解密那串对称秘钥,然后再用那串对称秘钥解密报文,


缺点,不能保证内容完整性,可用性,

单向加密:

提取数据指纹的特征码,通过特征码判断内容是否被修改,


甲乙通信,甲先将公钥法给乙,先生成特征码,并用乙自己的私钥加密它,然后附加到内容后面,然后生成一次性会话秘钥(对称加密),乙再用甲的公钥加密这段对称密钥,并附加到后面,发过去,

甲解密的时候先用自己的私钥解密这数据得到对称密钥,再用密钥解密这内容,然后在用同样的单向加密验证特征码,查看内容是否正常;



CA 证书授权机构,

加密算法和协议:

对称加密:DES,3DES,AES ...

公钥加密:RSA,DSA,ELGamal ...

单向加密:MD5,SHA1,SHA256 ...

密钥交换:IKE,DH

PKI:Public Key Infrastructure,

签证机构:CA

注册机构:RA

吊销机构:CRL

证书存取库

x.509:定义了证书结构和认证协议标准(尊崇规则版本)

版本号

序列号

签名算法ID

发行者名称

有效期

主体名称

主体公钥

发行者唯一标识符

主体的唯一标识符

扩展

发行者的签名

ssl:secure socket layer

tls:transport layer security

slsv1 和 sslv3没多大区别,

ssl/tls


http(80/tcp) --> ssl --> https(443/tcp)

http和https是完全不同的协议,


openssl 是ssl协议的实现,它有三部分组成:

openssl 多用途的命令工具,各功能分别使用子命令实现;

libcrypto:公共的加密库;

libssl:ssl协议的实现;

#

openssl命令行;

对称加密:

工具:openssl enc,gpg

算法:des,3des,aes ...

enc

openssl enc -e -des3 -a -salt -in WHEREFILE -out WHEREFILE

enc是工具;-des3是算法,-e 表示加密,-a,-salt表示加介质,

  -in后面的表示要加密的文件,-out后面的表示加密后地址和名字;

openssl enc -d -des3 -a -salt -in WHEREFILE -out WHEREFILE

enc是工具;-des3是算法,-d 表示解密,-a,-salt表示加介质,

  -in后面的表示要解密的文件,-out后面的表示解密后地址和名字;

单向加密:这是校验码,用来做对比的,生成不是解压;

工具:openssl dgst ...

算法:md5,sha1,sha256 ...

openssl dgst -md5 -salt WHEREFILE

MAC:消息验证,保证传输数据的完整性;

生成用户密码:

openssl passwd -1 -salt SALT

生成随机数:

openssl rand -hex NUM

NUM:表字节 每个字符为4为,因此,两个字符为一个字节;

公钥加密:

加密:

算法:RSA,ELGamal

工具:gpg,openssl reautl

数字签名:

算法:RSA,DSA,ELGamal

秘钥交换:

算法:公钥加密,DH

#

生成秘钥对儿:

openssl genrsa -out /root/file.key 2048

genrsa:指明是rsa密对儿,-out指定生成密钥保存位置路径 2048是多长,

bash中,( )小括号表示子shell里执行,

(umask 077;openssl genrsa -out /root/file.key 2048)  # -out可以不指定

从私钥提取公钥:

openssl rsa -in /root/file.key -out /root/file.sk -pubout # -out可以不指定

openssl自建CA:

x.509证书

构建私有CA:

openssl的主配置文件:/etc/pki/tls/openssl.cnf  # 构建私有CA的配置文件,

[CA_default]

dir: CA的主目录

certs: 已颁发证书的存储位置

crl_dir:已吊销证书的存储位置

database:证书索引文件

new_certs_dir:新颁发证书的存储位置

certificate:CA证书文件

serial:证书颁发时的当前序列号

crlnumber:吊销证书的当前序列号

crl:当前使用的CRL

private_key: CA私钥

RANDFILE:私有随机数生成器文件

构建私有CA步骤:

1,创建私钥,

2,生成自签署证书,

req子命令:生成PKCS#10格式的证书签署格式,

-new:生成新的证书签署请求;

-key /file 私钥文件路径

-days n 证书有效时长;(天)

-out /file 生成的证书放在哪儿;

-x509:专业于CA生成自签证书时;

openssl req -new -x509 -key /file -days 365 -out file

私有CA,国家,省份,城市,公司,部门,主机名,都必须一样,

# touch ./{index.txt,serial} 会自动生成,

echo 01 > serial

服务器请求CA认证:

1,本地生成CA

openssl genrsa -out /file 2048

openssl req -new -key /file -out /newfile -days 365

然后把生成的newfile给CA服务器让它认证;

man ca

openssl ca -in /file -out /nfile -days 365

把对应的生成的nfile文件拿回来,

查看证书中的相关信息

# openssl x509 -in /file -noout -text 

ok

吊销证书:

1,获取证书的serial(序列号)

# openssl x509 -in /file --noout -serial -subject

2,CA

1,根据证书持有者提交的序列号和subjet的

2,openssl revoke /etc/pki/CA/newcerts/file

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

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

4,生成/更新证书吊销列表

# cd /etc/pki/CA/crl

#openssl ca -gencrl -out thisca.crl

注意:查看crl文件方法

# openssl crl -in /file -noout 

#