跳到内容
懒人吧
返回

openssl生成自签名证书(完整版)

编辑页面

openssl 生成自签名证书(完整版)

这里生成的证书是用来给 Flask 网站启用 https 用的

有点麻烦,要自己建一个 CA,然后对自己的请求文件进行认证然后生成证书,私钥和证书,一共俩

ubuntu 上一般都自带安装了 OpenSSL

ubuntu:~$ openssl
OpenSSL> version
OpenSSL 1.1.1 11 Sep 2018
OpenSSL>

基本概念

注意区分 CA 机构的证书(可以拿来给其他网站证书签名)和 自己网站的证书(不可以),不一样

基本流程

  1. 搞一个虚拟的 CA 机构,生成一个证书
  2. 生成一个自己的密钥,然后填写证书认证申请,拿给上面的 CA 机构去签名
  3. 于是就得到了自(自建 CA 机构认证的)签名证书

首先,虚构一个 CA 认证机构出来

# 生成 CA 认证机构的证书密钥 key
# 需要设置密码,输入两次
openssl> genrsa -des3 -out ca.key 1024
# 去除密钥里的密码(可选)
# 这里需要再输入一次原来设的密码
openssl> rsa -in ca.key -out ca.key
# 用私钥 ca.key 生成 CA 认证机构的证书 ca.crt
# 其实就是相当于用私钥生成公钥,再把公钥包装成证书
openssl> req -new -x509 -key ca.key -out ca.crt -days 365
# 这个证书 ca.crt 有的又称为"根证书",因为可以用来认证其他证书

其次,才是生成网站的证书

用上面那个虚构出来的 CA 机构来认证,不收钱!

# 生成自己网站的密钥 server.key
openssl> genrsa -des3 -out server.key 1024
# 生成自己网站证书的请求文件
# 如果找外面的 CA 机构认证,也是发个请求文件给他们
# 这个私钥就包含在请求文件中了,认证机构要用它来生成网站的公钥,然后包装成一个证书
openssl> req -new -key server.key -out server.csr
# 使用虚拟的 CA 认证机构的证书 ca.crt,来对自己网站的证书请求文件 server.csr 进行处理,生成签名后的证书 server.crt
# 注意设置序列号和有效期(一般都设 1 年)
openssl> x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365

至此,私钥 server.key和证书 server.crt已全部生成完毕,可以放到网站源代码中去用了。


以下是闲话:

后缀名与文件内容

其实后缀名不影响文件的实质内容的,内容都可以文本打开看,囧

OpenSSL> genrsa -des3 -out ca.key 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
....+++++
...........................................................................+++++
e is 65537 (0x010001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:
OpenSSL> exit
ubuntu:~/web/ssl$ ls
ca.key
ubuntu:~/web/ssl$ cat ca.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,6D519E92415BEE33
UcZyq1NkoodzdWBHq37G2+y+Q/QigaPmXdNjZA7rBbz17VVqB1JrU11tbFo5BDZV
...
-----END RSA PRIVATE KEY-----
ubuntu:~/web/ssl$
OpenSSL> req -new -x509 -key ca.key -out ca.crt -days 365
Can't load /home/xqq/.rnd into RNG
139920876560832:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/home/xqq/.rnd
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) [AU]:cn
State or Province Name (full name) [Some-State]:spn
Locality Name (eg, city) []:ln
Organization Name (eg, company) [Internet Widgits Pty Ltd]:on
Organizational Unit Name (eg, section) []:oun
Common Name (e.g. server FQDN or YOUR name) []:cn
Email Address []:ea
OpenSSL> exit
ubuntu:~/web/ssl$ ls
ca.key ca.crt ca.lol # ca.lol 是我自己乱起的扩展名
# ca.lol
ubuntu:~/web/ssl$ cat ca.lol
-----BEGIN CERTIFICATE-----
MIICqjCCAhOgAwIBAgIUAOsXW5KDRNvBDTLaIreadCJVnn4wDQYJKoZIhvcNAQEL
...
-----END CERTIFICATE-----
# ca.key
xqq@VM-0-4-ubuntu:~/web/ssl$ cat ca.key
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCxImyGkSj2rB7zSNSM/2h4dg5tpJNGwJDQLE/PNKQtkorMgrbI
...
-----END RSA PRIVATE KEY-----
xqq@VM-0-4-ubuntu:~/web/ssl$

看嘛,扩展名并不影响密钥文件的内容


编辑页面
分享到:

上一篇
OpenSSL自建CA、自签SSL证书
下一篇
使用StaticGen一键初始化Hexo仓库