自签CA证书教程 - Hello World

自签CA证书教程

1.安装 OpenSSL软件 Linux系统一般自带

2.首先使用 openssl 命令创建一个私钥

openssl genrsa -out server.key 2048
  • server.key 是要生成的私钥文件,随便自己定义或命名。按照约定保留后面的 .key 后缀就可以了。
  • 是私钥的长度。网上一些文章中会用 1024,这是个坑。用了这个值等下在 Nginx 中使用证书时就会碰到 SSL routines:SSL_CTX_use_certificate:ee key too small 的错误。所以下限就是 2048,不能再低了。

上面的命令执行完成后,会生成一个 .key 后缀的文件,这就是生成好的私钥。有了这个私钥后,接下来就是用它生成一个证书:

openssl req -new -key server.key -out server.csr
  • -new 顾名思义,表示创建新的证书。
  • server.key 指定私钥文件名。
  • server.csr 要生成的证书文件,跟私钥文件一样,只要保留后面的 .csr
    后缀,文件名随意。不过为了方便和私钥配对识别,建议和私钥的命名保持一致。

生成证书的命令是以交互的方式执行,上面的命令按回车后,会逐行显示如下内容:

[deploy@blog-server cert]$ sudo openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
+Country Name (2 letter code) [XX]:CN(自定义)
+State or Province Name (full name) []:Hubei(自定义)
+Locality Name (eg, city) [Default City]:Wuhan(自定义)
+Organization Name (eg, company) [Default Company Ltd]:zzxworld(自定义)
+Organizational Unit Name (eg, section) []:zzxworld(自定义)
+Common Name (eg, your name or your server's hostname) []:abc(自定义名字或者ip地址)
+Email Address []:me@zzxworld.com(自定义)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

注意----- 后面的这几行,冒号后面都是需要自己来输入的内容,以上是我的示例,按照这个模子来就行了。注意 Common Name 这部分,输入内容和要颁发的 IP 地址保持一致,域名同理。

3.这样就有了一个以 .csr 为后缀的证书文件。最后一步就是自己当 CA,给自己签署一下这个证书就可以了。

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

这个命令不多解释,里面的唯一值得一提的参数就是 -days,表示证书的有效期,单位是天,看着设置就行。最大值我查了一下是 11499。设置成这个最大值那就意味着签一次可以管 31 年。一个证书可以用这么久,想想就开心。

最后 这个crt的证书 可以导入到 受信任的根证书颁发机构 游览器导入或者系统导入。