linux加密认证全面分析

本文发布时间: 2019-Mar-21
基础了解篇:(1)对称加密在对称加密算法中,数据发信方将明文(未加密前的数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文(加密后的数据)发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。也就是说加密和解密使用相同的密码,对称加密解密的特点是运算相对非对称加密解密简单、速度块。具有代表性的有DES、AES 3DES。NAST:DES(Data Encryption Standard)数据加密标准,使用56位的密钥实现8轮置换进行加密。AES(Advanced):高级加密标准,使用的是128位,192位,256位长度的密钥,可以随意选择。(2)非对称加密/解密非对称加密算法在加密和解密时使用不同的密码。如果使用公钥(是从私钥中提取出来的)对数据进行加密,使用与之配对的私钥解密;如果用私钥对数据进行加密,那么只有用配对的公钥才能解密。非对称加密的安全性是基于数学函数,特点是运算复杂、速度慢;所以很少有人拿来为大量数据加密。具有代表性的有RSA、DSS、ECC。解析:私钥公钥适于做身份验证不适于做网络加密公钥私钥能保障数据的机密性适于加密认证(3)单向加密特点:不管加密的数据多长都会定长输出;不可逆转即无法将得到的数据在逆着解密;但是会形成只要数据微小的变化就会导致结果的巨大变化也就是雪崩效应。单项加密也可以实现数据完整性和实现身份的验证。关于实现的过程笔者懂但是无法描述清晰只好借助某大神表述:完整性验证:A先用单向加密数据将得到的数据再用自己的私钥加密附在数据之后发给B;B收到数据后若能用A的公钥解密出加过密的特征码则说明这就是A发来的数据,若用单向加密数据能得到和A发来的一模一样的特征码说明此数据没被别人篡改过这样就保证了数据的完整性身份验证:A用单向加密要发给B的数据得到特征码,再用自己的私钥加密此特征码,将加过密的特征码附加在数据之后A会用自己生成的对称密钥加密这两段数据再用A的公钥加密生成的密钥再次附件在加过密的两段数据之后发给B;B收到数据后用自己的私钥解密出密码然后用此密码解密出数据,若B能用A的公钥解出附加在数据之后的特征码就说明这就是A发来的数据,若B用单向加密得到的数据特征码和A发来的一模一样则说明此数据未被篡改过如此一来身份验证,数据完整性和数据加密便都可实现了但此过程也会遇到无法保证得到的公钥就是要通信的一方的公钥。说实话这位大神的表述我晕了,望各位看客能够清晰对待啊!!小加密认证结:利用以上三种加密机制完成一次完整意义上的加密通信:1、发送方使用选定的单向加密算法计算原始数据的特征码;2、发送方使用自己的私钥加密特征码,附加于原始数据后面;3、发送方生成一次性对称密钥,并使用此密钥加密数据(原始数据+加密后的特征码);4、发送方使用接收方的公钥加密一次性对称密钥,附加于加密数据后面5、发送;1、接收方使用自己的私钥解密加密的一次性对称密钥;2、使用对称密钥解密数据,得到加密的特征码和原始数据;3、使用发送方的公钥解密加密的特征码;4、使用与发送方相同的单向加密算法重新计算数据的特征码,并与解密出的特征做比较;PKI是Public KeyInfrastructure的缩写,是指用公钥概念和技术来实施和提供安全服务的具有普适性的安全基础设施。一个典型、完整、有效的PKI应用系统至少应具有以下部分:端实体(申请者)、注册机构(RC)、签证机构(CA)、证书撤消列表(CRL)发布机构、证书存取库。操作实践篇:OpenSSL工具的使用:OpenSSL 为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。Openssl主要有三部分组成:libcrypto:加密解密程序库libssl:实现ssl功能openssl:多功能多用途的命令行程序1)显示版本信息:使用命令openssl version[root@localhost ~]# openssl versionOpenSSL 1.0.0-fips 29 Mar 20102)加密测试:使用命令openssl enc加密:[root@localhost ~]# cp /etc/fstab ./ #复制一个文件进行加密测试[root@localhost ~]# lsanaconda-ks.cfg fstab install.log.syslog zsh-4.3.10-5.el6.x86_64.rpmFile install.log xx.sh[root@localhost ~]# openssl enc -des3 -in fstab -e -out fstab.des3 #加密enter des-ede3-cbc encryption password: #输入密码Verifying - enter des-ede3-cbc encryption password: #再次输入密码,确认[root@localhost ~]# cat fstab.des3 #查看加密结果Salted__(? ).q?.?.Os解析:openssl enc指定加密的类型,-in指定要加密的文件,-e表示加密,-out表示指定加密后要保存的位置3)解密测试:也是使用openssl enc:[root@localhost ~]# rm -rf fstab #将文件删除[root@localhost ~]# openssl enc -des3 -d -in fstab.des3 -out fstab.txt #解密文件enter des-ede3-cbc decryption password: #输入加密的密码[root@localhost ~]# cat fstab.txt #查看结果## /etc/fstab# Created by anaconda on Fri Jul 12 18:24:30 2013## Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info#/dev/mapper/vg0-root / ext4 defaults 1 1UUID=b60d1298-6614-4daa-89d2-1af13f7e9a66 /boot ext4 defaults 1 2/dev/mapper/vg0-usr /usr ext4 defaults 1 2/dev/mapper/vg0-var /var ext4 defaults 1 2解析:openssl enc指定加密的类型,-d表示解密,-in指定加密后的文件,-out表示指定解密后要保存的位置4)获取文件特征码:使用命令openssl dgst[root@localhost ~]# openssl dgst -md5 fstab.txt #获取特征码MD5(fstab.txt)= 6e4fe954c8b3e71a44b6c19f4a735453[root@localhost ~]# openssl dgst -md5 -hex fstab.txt #获取16进制特征码,默认是可省略MD5(fstab.txt)= 6e4fe954c8b3e71a44b6c19f4a735453[root@localhost ~]# vim fstab.txt #编辑一下此文档[root@localhost ~]# openssl dgst -md5 -hex fstab.txt #重新获取特征码MD5(fstab.txt)= b85044cee63d32fa77dcc2e0c79b90bd #几乎都不同,这就是雪崩效应小拓展:使用md5sum同样可以获取文件特征码[root@localhost ~]# md5sum fstab.txtb85044cee63d32fa77dcc2e0c79b90bd fstab.txt #获取结果是相同的5)测试当前主机支持加密算法的速度:使用命令openssl speed[root@localhost ~]# openssl speed des-ede3 #测试des3的加密算法速度(不加参数会将所有算法都测试一遍)Doing des ede3 for 3s on 16 size blocks: 1838583 des ede3's in 2.99sDoing des ede3 for 3s on 64 size blocks: 461948 des ede3's in 3.00sDoing des ede3 for 3s on 256 size blocks: 108654 des ede3's in 2.99sDoing des ede3 for 3s on 1024 size blocks: 28366 des ede3's in 3.00sDoing des ede3 for 3s on 8192 size blocks: 3671 des ede3's in 2.99sOpenSSL 1.0.0-fips 29 Mar 2010built on: Thu Feb 21 23:42:57 UTC 2013options:bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) aes(partial) blowfish(idx)compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DMD32_REG_T=int -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DWHIRLPOOL_ASMThe 'numbers' are in 1000s of bytes per second processed.type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytesdes ede3 9838.57k 9854.89k 9302.82k 9682.26k 10057.80k6)随机生成随机数 openssl rand:[root@localhost ~]# openssl rand -hex 4 #随机生成8位的随机数5e3acc9c7)计算密码值 openssl passwd:[root@localhost ~]# openssl passwd -1 -salt 12345678 #通过salt后加密计算密码值Password: #输入密码$1$12345678$0ME5N6oDyoEAwUp7b5UDM/ #生成的值解析:其中-1表示基于MD5的加密算法;-sart添加一些额外数(一般为8位)尽量使用无规律的随机数。更多请参考man sslpasswd[root@localhost ~]# openssl passwd -1 -salt `openssl rand -hex 4` #使用salt为随机数计算密码值Password:$1$c4d7ecb7$FUfRyYSh0OHTCp0D4paqr.8)生成RSA算法的私钥:openssl genrsa:[root@localhost ~]# openssl genrsa 1024 > mykey.rs #也可用openssl genrsa -out mykey.rs 1024Generating RSA private key, 1024 bit long modulus............++++++.............++++++e is 65537 (0x10001)[root@localhost ~]# cat mykey.rs -----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQCfSs+B4SngclkdU32dpsEurEQQhmmKg5EbCGD6mqcxhcZQpBAhoG2O60/9js1NOcqjUug58HvEeVOY6khnD7XyLoNrCjYm2DnPaRRcATa70ijUTmqk1hzwLZAp81L22mf4C4tkBuayc1sCS/F+hZVxnKXd3AtIuVE0DczCK8NkmQIDAQABAoGAf24Nis1h/tf7SmacOx5HtNrCqKWekNynnISbcF+AGTH3cFOPRBdfDdJZb3Jp解析:openssl genrsa后可直接跟位数,默认为512位;也可使用重定向将内容保存在某文件中,若想加密私钥可使用openssl genrsa直接跟加密算法进行加密;更多请参考man genrsa由于是私钥所以不应该让别人具有查看权限的所以要改为600或者400权限或者使用如下命令定义权限获取私钥:[root@localhost ~]# ls -ltotal 2276-rw-------. 1 root root 2409 Jul 12 18:47 anaconda-ks.cfg-rw-r--r-- 1 root root 887 Aug 5 23:32 mykey.rs #默认所有人都有权限[root@localhost ~]# (umask 077; openssl genrsa -out /root/mykey2.pri 2048) #mask定义权限获取私钥Generating RSA private key, 2048 bit long modulus........................................................+++....................+++e is 65537 (0x10001)[root@localhost ~]# ls -ltotal 2280-rw------- 1 root root 1679 Aug 5 23:57 mykey2.pri #文件权限解析:谨记这里使用mask设置权限一定要加上括号不然后面创建所有的文件都会变成此权限的,因为它是一直生效的;使用括号表示此命令在一个子shell中执行,完成子shell退出9)生成RSA的公钥openssl rsa[root@localhost ~]# openssl rsa -in mykey.rs -puboutwriting RSA key-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfSs+B4SngclkdU32dpsEurEQQhmmKg5EbCGD6mqcxhcZQpBAhoG2O60/9js1NOcqjUug58HvEeVOY6khnD7XyLoNrCjYm2DnPaRRcATa70ijUTmqk1hzwLZAp81L22mf4C4tkBuayc1sCS/F+hZVxnKXd3AtIuVE0DczCK8NkmQIDAQAB-----END PUBLIC KEY-----解析:使用openssl rsa –in 指定私钥文件使用-pubout显示公钥信息10)证书签署请求openssl req数字证书主要包含以下部分:版本号(version);序列号(证书本身在CA中惟一标识);签名算法标志;发行者名称;有效期;证书主体名称:(组织(主机),个人);证书主体公钥信息;发行商惟一标志;证书主体的惟一标志;扩展;签名。[root@localhost ~]# openssl req -new -key /root/mykey.pri -out /root/myreq.csr #证书签署请求You 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.magedu.com #证书拥有者名称,若在必须为用户访问时的名称,若使用域名访问这里是域名,若是IP地址这里一定是IP地址Email Address []:[email protected] #邮箱地址(可省略不写)Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []: #将请求加密起来输入密码,不想直接回车即可An optional company name []:#这些要输入的组织信息可以在[root@localhost ~]vim /etc/pki/tls/ openssl.cnf进行更改默认选项设置,这里就不予以说明了;需要注意的是Common Name一定不能使用默认选项啊!!#这样证书申请就结束了。解析:openssl req(证书签署请求和证书生成工具)中-key指定私钥文件的路径(可自动完成提取公钥功能);-new指定证书申请;-days明确指定证书申请有效使用期限;-out 将此证书保存为什么文件,通常为.csr结尾的文件;其他更多请man req11)如何自建CA查看解析配置文件[root@localhost ~]# cd /etc/pki/tls/ #openssl配置文件目录[root@localhost tls]# vim openssl.cnf #编辑配置文件####…前方不重要已省略…####tsa_policy3 = 1.2.3.4.5.7####################################################################[ ca ] #子命令;更改只对子命令生效default_ca = CA_default # The default ca section####################################################################[ CA_default ]dir = /etc/pki/CA # Where everything is kept #自建CA的工作目录certs = $dir/certs # Where the issued certs are kept #指定当前CA的证书存取库的存放位置crl_dir = $dir/crl # Where the issued crl are kept #指定证书撤销列表所在工作目录database = $dir/index.txt # database index file. #将签署的证书制作成索引保存下来也就是数据库文件#unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject.new_certs_dir = $dir/newcerts # default place for new certs. #新签证书的位置certificate = $dir/cacert.pem # The CA certificate #CA自己的证书位置serial = $dir/serial # The current serial number #已签证书,序列号crlnumber = $dir/crlnumber # the current crl number #已吊销证书个数 # must be commented out to leave a V1 CRLcrl = $dir/crl.pem # The current CRL #当前的证书吊销文件是什么private_key = $dir/private/cakey.pem# The private key #证书颁发机构自己的私钥文件RANDFILE = $dir/private/.rand # private random number filex509_extensions = usr_cert # The extentions to add to the cert自建CA过程:生成一个私钥;[root@localhost tls]# cd /etc/pki/CA/[root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)Generating RSA private key, 2048 bit long modulus......+++...................+++e is 65537 (0x10001)申请自签证书[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365 #-x509指定证书格式(加这个选项表示自签证书不加表示申请证书);-days 365 使用期限一年You 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) []: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) []:ca.magedu.comEmail Address []:[email protected]创建一个序列号文件和一个数据库文件[root@localhost CA]# touch serial index.txt[root@localhost CA]# echo 01 > serial #让此序列号文件从01开始12)使用此CA帮别人签署证书:命令 openssl ca[root@localhost ~]# openssl ca -in myreq.csr -out mycert.crt -days 365 #签署证书Using configuration from /etc/pki/tls/openssl.cnfCheck that the request matches the signatureSignature okCertificate Details: Serial Number: 1 (0x1) Validity Not Before: Aug 5 18:17:55 2013 GMT Not After : Aug 5 18:17:55 2014 GMT Subject: countryName = CN stateOrProvinceName = Henan organizationName = Magedu organizationalUnitName = Tech commonName = www.magedu.com emailAddress = [email protected] X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: F5:21:BC:A2:8B:19:FC:41:DF:41:99:68:E7:90:4D:E5:3F:37:BF:A5 X509v3 Authority Key Identifier: keyid:AE:3D:F8:00:7A:A0:69:C5:B1:1C:F1:9A:20:B2:F0:B0:45:51:FC:32Certificate is to be certified until Aug 5 18:17:55 2014 GMT (365 days)Sign the certificate? [y/n]:y #是否确定签署1 out of 1 certificate requests certified, commit? [y/n]y #再次验证Write out database with 1 new entriesData Base Updated解析:openssl ca使用CA签署证书,-in 申请文件;-out生成证书文件(一般证书文件都是以.crt为后缀的文件;-days签署的天数);13)ssl专用的客户端测试工具:openssls_client#格式:openssl s_client -connect HOST:PORT –CAfile /path/to/cacertfile |-CApath /paht/to/cacertfiles_dir/ -ssl2|-ssl3|-tls1解析:-connect后指定哪个服务器:端口号;–CAfile /path/to/cacertfile 指定使用哪个CA证书去验证|或 -CApath/paht/to/cacertfiles_dir/使用哪个目录下的哪个CA去验证 -ssl2|-ssl3|-tls1指定ssl协议的版本续上篇博文《红帽系列文件共享服务解析》中的CA认证:怎么利用ssl对ftp进行加密认证传输?思路:自建CA—> 签署协议—> 测试验证过程:Ø自建CA,这里刚刚建立结束就不在重复了Ø给FTP申请一个证书颁发请求[root@localhost ~]# cd /etc/vsftpd/ #切换到Ftp目录下来[root@localhost vsftpd]# mkdir ssl #创建一个文件夹存放私钥[root@localhost vsftpd]# cd ssl[root@localhost ssl]# (umask 077; openssl genrsa -out vsftpd.key 2048) #生成私钥Generating RSA private key, 2048 bit long modulus.................................................................+++....................................+++e is 65537 (0x10001)[root@localhost ssl]# openssl req -new -key vsftpd.key -out vsftpd.csr #申请证书签署You 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) []:ftp.magedu.comEmail Address []:[email protected] enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:ØCA签署证书[root@localhost ssl]# openssl ca -in vsftpd.csr -out vsftpd.crt -days 365 #证书签署Using configuration from /etc/pki/tls/openssl.cnfCheck that the request matches the signatureSignature okCertificate Details: Serial Number: 2 (0x2) Validity Not Before: Aug 5 19:02:07 2013 GMT Not After : Aug 5 19:02:07 2014 GMT Subject: countryName = CN stateOrProvinceName = Henan organizationName = Magedu organizationalUnitName = Tech commonName = ftp.magedu.com emailAddress = [email protected] X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: BC:AC:5D:EE:D5:F6:E4:61:58:47:9A:93:C4:B3:F8:23:AB:93:E7:63 X509v3 Authority Key Identifier: keyid:AE:3D:F8:00:7A:A0:69:C5:B1:1C:F1:9A:20:B2:F0:B0:45:51:FC:32Certificate is to be certified until Aug 5 19:02:07 2014 GMT (365 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated[root@localhost ssl]# ls #查看vsftpd.crt vsftpd.csr vsftpd.key[root@localhost ssl]#Ø更改配置文件,实现基于ssl访问[root@localhost vsftpd]# vim vsftpd.conf#SSLssl_enable=YES #是否支持sslssl_tlsv1=YES #支持tlsv1ssl_sslv2=YES #支持sslv2ssl_sslv3=YES #支持sslv3allow_anon_ssl=NO #匿名用户无法访问force_local_data_ssl=YES #本地数据访问使用sslforce_local_logins_ssl=YES #本地用户登录使用sslrsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt #指定ssl证书rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key #指定ssl私钥文件Ø重新启动服务[root@localhost vsftpd]# service vsftpd reloadShutting down vsftpd: [ OK ]Starting vsftpd for vsftpd: [ OK ]Ø使用基于SSl登录系统解析:这里由于证书名称和ftp连接服务器的名称写的不一致所有会导致证书不匹配,所以以后我们要把证书名称设置一致。连接成功,这时所有的操作都是基于ssl证书进行了。总结:加密认证技术涵盖所有服务器;应认真对待好好熟练。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:08pm
栏目列表