概念
公钥和私钥都可以用来加密数据,相反用另一个解开。
公钥加密数据,然后私钥解密的情况被称为 加密解密。
私钥加密数据,公钥解密一般被称为 签名和验证签名。
非对称加密算法
RSA/DSA
CA
一般的公钥不会用明文传输给别人的,正常情况下都会生成一个文件,这个文件就是公钥文件,然后这个文件可以交给其他人用于加密,但是传输过程中如果有人恶意破坏,将你的公钥换成了他的公钥,然后得到公钥的一方加密数据,不是他就可以用他自己的密钥解密看到数据了吗,为了解决这个问题,需要一个公证方来做这个事,任何人都可以找它来确认公钥是谁发的.这就是CA,CA确认公钥的原理也很简单,它将它自己的公钥发布给所有人,然后一个想要发布自己公钥的人可以将自己的公钥和一些身份信息发给CA,CA用自己的密钥进行加密,这里也可以称为签名.然后这个包含了你的公钥和你的信息的文件就可以称为证书文件了.这样一来所有得到一些公钥文件的人,通过CA的公钥解密了文件,如果正常解密那么机密后里面的信息一定是真的,因为加密方只可能是CA,其他人没它的密钥啊.这样你解开公钥文件,看看里面的信息就知道这个是不是那个你需要用来加密的公钥了.
PEM、DER
密钥文件的格式用OpenSSL生成的就只有PEM和DER两种格式,
PEM的是将密钥用base64编码表示出来的,直接打开你能看到一串的英文字母
DER格式是二进制的密钥文件
openssl 生成证书
生成ca证书
- 创建私钥
openssl genrsa -out ca/ca-key.pem 1024
- 创建证书请求
> openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:zhejiang
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:skyvision
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:root
Email Address []:sky
- 自签署证书
> openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650
- 将证书导出成浏览器支持的.p12格式
> openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12
密码:changeit
生成server证书
- 创建私钥 :
> openssl genrsa -out server/server-key.pem 1024
- 创建证书请求 :
> openssl req -new -out server/server-req.csr -key server/server-key.pem
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:zhejiang
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:skyvision
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:192.168.1.246 注释:一定要写服务器所在的ip地址
Email Address []:sky
- 自签署证书 :
> openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650
- 将证书导出成浏览器支持的.p12格式 :
> openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
密码:changeit
生成client证书
- 创建私钥 :
>openssl genrsa -out client/client-key.pem 1024
- 创建证书请求 :
>openssl req -new -out client/client-req.csr -key client/client-key.pem
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:zhejiang
Locality Name (eg, city) []:hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:skyvision
Organizational Unit Name (eg, section) []:test
Common Name (eg, YOUR name) []:sky
Email Address []:sky 注释:就是登入中心的用户(本来用户名应该是Common Name,但是中山公安的不知道为什么使用的Email Address,其他版本没有测试)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:tsing
- 自签署证书 :
>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650
- 将证书导出成浏览器支持的.p12格式 :
>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
密码:changeit
SSH密匙
不区分环境,使用以下命令生成新的ssh key:
ssh-keygen -t rsa -C "your.email@example.com" -b 4096
选择生成文件以及key密码之后,会生成两个文件,其中已pub
为后缀的为共钥
SSH默认位置为:
Windows命令提示符:
type %userprofile%\.ssh\id_rsa.pub
Windows / GNU / Linux / macOS / PowerShell上的Git Bash:
cat ~/.ssh/id_rsa.pub