SSL基础

###SSL基础
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。
TLS与SSL在传输层对网络连接进行加密。 Secure Socket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。
它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。 SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol)它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
###SSL握手协议(SSL Handshake Protocol)
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
功能:
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 加密数据以防止数据中途被窃取;
- 维护数据的完整性,确保数据在传输过程中不被改变。
服务器认证阶段:
- 客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
- 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
- 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
- 服务器回复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。 用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
###linux下安装OpenSSL
安装OpenSSL:
命令:
apt-cache search libssl | grep SSL
搜索得到libssl的最新版本,安装。
如果希望利用openssl的库进行开发,则需要安装apt-get install libssl-dev
OpenSSL的命令模式,以下是一些例子:
下面这个命令将使用Base64编码方法(Base64 Encoding)
对"Welcome to LinuxCareer.com"(欢迎访问LinuxCaeer.com)这个消息进行加密:
$ echo "Welcome to LinuxCareer.com" | openssl enc -base64 V2VsY29tZSB0byBMaW51eENhcmVlci5jb20K
上述这个命令的输出是一个经过加密的字符串,含有已经过编码的消息"Welcome to LinuxCareer.com"。想对经过编码的字符串进行解密,恢复成原始消息,我们就要颠倒顺序,加上-d选项,进行解密:
$ echo "V2VsY29tZSB0byBMaW51eENhcmVlci5jb20K" | openssl enc -base64 -d
上述加密易于使用,不过它缺少密码的一个重要特性,这个重要特性应该可用于加密。比如说,试着用密码”pass”对下列字符串进行解密:
U2FsdGVkX181xscMhkpIA6J0qd76N/nSjjTc9NrDUC0CBSLpZQxQ2Db7ipd7kexj
为此,就要再次使用OpenSSL,这回带-d选项和编码方法aes-256-cbc:
echo "U2FsdGVkX181xscMhkpIA6J0qd76N/nSjjTc9NrDUC0CBSLpZQxQ2Db7ipd7kexj" | openssl enc -aes-256-cbc -d -a
你恐怕已经猜想到了,要像上面那样用密码创建经过加密的消息,可以使用下面这个命令:
$ echo "OpenSSL" | openssl enc -aes-256-cbc -a enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password: U2FsdGVkX185E3H2me2D+qmCfkEsXDTn8nCn/4sblr8=
如果你想把OpenSSL的输出存储到文件中,而不是存储到STDOUT,只要使用STDOUT重定向”>”。将经过加密的输出存储到文件中时,你还可以删去-a选项,因为不再需要输出是基于ASCII文本的:
$ echo "OpenSSL" | openssl enc -aes-256-cbc > openssl.dat
enter aes-256-cbc encryption password:
Verifying -enter aes-256-cbc encryption password:
$ file openssl.dat
openssl.dat: data
想对openssl.dat文件进行解密,恢复至原始消息,请使用:
$ openssl enc -aes-256-cbc -d -in openssl.dat
enter aes-256-cbc decryption password:
OpenSSL
####对文件进行加密和解密
想使用OpenSSL对文件进行加密,其实就跟对消息进行加密一样简单。唯一的区别在于,我们不是使用echo命令,而是使用-in选项,后面跟以我们想进行加密的实际文件,并使用-out选项,这会指令OpenSSL将经过加密的文件存储到某个名称的文件中:
$ openssl enc -aes-256-cbc -in /etc/services -out services.dat
想对我们的服务文件进行解密,恢复成原样,请使用:
$ openssl enc -aes-256-cbc -d -in services.dat > services.txt
enter aes-256-cbc decryption password:
####对目录进行加密和解密
万一你需要使用OpenSSL对整个目录进行加密,首先需要创建gzip打包文件(tarball),然后用上述方法对该打包文件进行加密,也可以使用pipe,同时完成这两项任务:
# tar cz /etc | openssl enc -aes-256-cbc -out etc.tar.gz.dat
tar: Removing leading `/' from member names
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
想对整个etc/目录进行解密,并提取到当前的工作目录,请使用:
# openssl enc -aes-256-cbc -d -in etc.tar.gz.dat | tar xz
enter aes-256-cbc decryption password:
上述方法对自动备份加密目录来说相当有用。
###SSL证书相关知识
生产CA和CA签名的详细介绍
ubuntu openssl
ubuntu httpd apache2配置
ubuntu证书
「你还是一个人吗」
「难道我回变成一条狗吗」
「汪汪汪」