互联网安全之-------openssl
在互联网通信中,比如QQ、MSN等等,如果我们进行交谈的内容没有被加密,这样的话别人都可以随访问了,这是不合适的,所有我们就要对我们通信的内容进行加密,然后再进行通信就相对比较安全了
在互联网上数据传输有两种:明文传输和加密传输。明文传输的协议有:ftp、http、smtp、telnet。但是为了数据的完整性和安全性,所以后来引用了加密等相关手段来保证数据的安全和完整性。
加密类型
加密类型 | 原理 | 常用的算法 | 优点 | 缺点 |
对称加密 | 双方使用同一种加密算法对数据进行加密解密 | DES, 3DES, AES | 加密速度快,适合对大量数据进行加密,可以保证数据的机密性 | 双方采用相同加密算法,这样无法保证数据的完整性,如果要加密的数据多的话,对秘钥无法有效的管理 |
非对称加密 | 身份验证:私钥加密,公钥解密 数据发送:公钥加密,私钥解密 | RSA DSS | 可以保证数据的可用性,和机密性 | 加密速度慢,要用的秘钥相当长 |
单项加密 | 直接利用加密算法对数据进行加密,只能加密不能解密 | md5,sha1 ,sha256, sha512 | 可以保证数据的完整性 | 不可解密 |
那么一个完整的数据发送是怎么样一个过程呢?
1、发送方使用选定的单向加密算法计算原始数据的特征码;
2、发送方使用自己的私钥加密特征码,附加于原始数据后面;
3、发送方生成一次性对称密钥,并使用此密钥加密数据(原始数据+加密后的特征码);
4、发送方使用接收方的公钥加密一次性对称密钥,附加于加密数据后面
5、发送;
1、接收方使用自己的私钥解密加密的一次性对称密钥;
2、使用对称密钥解密数据,得到加密的特征码和原始数据;
3、使用发送方的公钥解密加密的特征码;
4、使用与发送方相同的单向加密算法重新计算数据的特征码,并与解密出的特征做比较
对于非对称加密而言,获取对方的公钥非常关键,最简单的就是自己建一个站点,把
自己的公钥公布出去,但是别人在获得的时候,怎么能确保这公钥就是公布者的呢?
所以简单的公钥分发机制已经不能保证公钥来源合法性了,于是就有了分布式分发机制,最常见的就是数字证书了
数字证书
我们为什么要用到数字证书呢?大家想象一下,我们要进行通信的时候,怎么去保证对方一定是我们想要进行交流的那个人呢?做数字签名?那么怎么保证这数字签名是合法的呢?这时候就需要第三方机构,分发一种大家都认可的数字证书,比如说×××,当我们看到对方的数字证书的时候,是不是就确定了对方的身份了?
数字证书的格式:
数字证书:x.509v3(常用的)
版本号(version)
序列号():证书本身在CA中惟一标识;
签名算法标志 // 让使用者确定使用的哪种数据加密算法,以用来验证证书合法性
发行者名称
有效期:
证书主体名称:(组织(主机),个人)
证书主体公钥信息:
发行商惟一标志
证书主体的惟一标志
扩展:
签名:
PKI(Public Key Infrastructure)它是一种规范,定义了一个CA所具有的的机构
组成部分:
端实体(申请者)
注册机构(RC)
签证机构(CA)-->签证机构(CA)
证书撤消列表(CRL)发布机构
证书存取库
那我们如何去制作一个证书申请呢?如果我们仅要求对公司内部的员工分发证书,那么去第三方机构申请证书是需要一定费用的,这时候我们自己建立一个CA并给自己颁发一个证书,这样就好很多了
要想自建CA的话,我们要借助一个工具,OpenSSL,
openssl由三部分组成,
libcrypto:实现加密解密的工具,很多需要加密的程序都会调用这个库
libssl :实现ssl功能的
openssl :openssl的命令行工具
Openssl:常用的几个命令介绍
versinon 查看openssl的版本号
enc 加密
-des3 指定加密算法为des
-in 指定加密/解密文件
-e 加密
-d 解密
-out 制定将加密或者解密过后的文件存放的位置
例如:
将一个文件加密的过程我们就用:
openssl enc -des3 -in /path/to/somefile -e -out /path/to/somefile.des3
将加密过后的文件解密我们就使用:
openssl enc -des3 -in /path/to/somefile.des3 -d -out /path/to/somefile
dgst
-hex 以16禁止显示计算出的特征码
-out 保存的文件
例:以md5的算法获取一个文件的特征码
openssl dgst -md5 -hex /path/to/somefile
speed 速度测试工具
不带任何参数将每一种加密算法都测试一遍,指定加密算法的话,只测试指定的算法
生成私钥:
openssl genrsa num
num 指定生成秘钥的位数,默认是512位的,必须为2的n次方位
例如:
openssl genrsa 2^n > /path/to/keyfile
openssl genrsa -out /path/to/keyfile 2^n
对于私钥也是可以加密的
-des3 指定以des3的格式加密
-out 指定保存的位置
例:openssl genrsa -des3 2048
注:我们的私钥虽然加密,但是也不能让人随意看,所以我们应该把私钥文件的权限改为只有自己才能看
生成公钥
注:公钥是从私钥中中提取出来的:
rsa
-in 私钥所存放的位置
-pubout 提取公钥
例:
openssl rsa -in /path/to/keyfile -pubout 丛私钥中提取公钥
那如何申请证书呢
用到的命令 req
-in 指定从哪个文件读取
-key 指定私钥文件在哪
-new 实现制作证书申请
-days 指定该证书期望使用的时间
-out 把证书申请保存在那个文件下
例如:如何制作一个证书申请呢:
openssl req -new -key /path/to/private_key -out /paht/to/certificate.csr
下面我们就来实现自建CA,制作证书申请,分发证书的过程:
自建CA:
# cd /etc/pki/CA/
1、为CA生成一个私钥:
[root@www CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)Generating RSA private key, 2048 bit long modulus...........................+++.......+++e is 65537 (0x10001)
2、生成自签证书:
[root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CN //指定国家代码State or Province Name (full name) []:Henan //指定省份Locality Name (eg, city) [Default City]:Zhengzhou //制定城市Organization Name (eg, company) [Default Company Ltd]:magedu //指定组织名称Organizational Unit Name (eg, section) []:Tech //指定所在的部门Common Name (eg, your name or your server's hostname) []:www.magelinux.org //指定主机名Email Address []: //邮箱[root@www CA]#[root@www CA]# touch index.txt serial //提供序列号文件[root@www CA]# lscacert.pem certs crl index.txt newcerts private serial[root@www CA]# echo 01 > serial
注:这里做自签证书的时候必须要加-x509,不指定的话就是证书申请
这样的话我们自己的CA就创建好了,自签证书也好了,就可以拿着证工作了
3、签署证书:
# openssl ca -in /path/to/certreq.csr -out /path/to/certfile.crt(证书文件都以crt结尾) -days 365
是一个数字签名的过程
客户端
生成私钥
[root@www ~]# mkdir /key[root@www ~]# (umask 077; openssl genrsa -out /key/httpd.key 2048)Generating RSA private key, 2048 bit long modulus...............................................................................+++.........................................................+++e is 65537 (0x10001)[root@www ~]#
制作证书请求:
[root@www ~]# openssl req -new -key /key/httpd.key -out /key/httpd.csrYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:HenanLocality Name (eg, city) [Default City]:ZhengzhouOrganization Name (eg, company) [Default Company Ltd]:mageduOrganizational Unit Name (eg, section) []:TechCommon Name (eg, your name or your server's hostname) []:www.magelinux.orgEmail Address []:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:[root@www ~]#
签署证书:
[root@www ~]# openssl ca -in /key/httpd.csr -out /key/httpd1.csr -days 365Using configuration from /etc/pki/tls/openssl.cnfCheck that the request matches the signatureSignature okCertificate Details: Serial Number: 1 (0x1) Validity Not Before: Aug 27 06:15:30 2013 GMT Not After : Aug 27 06:15:30 2014 GMT Subject: countryName = CN stateOrProvinceName = Henan organizationName = magedu organizationalUnitName = Tech commonName = www.magelinux.org X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: A7:B0:1A:A0:BB:FB:AE:36:18:D0:72:1B:C5:A7:7C:8E:D5:F5:01:1F X509v3 Authority Key Identifier: keyid:7E:76:06:55:50:E5:CB:EE:F0:A7:F0:2E:DB:4D:CD:2B:54:C6:AF:39Certificate is to be certified until Aug 27 06:15:30 2014 GMT (365 days)Sign the certificate? [y/n]:
专用客户端测试工具:
# openssl s_client -connect HOST:PORT -CAfile /path/to/cacertfile|-CApath /paht/to/cacertfiles_dir/ -ssl2|-ssl3|-tls1
-connect 说明链接那个服务器的那个端口进行检测
-CAfile 指定使用那个CA证书进行检测
-CApath 指定那个路径下的CA证书,与-CAfile二选一使用
-ssl2 指定协议
-state 显示其状态
openssl中有如下后缀名的文件
.key格式:私有的密钥
.crt格式:证书文件,certificate的缩写
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式