openssl生成CA和服务器SSL证书

Posted 奥巴荣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openssl生成CA和服务器SSL证书相关的知识,希望对你有一定的参考价值。

本文链接:https://www.cnblogs.com/obarong/p/13260489.html

名词解释:

  • 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

以上是关于openssl生成CA和服务器SSL证书的主要内容,如果未能解决你的问题,请参考以下文章

用openssl生成SSL使用的私钥和证书,并自己做CA签名

用openssl生成的ssl证书和付费的有啥区别

openssl生成perm文件

如何用OpenSSL从https网站上导出SSL的CA证书

使用 OpenSSL 创建私有 CA:3 用户证书

Netty中使用SSL 双向认证(包括证书生成)