在互联网数据传输过程中,数据的安全私密性是及其重要的,所以就有数据的加密和解密过程;
加密方式
一、对称加密:
特性:
1、加密方/解密方使用同一个口令
2、将原文分割成固定大小的数据块,对这些块进行加密,数据块前后会有关联关系
缺陷:
1、密钥无法交换
2、无法进行身份验证
3、无法保证数据完整性
加密算法:
DES(56bits):数据加密标准
AES(128):高级加密标准
3DES:相当于对每个数据块应用三次DES加密算法
工具:gpg,openssl enc
二、非对称加密(公钥加密)
特性:
1、密钥交换(需要在互联网传输密钥)
2、用户身份认证(对方的私钥加密的只有对方的公钥能解密)
缺陷:
数据加密过程很慢
加密算法:RSA,EIGamal,DSA
密钥交换(IKE: Internet Key Exchange)DH算法:
A,B双方使用一个较大的质数(p)和一个生成器(g),在各自选择一个数字A(x),B(y)
A=g^x%p B=g^y%p;二者交换结果后再对各自选定的数字进行次方取值
(g^y%p)^x = (g^x%p)^y;至此完成了密钥交换,并且没有直接传输密钥。
工具:gpg,openssl rsautl
三、单向加密
特性:抽取数据特征码
1、One-Way
2、Collision-free
缺陷:
无法保证数据私密性
加密算法:
MD5,SHA1,SHA512,CRC-32(无法保证数据完整性)
工具:sha1sum, md5sum, chsum, openssl dgst
CA和PKI以及证书申请验证
CA(Certificate Authority):是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
PKI(Public Key Infrastructure):又称公开密钥基础设施,PKI体系结构采用证书管理公钥,通过第三方的可信机构CA,把用户的公钥和用户的其他标识信息捆绑在一起,在Internet网上验证用户的身份,PKI体系结构把公钥密码和对称密码结合起来,在Internet网上实现密钥的自动管理,保证网上数据的机密性、完整性。
上述图片大致描述了证书申请与验证的过程;其中申请证书方申请证书时,需要按规定填写申请表以及生成密钥提交申请,CA签署后发回给申请者;CA的证书是属于自签证书。
在互相得到了证书后,到CA获取公钥进行解密,解密成功可证实对方身份,之前还需要进行核实证书的有效期限和是否被吊销等信息。
OpenSSL实现私有CA
OpenSSL是一款功能强大的加密工具包。为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
openssl主要包括:
libcrypto:通用功能的加密库
libssl:用于实现TLS/SSL的功能
openssl:多功能命令工具(生成密钥、创建数字证书、手动加密解密数据...)
openssl具体的命令:
[X.X.X.73]#openssl -h openssl:Error: '-h' is an invalid command. Standard commands asn1parse ca ciphers cms crl crl2pkcs7 dgst dh dhparam dsa dsaparam ec ecparam enc engine errstr gendh gendsa genpkey genrsa nseq ocsp passwd pkcs12 pkcs7 pkcs8 pkey pkeyparam pkeyutl prime rand req rsa rsautl s_client s_server s_time sess_id smime speed spkac ts verify version x509 Message Digest commands (see the `dgst' command for more details) md2 md4 md5 rmd160 sha sha1 Cipher commands (see the `enc' command for more details) aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx idea idea-cbc idea-cfb idea-ecb idea-ofb rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 seed seed-cbc seed-cfb seed-ecb seed-ofb zlib #给了一个错误参数,能显示出具体命令
用openssl实现私有CA
先查看下openssl的配置文件:
[X.X.X.15]#vi /etc/pki/tls/openssl.cnf [ CA_default ] dir = /etc/pki/CA # 工作目录 certs = $dir/certs # 签署文件证书目录 crl_dir = $dir/crl # 吊销列表 database = $dir/index.txt # 数据库索引文件 #unique_subject = no # # new_certs_dir = $dir/newcerts # 当前签署的证书目录 certificate = $dir/cacert.pem # CA自身的证书 serial = $dir/serial # 当前签署的证书编号 crlnumber = $dir/crlnumber # 吊销列表编号 # crl = $dir/crl.pem # 当前使用的crl private_key = $dir/private/cakey.pem# CA的私有KEY RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert
配置文件中可以看到定义了CA默认的属性;了解到上述属性后就可以手动配置CA了:
1、切换到CA的目录下,生成密钥对
[X.X.X.15]#(umask 077;openssl genrsa -out private/cakey.pem 2048) Generating RSA private key, 2048 bit long modulus ................................................+++ ............................................................................+++ e is 65537 (0x10001) [X.X.X.15]#ll -l private/cakey.pem -rw------- 1 root root 1679 Mar 9 14:48 private/cakey.pem [X.X.X.15]# #括号是在子SHELL中执行命令,变量不会影响到父进程,由于是私有key,所以权限很重要,故;在括号内设置了umask值 #密钥生成的只有私钥,公钥是通过特定格式从私钥中提取的
2、生成自签证书
[X.X.X.15]#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365 You are about to be asked to enter information that will be incorporated into 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 blank For 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) []:HN Locality Name (eg, city) [Default City]:ZZ Organization Name (eg, company) [Default Company Ltd]:Linux Organizational Unit Name (eg, section) []:Centos Common Name (eg, your name or your server's hostname) []:ca.mage.com #这项很重要;一般是主机名 Email Address []:caadmin@linux.com [X.X.X.15]#ls cacert.pem certs crl newcerts private
3、在CA下创建index.txt等文件
[X.X.X.15]#touch index.txt serial crlnumber [X.X.X.15]#ls cacert.pem certs crl crlnumber index.txt newcerts private serial [X.X.X.15]#echo 00 > serial #给一个初始号码;否则签署证书时会报错 [X.X.X.15]# #这几个文件默认是没有的,需要手动创建,否则签署证书时会报错
用openssl实现证书申请
1、在主机上生成密钥,保存至应用此证书的服务的配置文件目录下
下面以httpd作为实例实验
#在httpd目录新建一个专门存储的目录ssl [X.X.X.73]#pwd /etc/httpd/ssl [X.X.X.73]#(umask 077;openssl genrsa -out httpd.key 1024) Generating RSA private key, 1024 bit long modulus ..................++++++ ........++++++ e is 65537 (0x10001) [X.X.X.73]#ll total 4 -rw------- 1 root root 887 Mar 9 11:32 httpd.key
2、生成证书签署请求文件
[X.X.X.73]#openssl req -new -key httpd.key -out httpd.csr You are about to be asked to enter information that will be incorporated into 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 blank For 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) []:HN Locality Name (eg, city) [Default City]:ZZ Organization Name (eg, company) [Default Company Ltd]:Linux Organizational Unit Name (eg, section) []:Linux Common Name (eg, your name or your server's hostname) []:73.soul.com Email Address []:73@soul.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [X.X.X.73]#ls httpd.csr httpd.key [X.X.X.73]# #与CA上证书生成是差不多的,区别在于主机名和多了个密码,密码这里留空 #由于是内部使用,前面的信息填写必须一致
3、请求文件发送给CA
#在CA的主机/etc/pki下新建一个文件专门存储审核文件 [X.X.X.15]#pwd /etc/pki/sign # # [X.X.X.73]#scp httpd.csr X.X.X.15:/etc/pki/sign root@X.X.X.15's password: httpd.csr 100% 676 0.7KB/s 00:00 [X.X.X.73]#
CA签署证书
[X.X.X.15]#openssl ca -in httpd.csr -out httpd.crt -days 3655 Using configuration from /etc/pki/tls/openssl.cnf Check that the request matches the signature Signature ok Certificate Details: Serial Number: 0 (0x0) Validity Not Before: Mar 9 07:19:50 2014 GMT Not After : Mar 11 07:19:50 2024 GMT Subject: countryName = CN stateOrProvinceName = HN organizationName = Linux organizationalUnitName = Linux commonName = 73.soul.com emailAddress = 73@soul.com X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: B1:4A:39:93:C1:9A:10:C7:81:67:74:E2:4D:97:C3:A1:0A:AD:1F:62 X509v3 Authority Key Identifier: keyid:B5:12:83:5A:54:B0:1B:98:34:4E:D9:A6:31:95:5F:14:BB:61:D9:EF Certificate is to be certified until Mar 11 07:19:50 2024 GMT (3655 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated # # [X.X.X.15]#scp httpd.crt X.X.X.73:/etc/httpd/ssl root@X.X.X.73's password: httpd.crt 100% 3803 3.7KB/s 00:00 [X.X.X.15]# # [X.X.X.73]#ls httpd.crt httpd.csr httpd.key #对方主机以收到
至此一个简单的CA以及申请和签署步骤已完成。
还有一个可以吊销证书的命令:
openssl ca -revoke /path/to/somefile.crt
这里就不在测试。证书吊销需要在用户申请或者用户未付款的情况下。
正常状态下是不能操作的。
这种CA一般应用于内部局域网,如大范围使用或专业使用,建议使用OpenCA或者购买专业公司提供的。
文章中可能存在很多不足或错误,欢迎纠正!