2012-11-08 290 views
7

JKJSOpenSSL的证书验证

我有这个证书链: rcert.pem(自签名) - > scert.pem - > ccert.pem

所有这三个证书由我生成。没有互联网连接在任何地方使用。这是完美的离线工作。 现在,下面是一些命令及其输出:

[email protected]:~/hari$ openssl verify rcert.pem 
rcert.pem: C = IN, ST = OM, L = OM, O = HARI, OU = HARI, CN = OM, emailAddress = OM 
error 18 at 0 depth lookup:self signed certificate 
OK 
[email protected]:~/hari$ openssl verify -CAfile rcert.pem scert.pem 
scert.pem: OK 
[email protected]:~/hari$ openssl verify -CAfile rcert.pem rcert.pem 
rcert.pem: OK 
[email protected]:~/hari$ openssl verify -CAfile rcert.pem -untrusted scert.pem ccert.pem 
ccert.pem: C = IN, ST = HARI, L = HARI, O = HARI, OU = HARI, CN = HARI, emailAddress = HARI 
error 24 at 1 depth lookup:invalid CA certificate 
OK 

为什么错误24 created.How删除它是不是像可信或不可信?

谢谢。

回答

17

JKJS

我自己的问题的

得到了答案:

1)创建这些命令的根CA证书:

openssl req -newkey rsa:1024 -sha1 -keyout rootkey.pem -out rootreq.pem 

openssl x509 -req -in rootreq.pem -sha1 -signkey rootkey.pem -out rootcert.pem 

2)安装使用下列命令CA证书作为受信任的证书:

sudo mkdir /usr/share/ca-certificates/extra 

sudo cp rootcert.pem /usr/share/ca-certificates/extra/rootcert.crt 

sudo dpkg-reconfigure ca-certificates 

sudo update-ca-certificates 

3)创建的中间证书由root签名CA通过以下命令:使用下列命令由中间CA签署

openssl req -newkey rsa:1024 -sha1 -keyout skey.pem -out sreq.pem 

sudo openssl x509 -req -in sreq.pem -sha1 -CA /etc/ssl/certs/rootcert.pem -CAkey rootkey.pem -CAcreateserial -out scert.pem 

4)创建客户证书:

openssl req -newkey rsa:1024 -sha1 -keyout ckey.pem -out creq.pem 

openssl x509 -req -in creq.pem -sha1 -CA scert.pem -CAkey skey.pem -CAcreateserial -out ccert.pem 

现在,链的信托工作正常:

1)根的验证CA

openssl verify rootcert.pem 
rootcert.pem: OK 

2)中间验证CA

openssl verify scert.pem 
scert.pem: OK 

3)客户端证书

openssl verify -CAfile scert.pem ccert.pem 
ccert.pem: OK 
+1

的验证好上寻找解决方案来完成。一个不错的完整迷你教程。 对于那些现在发现这个问题的小备注,将其更改为2048字节和sha256,因为这些日子更为常见。 – YorickH

+2

警告,上面的证书链验证命令更加宽容,您可能会期待!默认情况下,除了检查给定的CA文件外,他们还检查系统证书目录中的任何匹配的CA,例如的/ etc/SSL /证书。为了防止这种行为,并确保你正在检查特定的CA证书,还需要将一个-CApath选项与一个不存在的目录一起传递,例如:“openssl verify -CApath nosuchdir -CAfile scert.pem ccert.pem” – DSimon

+0

非常酷,在Linux上工作。但我如何在Mac上安装根证书? – prayagupd