使用keystore generator来生成自签名的nginx ssl证书和密钥
1.创建一个密钥对,作为CA密钥对(其实可以不要CA,机构自签证书可以的)
-若要自己给自己签署CA证书,请在填写扩展信息时选择[Basic Constraints]的扩展类型,并勾选CA类型选项,否则在安卓手机上不认为这是一个CA证书,安装不了提示需要证书密钥。
2.创建另外一个密钥对,作为本机构的密钥对,注意创建过程填写扩展信息时要填写SAN(SAN, 主题备用名称),在填写CommonName时一定要包含自己的站点域名,可以使用'*'通配符,原因时目前浏览器验证证书的有效性时需要站点域名与证书域名匹配,且使用的时CommonName,而没有使用扩展信息中的域名。之所以要填写扩展信息SAN类型是因为有些程序比如go的证书验证需要使用SAN,它不认CommonName。
3.用本机构创建的密钥对生成CSR(证书签发请求)文件,不需要填写challenge
4.用第一个密钥对签发步骤3生成的CSR,生成CER证书文件,注意要填写被签署证书的有效期限,一定要点击[transfer Extensions]否则丢失SAN的信息, 要勾选PEM选项,这样生成的才是Base64编码的证书文件,将证书文件改名为pem后缀名
5.用步骤2生成的本机构密钥对导出私钥key文件,密钥类型选择openssl, 注意勾选PEM选项, 取消勾选encrypt(不要填写密码),否则nginx需要你输入密码才能启动。
这样我们得到了证书pem文件和私钥key文件。可以部署在nginx上了。
如果创建了CA证书,我们可以将CA证书导入到操作系统受信任证书列表。使用这个CA证书签发的证书就会被浏览器视为安全的有效证书。
上面还有一种生成方式:
先创建CA密钥对,然后在从CA签署一个新的密钥对,然后从新的密钥对中导出证书链,这样导出的证书链包含CA的证书和自己的证书。
CER证书文件主要包含了机构标识如域名等,CA信息,公钥,机构编码
PEM文件私有加密邮件,里面包含了一个或多个CER的信息,里面的cer编码格式是base64.
pem文件里面可以含有多个CER,叫证书链。通常浏览器可以从网站上下载PEM文件和PEM链条文件,我们可以看到证书链包含从当前证书一直到根证书,共多个证书base64文本在里面。