notes icon indicating copy to clipboard operation
notes copied to clipboard

SSL证书生成步骤 or how to ssl

Open lanlin opened this issue 8 years ago • 3 comments

场景

网站需要启用 HTTPS 访问,因为自签名的证书现在面临浏览器厂商和颁证机构的联合围剿。 可以说,除了开发状态下,实际线上完全没什么卵用。所以,你需要花钱买一个证书。 下面介绍下如何去搞这个东西。也是备忘下,因为反复搞了几次,结果每次都记不住一些参数。

准备步骤

$ openssl req -nodes -newkey rsa:4096 -sha512 -out request.csr -keyout private.key

openssl // 这个不做解释
req     // 这个是 openssl 中用来处理证书申请请求的
newkey  // 生成一个新的私钥
rsa     // 私钥长度,常用的 2048,建议设置 4096。这个当然和安全强度相关
sha512  // 常用的加密算法
keyout  // 私钥生成后保存的路径,以及文件名
out     // 用来申请证书的请求文件,同样可以指定路径和文件名

接下来需要回答一系列的问题,不同的 OpenSSL 版本会有所不同。。。

首先就要求我们为要生成的私钥创建一个密码,这个一般来说,直接回车跳过。

image

注意 PEM pass phrase 密码不能随便输入,它是用来保护你的私钥的。而且服务器(nginx, apache)每次启动都需要输入一次这个密码,要不然无法正常启动。

接着就是一大堆无聊的项目需要填写一下。 特别需要注意的就是 common name 这一项,这是你需要指定域名的地方。 比如我就是填写了一个通配的 *.domain.com

image

申请步骤

完成了上述准备步骤,你就会得到两个文件了。一个 private.key 的私钥文件,一个 request.csr 申请文件。 然后,你就需要拿着这个 reqquest.csr 去申请 SSL 证书了。

到处都是证书颁发机构,但是,他们都有一个共同点,就是——要钱! 需知,没有免费午餐。现在的证书都是要钱买的。 比如,本座就是在 Comodo 申请的。(麻蛋,这家伙不是做防火墙的么😓)

image

最终,你会得到这样一些文件。 当然,各个机构会有所不同。有的可能会只给你一个合并到一起的单个文件。

image

然后,我们需要合并一下这几个文件,顺序必须一致,不能乱来。 合并的先后顺序是按照下面的顺序排列的

被授权证书 > 上级证书 > 根证书

我们切换到存放以上证书的目录,执行 cat

cat STAR_domain_com.crt COMODORSADomainValidationSecureServerCA.crt  COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ssl-bundle.crt

配置 Nginx

现在,你已经有了一大堆的证书什么的。但是,其他的都可以扔掉了。 只保留这两个 private.keyssl-bundle.crt,将他们存放到特定的目录。 比如 /etc/nginx/ssl/

然后,开始配置 nginx,下面几项是必须的,其他更高级的玩意就不讨论了。

server {
    listen 443;

    ssl on;
    ssl_certificate /etc/nginx/ssl/ssl-bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/private.key;
}

最后,重启下 nginx。找个平台验证下 SSL 证书生效否。 比如 https://www.ssllabs.com/ssltest/

image

其他的都不重要,钱才是最重要的。太 TM 跪了。。 还有就是,千万别去用国内的那些机构申请。 像 Chrome 这些浏览器几乎已经把整个国内证书机构拖进黑名单了。

lanlin avatar Mar 28 '17 13:03 lanlin

特别提示

如果在创建私钥(private.key)时,PEM pass phrase 的地方输入了一个密码。会导致 nginx, apache 等启动失败。

因为那个密码是用来保护私钥的,每次启动 nginx 等都需要输入一遍该密码。

去除的方法

openssl rsa -in private.key -out new.key

执行上述指令,会要求你输入一遍密码。然后生成一个新的 new.key

用这个 new.key 替换到之前的 private.key 就可以了。

lanlin avatar Mar 29 '18 02:03 lanlin

OpenSSL 其他指令参考 OpenSSL Command Cheatsheet

lanlin avatar Apr 01 '19 06:04 lanlin

由于验证速度相差比较大,因此建议用 rsa:2048sha256 相组合

openssl speed rsa2048 rsa4096

以上命令可以测试两者的签名及验证速度,主要跟CPU性能有关

image

lanlin avatar Apr 02 '20 03:04 lanlin