OpenSSL两句话生成自签名证书

今天需要生成一个自签名证书,记录下。

需求

今天,我需要给微服务统一添加一个自签名证书,按照最简单的方式生成了一个证书。不过现在这个证书在验证时会报No subject alternative names present错误,虽然可以通过代码绕过,但是正式环境不太推荐,所以还是在创建证书的环节解决。

我们查看一个一般的网站证书,可以看到现在的证书都有使用者可选名称,而使用 OpenSSL 的默认参数生成的自签名证书是没有这一条的,而 SSL 验证较为严格的地方就会报上面的错误。

两句话生成自签名证书

  1. 先用 openssl req 生成证书请求,会顺带生成私钥。接下来会输入一系列信息,Common Name为必填参数。

    1
    openssl req -nodes -new -keyout server.key -out server.csr
    1. -nodes, 密钥文件不加密。不加此参数会要求 “Enter PEM pass phrase:”
    2. -keyout,密钥生成路径
    3. -out,证书请求文件生成路径

  2. 生成自签名证书,带上 SAN 扩展信息

    1
    2
    3
    openssl x509 -req -sha256 -days 3650 -in server.csr \
    -signkey server.key -out server.crt \
    -extfile <(printf "subjectAltName=DNS:localhost,DNS:example.com,IP:192.168.1.1,IP:127.0.0.1")
    1. -sha256,使用的加密方法
    2. -days,证书有效期
    3. -in,证书请求文件路径
    4. -signkey,用于提供自签名时的私钥文件
    5. -out,证书生成路径
    6. -extfile,指定签名时包含要添加到证书中的扩展项的文件,自签名时候可以这样使用