简单的通过openssl实现身份认证的命令

参考:
http://shell909090.org/blog/2011/04/说说x509证书链/
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
https://www.mirantis.com/blog/understanding-openstack-authentication-keystone-pki/

后缀说明:
csr:发送给CA的request
crt:证书

原理(比如Openstack的情况):
每个用户的相关信息会发送给keystone,被keystone的私钥通过CMS加密生成token,然后请求服务的时候将token发送给如nova这类组件,nova通过keystone的公钥和CA的证书解密该token,得到具体信息。

角色:
首先需要有个CA(因此要有CA的私钥和CA的证书,同时CA要给自己签名因此需要有自己的REQ文件)
其次要有需要被认证的实体(因此要有该实体的私钥和该实体的证书,同时为了让这个实体被CA签名需要有该实体的REQ文件)

涉及到的命令:
生成私钥(注意,openssl的生成私钥的这个命令所生成的私钥中包含了对应的公钥):

openssl genrsa -out cakey.pem 1024

对于CA,给自己签名:

req -new -x509 -days 3650 -key ca.key -out ca.crt

server这个用户生成自己的私钥:

openssl genrsa -out server.key 1024

server这个用户生成发送个CA的请求:

openssl req -new -key server.key -out server.csr

给server.key签名然后生成证书:

openssl x509 -md5 -days 3560 -req -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial ca.srl -in server.csr -out server.crt

通过server的私钥和证书给文本通过CMS算法加密:

openssl cms -sign -signer server.crt -inkey server.key -outform PEM -nosmimecap -nodetach -nocerts -noattr < text.txt > secret.txt

text.txt的内容:

123

secret.txt的内容

-----BEGIN CMS-----
MIIB7AYJKoZIhvcNAQcCoIIB3TCCAdkCAQExCTAHBgUrDgMCGjAUBgkqhkiG9w0B
BwGgBwQFMTIzDQoxggGxMIIBrQIBATCBizB+MQswCQYDVQQGEwJDTjELMAkGA1UE
CAwCSlMxCzAJBgNVBAcMAlNaMRIwEAYDVQQKDAlCSU5HT1RSRUUxDTALBgNVBAsM
BEJMT0cxETAPBgNVBAMMCHRodWFucWluMR8wHQYJKoZIhvcNAQkBFhA2NDY1NDMz
MTdAcXEuY29tAgkAjSgI4DyolkYwBwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEggEA
RGlnU3Jm/j80f2xTfg/VHRbS2bu5raNtKuMYN3onCKcZguwcotLvfkauKGLpU2Z6
AOxZB0QRuFYcbfh1nbLhktCX7UfbuWVEGSK/KIWn0UPetHNLS22/8N38ZrlbhujE
zJaVhNxcY168qqwiWyoKBY3bzr9ElbWDaaBpcQiKcNnSS1ohZSRc9glOZhpgSS4E
uzT9NIDwkkB+BRb+QgPjjstFD2AIXSySK0Ef581K/BaZ6M0/svT/cFKCgaez3vHT
47C4pwqJQfo3uhJA+Flkk7MZni5TgQ9Vsqsa+bsH5tKfg9s/ZZzQWdBY+p0xEa7U
2zkUCga5pIiI6EhWSvTsqw==
-----END CMS-----

通过server的证书和CA的证书进行解密:

cms -verify -certfile server.crt -CAfile ca.crt -inform PEM -nosmimecap -nodetach -nocerts -noattr < secret.txt 

如果解密成功,那么输出结果为:

123
Verification successful

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*