名词解释:
- CA(Certificate Authority):证书颁发机构
- SSL(Secure Sockets Layer): 安全套接字协议
- HTTPS(Hypertext Transfer Protocol Secure):安全超文本传输协议,应用了SSL。
- key:私钥
- openssl:SSL工具
- RSA:一种加密算法
- x509:证书格式标准,这种证书只有公钥,不包含私钥。
编码方式:
- pem:后缀的证书都是base64编码
- der:后缀的证书都是二进制格式
证书:
- csr:证书签名请求,后缀的文件是用于向ca申请签名的请求文件。
- crt和cer:后缀的文件都是证书文件(编码方式不一定,有可能是.pem,也有可能是.der)
一、编译安装openssl
参考:Windows编译安装openssl - 奥巴荣 - 博客园
https://www.cnblogs.com/obarong/p/13260321.html
二、创建根CA(完成一次)
创建根密钥
注意: 这是用于签署证书请求的密钥,持有此证书的任何人都可以代表您签署证书。因此,请将其保存在安全的地方!
openssl genrsa -des3 -out rootCA.key 4096
如果您想要一个非密码保护的密钥,只需删除-des3
选项
创建并自签名根证书
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
在这里,我们使用根密钥创建了根证书,该根证书需要在所有必须信任我们的计算机中分发。
三、创建一个证书(为每个服务器完成)
对于需要来自我们CA的受信任证书的每个服务器/设备,都需要遵循此过程。
创建证书密钥
openssl genrsa -out mydomain.com.key 2048
创建签名(csr)
在证书签名请求中,您可以指定要生成的证书的详细信息。
根密钥的所有者(在本例中是您之前创建的)将处理该请求以生成证书。
重要提示: 请注意,在创建签名请求时,务必要指定提供服务IP地址或域名的Common Name
,否则将无法验证证书。
我将在这里描述两种生成方式
方法A(交互式)
如果以这种方式生成csr,openssl将询问您有关生成证书的问题,例如组织详细信息和Common Name
(CN),即创建证书的网址,例如mydomain.com
。
openssl req -new -key mydomain.com.key -out mydomain.com.csr
方法B(一行代码)
此方法产生的输出与方法A相同,但适用于自动化:)。
openssl req -new -sha256 -key mydomain.com.key -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=mydomain.com" -out mydomain.com.csr
如果您需要通过其他配置,则可以使用-config
参数,例如,在这里我想为证书添加替代名称。
openssl req -new -sha256 \\
-key mydomain.com.key \\
-subj "/C=US/ST=CA/O=MyOrg, Inc./CN=mydomain.com" \\
-reqexts SAN \\
-config <(cat /etc/ssl/openssl.cnf \\
<(printf "\\n[SAN]\\nsubjectAltName=DNS:mydomain.com,DNS:www.mydomain.com")) \\
-out mydomain.com.csr
验证csr的内容(可选)
openssl req -in mydomain.com.csr -noout -text
使用mydomain
csr和密钥以及CA Root密钥生成证书
openssl x509 -req -in mydomain.com.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out mydomain.com.crt -days 500 -sha256
验证证书的内容(可选)
openssl x509 -in mydomain.com.crt -text -noout
参考
Self Signed Certificate with Custom Root CA · GitHub
https://gist.github.com/fntlnz/cf14feb5a46b2eda428e000157447309
[转]如何创建一个自签名的SSL证书(X509) - lihuang - 博客园
https://www.cnblogs.com/lihuang/articles/4205540.html
证书,私钥,公钥,pfx,keystore,pem,der 都是什么?_云守护的专栏-CSDN博客_pem证书是什么
https://blog.csdn.net/earbao/article/details/82958518
ssl_百度百科
https://baike.baidu.com/item/SSL
问题
- Mac添加rootCA.crt到钥匙串-登录-证书。访问报错
此服务器无法证实它就是 192.168.3.3 - 它的安全证书没有指定主题备用名称。这可能是因为某项配置有误或某个攻击者拦截了您的连接。
但是可以继续前往。
解:
创建文件192.168.3.3-2.ext,添加内容
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName
[ SubjectAlternativeName ]
IP.1=192.168.3.1
IP.2=192.168.3.3
生成crt
openssl x509 -req -in 192.168.3.3.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 192.168.3.3-2.crt -days 500 -sha256 -extfile 192.168.3.3-2.ext
参考 OpenSSL自签发自建CA签发SSL证书 - justdoit - 博客园
https://www.cnblogs.com/will-space/p/11913744.html
- crt转pem
解:
openssl x509 -in 192.168.3.3-2.crt -out 192.168.3.3-2.pem
- 提示证书时间过长
解:有效时间要小于39个月
openssl x509 -req -in 192.168.3.3.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 192.168.3.3-2.crt -days 500 -sha256 -extfile 192.168.3.3-2.ext
参考 Mac版Chrome 错误提示NET::ERR_CERT_VALIDITY_TOO_LONG怎么解决? - 知乎
https://www.zhihu.com/question/403851332