下面说的是命令行下的证书操做,程序实现要用libopenssl和相关库,道理同样,只是改成调用函数而已,操做各类bio,能够参考下面的连接:算法
openssl c 经常使用函数参考:sql
http://www.javashuo.com/article/p-adefljmb-cm.html安全
openssl是认证机制,是一种在tcpip上的协议,有了他,服务器对外,只开放4××端口,全部的服务都经过这个与外界联系,增强安全性,
这个协议中有两层,第一层是身份验证,第二层是通信层,在普通的加密中只有通信的内容的加密,没有第一个,第一个,他使用非对称加密算法实现的,经过互相交换公钥,并用本身的私钥加密数据发送hello 接受方用对方的公钥打开,以肯定,对方有正确的私钥,就肯定对方是应有的身份,公钥在证书中保存,实际通信中,交换的是证书。服务器
获得信任的证书,才会互相交换公钥,什么样的证书是受信任的成了一个问题。因此用des3算法获得key文件后(key文件里有公钥私钥对,即密钥)用req生成 证书请求 交给信任机构CA进行签名(用的X509这个算法可以还原数据,)证书请求中之含有公钥,session
获得公钥后检查里面的签名数据,若为信任的即交换,用获得信任的证书能够用这个证书给下级签名,这样一级一级的下去,在互联网上,若信任危机出现,能够追溯到最上级的CA,最上级的CA固然是有本身的 证书和密钥,可谁给CA签名呢,,,他是自签名的,他谁都不信任,咱们信任他就行了,他不须要谁信任他,TMD。这还讲理吗。tcp
openssl使用:
生成一个密钥即key文件 openssl genrsa -des3 -out file.key
-des3说明非对称加密算法用的是des3,openssl支持别的加密算法,如今用这一个,md5也是非对称的,具体用那种实在验证身份的时候双方协议确认一种的。会提示输入一个密钥密码,
好多应用不须要密码,有其实在自签名系统里,能够去掉密码:
openssl rsa -in file.key -out file.key 输入密码便可解密。
用key文件生产证书请求:输入我的信息
openssl req -new -key file.key -out file.csr
自签名:
openssl x509 -req -in file.csr -out file.crt -signkey file.key -days 3333
-days 说明证书失效日期,固然也有参数说明绝对日期。这是自签名这个就能够看成CA了,给别的证书请求签名了
openssl x509 -req -in new.csr -out new.crt -signkey new.key -CA file.crt -CAkey file.key -CAcreateserial
cacreateserial说明要建立证书串号,这个在本身创建了CA机构的时候有用,本身创建一个CA机构,有助于管理证书,好比:吊销,增长等等。
这样就实现了自签名证书给下级签名,之后的事就是用这些签过名的证书连接服务器了,注意:能够制定OPENSSL.CONFIG文件,有些配置说明对给下级签名的信息字段有一些要求,好比默认的是要机构,国家字段同样。函数
相关配置:
openssl 用 req ca等命令时会根据配置文件行动,用-config 制定一个,不然使用默认配置,在配置文件中,分为短值和长值,短值就是直接给值如:pathlen:0 (能够容许的下发证书个数)长值是一个session如:x509_extensions=usr_user 下面有一个 [ usr_user ]的session,写入相关的参数。
在ca的配置中,用配置文件指定,用-config 制定
在使用x509命令时,用 -extfile制定 配置文件配置文件要有一个 extensions变量制定用那一个session,post
查看证书:
openssl -x509 -in root.crt -noout -text加密
postgresql的ssl配置:
两个配置文件 一个是postgresql.confi文件,打开ssl,
一个是pg_hba.conf文件,指明那些ip是用ssl连接的,和一些权限,是否是要求客户端验证等。
httpssl dbname user cert clientcert=1
四个ssl证书文件:
server.key 必须是没哟密码的
server.crt
root.crt 若是采用自签名的体系,这两个要同样,也就是咱们CA的cert
root.crl 这个是吊销单,由本身的CA机构生成。
用ssl连接pg时,生产crt的req的common name 要和dbuser的名字一致。.net
CA机构的创建。 就是一个目录,好在里面记录东西。 mkdir demoCA touch demoCA/index.txt touch demoCA/private/ ..... 能够用源码中的脚本方便的生成 CA.sh -newca :它还有写别的参数,方便CA机构的运做。 咱们的CA.key 在demoCA/private/cakey.pem 咱们的CA.crt demoCA/cacert.pem 生成一个下级的key和crt CA.sh -newreq CA.sh -signCA 还有CA.sh -newcert更方便了 opoenssl ca这个命令使用ca机构的,要求有个文件夹,里面有什么签过名的证书的一些数据,之后给下级签名都会修改相应的数据, openssl ca -gencrl -out root.crl -days 333生产吊销单,说明里面有的证书以做废不能连接。-day3是吊销单的有效日期。 这个命另要用当前目录下的 demoCA里面的数据 提早吊销证书: openssl ca -revoke oldcert.pem