openSSL详解
openSSL: 有3功能库组成:
libcrypto:用来实现加密、解密的工具,一些需要用到加密解密工具的程序可能都要调用libcrypto库,openssl在装完Linux时都会自动装上去;就是因为它里面的加密解密库为众多程序所依赖;
libssl:实现ssl功能的,要想实现https协议,那么https会话的那部分功能,通常都要调用libssl来完成;大多数要用到ssl的程序都要调用libssl库来完成ssl会话,
httpd这个程序软件中有个模块mod_ssl,是基于libssl编程所实现的,能够让
# openssl version 查看openssl的版本号,
Standard commands :标准命令
Message Digest commands:信息摘要的命令: dgst:调用加密算法;
Cipher commands:主要用于加密解密档案的命令
加密
:格式:# openssl enc -des3 -in/path/to/somefile -e -out /path/to/somefile.des3
例如:加密一个文件;
在当前目录下加密fstab文件,
#openssl enc –des3 –infstab –e : -des3说明是使用des3加密的;-in 指定文件;-e 表示加密,可以不写,默认也是加密 enc就是加密
如果想保存:#openssl enc –des3 –in fstab –e --out fstab.des3 -out:保存
解密:使用–d
格式:# openssl enc-des3 -in /path/to/somefile.des3 -d -out /path/to/somefile
例:先删除fstab文件:#rm fstab
然后在解密:# openssl enc des3 –d infstab.des3 –out fstab 使用-out保存文件
获取特征码:使用 # openssl dgst –md5 fstab
使用–hex 表示使用十六进制编码:可以不使用,默认就是十六进制编码;
信息文件的雪崩效应:
例:编辑文件fstab:在前面第一行加个#
格式:# openssl dgst -md5 -hex /path/to/somefile
同样也可以使用 # med5sum fstab :无论使用哪种计算工具,只要算法相同获得特征码都相同;
算法还有sha1
# openssl dgst -md5-hex /path/to/somefile
测试当前主机所支持的加密算法的速度:speed
#openssl speed :后不带测试条件,他会对所有的测试方式进行测试;
Passwd
# man sslpasswd 查看帮助
生成随机数:
格式# openssl rand -base64 num
# openssl rand -hex num
使用方式:# openssl passwd -1 –salt :-1表示使用md5算法
Rand :是openssl生成随机数的命令
查看rand: # man sslrand
使用格式:# opensslrand –base64 4 :4表示随机生成4位数字; -base64
表示生成方式;
#openssl rand –hex 4
给salt生成随机数:# openssl passwd -1 -salt 'openssl rand -hex4'
Genrsa:
生成私钥:
格式:# openssl genrsa 2^n > /path/to/keyfile
#openssl genrsa -out /path/to/keyfile 2^n
# (umask 077; openssl genrsa -out/root/mykey2.pri 2048)
Openssl另种算法:genrsa :这是一种非对称加密算法
# openssl genrsa:生成一个rsa格式的私钥
还可以指定生成多少位的私钥:# openssl genrsa 后跟数字
如果不给位数,默认为512位;
生成的私钥也可以保存起来:
例:保存到mykey.pri 中
图中的………++表示生成的等待时间。
查看 mykey.pri 可以得到这个私钥
Genrsa也可以使用加密算法:
这个结果是加密后的结果;
而生成的私钥别的用户也有查看权限,所以要改期权限;改成400或600;也可以直接在生成时定义好它mask :# (umask 077; openssl genrsa –out /root/mykey2.pri 2048)
查看他的权限
# (umask077;openssl genrsa -out /root/mykey2.pri 2048) 注:使用umask时加括号意味着他是在一个子shell中执行,执行完了这个命令就退出了,所以只会对本次的文件权限改为600,如果不使用括号,则以后创建的文件权限将会都是600;
Pubout :提取公钥
提取公钥:# openssl rsa –in mykey.pri –pubout
申请一个证书,要先去提交一个申请,提交的
数字证书:x.509v3
一个证书的组成部分由:
版本号(version)
***():证书本身在CA中惟一标识;
签名算法标志
发行者名称
有效期:
证书主体名称:(组织(主机),个人)
证书主体公钥信息:
发行商惟一标志
证书主体的惟一标志
扩展:
签名:
除了签名剩下的部分都是自己来生成的,只不过CA给签名后,他在前签名同时会把发行者名称以及发行者的标志附加在证书里面,多以整个证书的初始部分需要申请者自己去生成,
所以我们要去申请一个签名证书,得自己生成一个证书签署申请,
如何申请证书:
如何申请证书:
1、生成一个私钥;
2、根据这个私钥从把公钥提取出来,并附加傻瓜自己的个人信息制作成一个证书签署请求吧自己的个人信息个人请求方剂去,然后通过网络或其他方式提交给CA;CA验证了信息和公钥,
# openssl req -new -key/path/to/private_key -out /paht/to/certificate.csr
3、由CA负责签署证书
如何制作签署请求:
req :证书签署请求,证书生成; 既能生成申请,又能生成证书;
查看req功能:# man req
req功能:
-key 指定私钥在什么地方,指定从哪读取私钥文件,这个命令会自动去提取公钥,
-new:要实现制作一个证书申请得使用-new ,并使用-key告诉他私钥在什么地方,如何去提取公钥;
-days:明确说明申请的证书的有效使用期限,
# openssl req -new-key /root/mykey.pri -out /root/myreq.csr
-new 表示要制作一个证书申请,-key指定是要在什么地方,-out 表示把证书申请保存为什么文件,myre.csr : csr表示证书签署请求,一般都有这个后缀名来作为证书申请文件的后缀名,
State or ProvinceName (full name) []: 填写州或省份的全名,这里不能简写,
Locality Name (eg,city) [Default City]: 默认所在的城市,
Organization Name(eg, company) [Default Company Ltd]: []: 公司名称,
OrganizationalUnit Name (eg, section) []: 所在部门的名称;
Common Name (eg,your name or your server's hostname) []: 要包含证书拥有者的名称,如果将来放到服务器上别人用来作为这个站点来访问,假如为httsp这个应用来提供服务的话,这里必须是你的用户在浏览器中输入访问网站时使用的名称;如果使用域名来访问,这里给的是域名,如果是IP地址,这里必须是IP地址,这里一定要保持一致,
Email Address []: 管理远的邮箱地址,这里可以省略不写
A challengepassword []: 加密保存,如果不想加密直接回车
证书生成保存在myreq.csr 文件中
证书生成成功,然后把证书文件复制给CA,CA验证身份,签署后就能使用
自建CA:
cd到/etc/pki/tls目录下
编辑 # vim /etc/pki/tls/openssl.cnf
其中有许多中括号分割的许多段,每一段只对openssl的单独的子命令生效或只对某些功能生效
其中ca:要想某个功能扮演ca时它有哪些配置,他将去读取[CA_default]中的配置信息;指定dir,默认情况下要把openssl制作成自建CA的话他的工作目录在什么地方,在 /etc/pki/CA ;
certs : 对于CA来讲,可能有会签署很多证书,一个证书应该有证书存储位置,这里就是指定证书存取库在什么地方;在/etc/pki/dir/certs;
crl_dir : 证书撤销列表所在的目录,
database:每签一个证书,都会把证书的相关信息记录下来制作成一个缩影叫做database;这是个文本文件
new_serts_dir: 新签证书的位置
certificate:CA自己的证书; CA自己有证,才能够给用自己的公钥去签署证书,而且让客户可以拿来用自己的证书来验证是不是CA发的
serial:已经发过多少证书
crlnumber:当前处于已经吊销的有几个了,
crl:当前的crl是什么,当前的crl证书吊销列表文件时什么,
private_key:证书颁发机构自己的私钥文件
创建CA:
1、开始自建CA;切换到/etc/pki/CA 目录下,
然后需要在private下为CA生成一个私钥文件:
# (umask 077; openssl genrsa –outprivate/cakey.pem 2048)
2、生成自签证书:,
# openssl req –new–new –x509 –key private/cakey.pem –out cacert.pem –day 3656
-X509 指定证书格式,说明要完成自签了,不加-509 就是制作申请;
-key :指定**文件; -days:指定有效期限
这里CA的自签有了,私钥也有了,各自工作目录:newcerts、crl、serts…..
现在却一个***文件serial和一个数据库文件index.txt,并且高数它***从01开始
然后可以给刚申请的文件myreq.crs签证了:
# openssl ca –inmyreq.crs –out mycert.crt –days 3656
ca :说明当前就以ca模式来工作,-in表示从那个文件读进来;证书文件通常都以.crt结尾;
3、签署:
给别人发过来的申请签证:
#openssl ca -in /path/to/certreq.csr -out /path/to/certfile.crt -days 3656
如果要制作多个请求的话,在同一个主机上,同样的信息要填很多遍,如果不想填都可以使用默认值:可以编辑tls下的openssl文件
默认为xx改成CN 等
由此就能完成一个自建CA及制作证书签署的过程
转载于:https://blog.51cto.com/linux419/1282298