关于证书的那些事:自签名证书和私有CA签名证书等

证书的三个作用 加密通信和身份验证(验证对方确实是对方声称的对象)和数据完整性(无法被修改,修改了会被知)

证书类型:
x509的证书编码格式有两种
1.PEM(Privacy-enhanced Electronic Mail) 是明文格式的 以 -----BEGIN CERTIFICATE-----开头,已-----END CERTIFICATE-----结尾,中间是经过base64编码的内容,apache需要的证书就是这类编码的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -in server.pem
其实PEM就是把DER的内容进行了一次base64编码
2.DER 是二进制格式的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -inform der -in server.der

扩展名:
.crt 证书文件 ,可以是DER(二进制)编码的,也可以是PEM( ASCII (Base64) )编码的 ,在类unix系统中比较常见
.cer 也是证书 常见于Windows系统 编码类型同样可以是DER或者PEM的,windows 下有工具可以转换crt到cer
.csr 证书签名请求 一般是生成请求以后发送给CA,然后CA会给你签名并发回证书
.key 一般公钥或者密钥都会用这种扩展名,可以是DER编码的或者是PEM编码的 查看DER编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform DER -noout -text -in xxx.key 查看PEM编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform PEM -noout -text -in xxx.key
.p12 证书 包含一个X509证书和一个被密码保护的私钥

自签名证书和CA签名证书的区别
自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信

如果你的规划需要创建多个证书,那么使用私有CA的方法比较合适,因为只要给所有的客户端都安装了CA的证书,那么以该证书签名过的证书,客户端都是信任的,也就是安装一次就够了
如果你直接用自签名证书,你需要给所有的客户端安装该证书才会被信任,如果你需要第二个证书,则还的挨个给所有的客户端安装证书2才会被信任。

****Linux下使用OpenSSL生成证书****

利用OpenSSL生成库和命令程序,在生成的命令程序中包括对加/解密算法的测试,openssl程序,ca程序.利用openssl,ca可生成用于C/S模式的证书文件以及CA文件。
证书文件的生成步骤:
一、服务器端
1.生成服务器端的私钥(key文件);
openssl genrsa -des3 -out server.key 1024
运行时会提示输入密码,此密码用于加密key文件(参数des3是加密算法,也可以选用其他安全的算法),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果不要口令,则可用以下命令去除口令:
openssl rsa -in server.key -out server.key

生成无需密码的服务器私钥 ,如果私钥是有密码的,则每次启动web服务器都会要求你输入密码

2.生成服务器端证书签名请求文件(csr文件);
openssl req -new -key server.key -out server.csr
生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其 提示一步一步输入要求的个人信息即可(如:Country,province,city,company等).


****注意:前方高能预警!!!!!****
最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。

二、客户端
1.对客户端也作同样的命令生成key及csr文件;
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr



三、生成CA证书文件
server.csr与client.csr文件必须有CA的签名才可形成证书.
1.首先生成CA的key文件:
openssl genrsa -des3 -out ca.key 1024
2.生成CA自签名证书:
openssl req -new -x509 -key ca.key -out ca.crt
可以加证书过期时间选项 "-days 365".


四、利用CA证书进行签名

方法一:
可以加证书的有效时间选项 "-days 365".也可以不加时间,标识永久有效
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

方法二:
用生成的CA证书为server.csr,client.csr文件签名,利用openssl中附带的CA.pl文件

  1. 在提示输入已有的证书文件时,输入上面已生成的ca.crt证书文件;
    ca.pl –newca
    2.生成服务端证书文件
    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf



    3.生成客户端证书文件
    openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
    必须保证openssl.cnf在当前目录下,这个文件可以在apps目录中找到.



    五、可能出现的错误
    错误1:
    error loading the config file 'openssl.cnf'
    解决方法
    find . -name "openssl.c*"

    cp /usr/local/ssl/openssl.cnf ./
    错误2:




    解决方法
    touch demoCA/serial
    echo "00" > demoCA/serial

三.查看信息
openssl rsa -noout -text -in server.key 查看私钥信息
openssl req -noout -text -in server.csr 查看签名请求信息
openssl rsa -noout -text -in ca.key 查看ca的私钥信息
openssl x509 -noout -text -in ca.crt 查看证书信息
openssl crl -text -in xx.crl 查看一个证书吊销列表信息
openssl x509 -purpose -in cacert.pem 查看一个证书的额外信息
openssl rsa -in key.pem -pubout -out pubkey.pem 从一个私钥里面提取出公钥
openssl rsa -noout -text -pubin -in apache.pub 查看一个公钥的信息
openssl verify -CAfile 指定CA文件路径 apache.crt 验证一个证书是否是某一个CA签发
openssl s_client -connect 192.168.20.51:443 模拟一个ssl客户端访问ssl服务器 如果服务端要求客户端提供证书 则在加上 -cert 和-key参数 比如 openssl s_client -connect 192.168.20.51:443 -cert client.crt -key client.key
openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys 从p12文件里面提取证书openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes 从p12文件里面提取私钥

现代浏览器检查一个证书是否仍然有效 两种方法 OCSP (Online Certificate Status Protocol,在线证书状态协议) 和crl (Certificate Revoke List ,证书吊销列表)
这些信息在CA的证书里面应该得有,否则浏览器无法检查由该CA签过的证书是否还继续有效 (这句话属于猜测)
可以试一下导出给京东或者淘宝签名的CA证书 并用openssl x509 -noout -text -in ca.crt 查看一下,就能看到这两类信息京东的证书是由GeoTrustSSL进行签名的,导出GeoTrustSSL CA的证书 然后查看该CA的信息其中有一段信息是这样

 X509v3 CRL Distribution Points:   

  Full Name:  
  URI:http://g1.symcb.com/crls/gtglobal.crl  

Authority Information Access:   
OCSP - URI:http://g2.symcb.com  

这里说明了它的证书吊销列表地址和OSCP协议地址有兴趣的可以试试给淘宝签名的CA的证书信息

对已证书吊销列表 各浏览器的行为可以参考一下两个地址
http://news.netcraft.com/archives/2013/05/13/how-certificate-revocation-doesnt-work-in-practice.html
https://www.trustwave.com/Resources/SpiderLabs-Blog/Defective-By-Design----Certificate-Revocation-Behavior-In-Modern-Browsers/

相关参考信息链接

http://blog.csdn.net/sdcxyz/article/details/47220129
http://www.linuxidc.com/Linux/2015-05/117034.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容