标签:new 组织 商业 基础 创建 base 必须 创建私有CA info
在互联网发展早期,NetSpace公司发明了第一个浏览器及Web服务器。而http协议传输数据是明文的,为了基于加密的机制实现http,NetSpace公司在TCP层和应用层之间引入了半个层,这半层就是SSL。SSL不是一个软件,可以将它理解为一个库。当应用层的某种协议如果传输数据之前调用了SSL的功能,那么这个协议就实现了加密的功能。例如:http协议本身是不加密的,数据在应用层封装完之后本来应该交给传输层,但由于NetSpace在TCP层和应用层之间加入了SSL层,而SSL本身就是实现数据通信的,因此http摇身一变成为了https。同理,smtp就变成了smtps,ftp就成了ftps。
因此,众多应用层的明文协议通过调用SSL的功能来实现数据的安全传输了。而SSL只是一个库,这就意味着若需要使用SSL的功能只需要在系统上提供SSL的库文件即可。如此一来,就能将http封装成https,意味着可以支持https的协议了,但http本身是不会经由ssl封装的,所以http和https是两种不同的协议,但它们在应用层实现的功能是相同的,只是底层的协议栈等其它方面不同。
但SSL本身只是某一家公司研发的协议,不具有普适性,所以国际标准化组织开发了更为开放的TLS。
SSL:Secure Socket Layer,安全的套接字层;SSL v2、SSL v3目前还在使用,但v1不再使用。
TLS:Transport Layer Security,传输层安全;TLS v1相当于SSL v3,它们的实现原理和机制差不多。
思考一个问题,在两台主机之间,SSL会话是怎么建立的?
SSL会话建立过程:
以http协议为例,http是基于TCP的,因此,双方在建立http会话之前要先进行三次握手。一旦有了https,在TCP三次握手之后,此时还不能直接通信;首先,客户端向服务器端发起会话请求(客户端通过浏览器输入地址开始通信);其次,服务器端此时不会直接与客户端传输http数据包,而是跟客户端协商建立SSL会话(包括协商使用协议版本,SSL v2、SSL v3、TLS v1...),Server将自己的证书发送给客户端,客户端验证证书是否可信、证书的完整性;第三步,客户端生成一个会话密钥(客户端通过随机数生成的随机的对称密钥(使用非对称加密速度太慢)),并通过从证书的获取的公钥加密对称密钥;第四步,客户端将加密的对称密钥发送给服务器端。接下来,Server就可以通过接收的密钥加密数据发送至客户端实现数据通信了。
在这个过程当中,不仅需要协商加密协议,还需要协商对称加密的算法。
对称加密:
DES(Data Encription Standard,数据加密标准,56bit长度,比较早的成熟算法):美国国家安全局在征集算法时,由IBM公司所提供的完全公开的算法。随着计算机的发展,DES因为不安全已经很少被使用了。
3DES:将数据DES 3次,较常用,但其安全性不被信任。
AES:(Advanced Encription Standrand,高级加密标准)128bit
AES变种:AES192,AES256,AES512(密钥越长,安全性越高,速度越慢)
Blowfish
实现对称加密的工具:openssl、gpg
单向加密:
MD4
MD5(128bit对称输出长度)
SHA1(169bit对称输出长度)
SHA变种:SHA192、SHA256、SHA384(SHAX,X为输出长度)
CRC-32:(循环冗余校验码)不是一种加密算法,而是一种校验码机制。应用非常广泛,但不提供安全性。可能会出现输入不一样但输出一样的情况。
公钥加密(两种核心:加密/签名):
应用实例:
身份认证(数字签名)
数据加密
密钥交换
RSA(既是算法,也是公司名称(三位创始人的名称),分为公开和非公开的加强算法):可用于实现加密、签名。
DSA(美国国家安全局的,公开的):只能实现签名。
ELGamal:(商业算法,有偿使用)
PKI,Public Key Infrastructure,公钥基础设施,定义了CA、CA彼此之间的信任关系及CA的证书吊销列表等。PKI的核心是CA。
CA,Certificate Authority
不同标准下的证书格式不相同(如:身份证也有1代,2代的概念),目前比较流性的证书格式是x509,也存在pkcs12等格式。
x509包含的内容:
公钥及其有效期限
证书的合法拥有者
证书该如何被使用
CA的信息(哪个机构、公司的服务器地址等等)
CA签名的校验码
PKI的实现:(TLS/SSL与OPGPG实现证书的管理机制不同或者CA的信任关系的传递机制略有不同)
1.TLS/SSL:使用的正是x509格式的证书
2.OPGPG:证书格式与TLS/SSL差不多
OpenSSL是一个软件,它是SSL的开源实现,几乎实现了市面上主流的加密算法,工作性能好。
1、OpenSSL的组成:
(1).libcrypto(库文件):通用加密库(提供了各种加密函数)
(2).libssl:TLS/SSL的实现(能够实现认证、数据安全传输及数据完整性的工具),基于会话的、实现了身份认证、数据机密性、会话完整性的TLS/SSL库。
(3).openssl:多用途的命令行工具(能够实现单向加密、对称加密、非对称加密、生成一对密钥、还可以简单的模拟证书颁发机构)
实现私有证书颁发机构(很多加解密功能依赖于证书机构)
子命令
openssl version #查看openssl版本
openssl speed [加解密算法名称] #测试openssl对各种加密算法的速度
enc子命令:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id] #openssl enc命令的语法
加密:
例:openssl enc -des3 -salt -a -in inittab -out inittab.des3
解密:
例:openssl enc -des3 -salt -d -a -in inittab.des3 -out inittab
使用openssl计算一个文件的特征码(提取数据指纹):
md5sum 文件名 #计算文件的md5校验码
sha1sum 文件名 #计算文件SHA1的校验码
使用openssl计算文件特征码:(dgst子命令)
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-hmac key] [file...]
例:
openssl dgst -md5 文件名 #使用openssl计算文件的MD5的校验码
openssl dgst -sha1 文件名 #使用openssl计算文件的SHA1校验码
生成与用户密码格式相同的字符串:
openssl passwd -1 [-salt 字符串]
生成伪随机数:
openssl rand -salt [随机数字指定加密后字符串的长度]
(1).生成一对密钥(若需给别人发证,自己得先有证)
通过RSA生成私钥:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine
id] [numbits]
生成私钥:openssl genrsa -out /PATH/TO/SOMEFILE NUMBERS(密钥长度)
提取公钥:openssl rsa -in /PATH/TO/SOMEFILE -pubout
将密钥保存在文件中示例:openssl rsa -in /PATH/TO/SOMEFILE -putout > server.key
生成并修改文件示例:(umask 077;openssl genrsa -out server1024.key 1024) #()中的命令会在子shell中运行,运行完子shell销毁
(2).生成自签署证书
openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-rand file(s)] [-newkey rsa:bits] [-newkey alg:file] [-nodes] [-key filename] [-keyform PEM|DER] [-keyout filename] [-keygen_engine id] [-[digest]] [-config filename] [-subj arg] [-multivalue-rdn] [-x509] [-days n] [-set_serial n] [-asn1-kludge] [-no-asn1-kludge] [-newhdr] [-extensions section] [-reqexts section] [-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-batch] [-verbose] [-engine id]
例:openssl req -new -key server1024.key -out server1024.crt -days 365
(1) 修改配置文件:
vim /etc/pki/tls/openssl.cnf
注:上图中的文件都需要建立
(2) 为CA准备私钥和证书:(自签证书)
(3) 准备目录:
至此,自签证书准备完成,可作为CA服务器使用了,其它人就可以申请了。比如再启动一个主机,在另外一个主机上生成一段密钥再生成一个证书颁发申请,发送给CA服务器。CA服务器一签即可生成证书。
假设建立一个Web服务器,让Web服务器的配置文件在/etc/httpd目录下,在此目录下创建ssl目录用于准备证书和密钥。(具体放在什么位置,可按自己需要修改,一般而言放在配置文件目录下即可)
任何一个应用若想得到证书,必须要有公钥,因为需要从私钥中提取公钥,(刚刚创建的公钥和私钥是CA的公钥私钥,这与Web服务器无关,两者不能混淆。每一种应用都需要有自己的证书(如Web服务器,邮件服务器需各自有自己的证书)),不同的服务尽可能使用不同的证书。要有证书得有公钥,要有公钥得有私钥,因此:
生成私钥:
因为需要到CA服务器申请证书,故需要一个证书颁发请求(包括个人信息、个人地址等信息),因此:
生成申请:
注:(1) 生成请求的命令不用-x509选项,-x509用于生成自签证书;
(2) 规范来说文件应以.csr(证书签署请求)结尾,见名知意;
(3) 私有证书机构名需与CA保持一致
发送请求:(不在同一台服务器时需要发送,此处位于同一台服务器上直接签署即可)
签署证书:
openssl ca(进入CA模式) -in [请求的文件路径] -out [生成的证书文件的路径] [-days 指定证书有效时间]
签署完成!
查看CA记录信息:
生成测试用的证书:(不建议使用)
RedHat为我们提供了另外一个工具,用于快速生成一个测试使用的zhengsh(不可用于生产环境)(/etc/pki/tls/certs目录下)使用make命令:
因为最后生成的文件(如:httpd.pem)中包含了私钥,故只可在测试中使用。
测试:
标签:new 组织 商业 基础 创建 base 必须 创建私有CA info
原文地址:https://www.cnblogs.com/long-cnblogs/p/10445903.html