https证书制作/申请

自签证书

如果你使用的时IP而不是域名,只需要将下面的yourdomain.com改成IP地址即可。

  1. 生成CA证书私钥
    openssl genrsa -out ca.key 4096
  2. 生成CA根证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
 -key ca.key \
 -out ca.crt
  1. 生成服务器证书私钥
    openssl genrsa -out yourdomain.com.key 4096
  2. 生成证书签名请求
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
    -key yourdomain.com.key \
    -out yourdomain.com.csr
  1. 生成 x509 v3扩展文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
DNS.4=www.yourdomain.com
EOF

在前面制作证书时,我们使用的域名(CN/Common Name)都是yourdomain.com,如果我们这个域名提供服务有很多,如mail.yourdomain.com用于提供邮件服务,www.yourdomain.com提供网络服务,那就需要给这个域名单独申请一个证书,因为证书里的Common Name字段要和域名一一对应。当域名很多时,申请证书就很麻烦了。解决方法是只生成一个证书,但把证书给多个域名使用。该证书的Common Name,即CN字段为yourdomain.com,然后使用一个扩展文件,指定证书生效的域名有哪些,如上面的yourdomain,hostname,www.mydomain.com等等。
当然,如果如果你没有域名,只有一个IP,上面的步骤也可以跳过。
参考FQDN: https://blog.csdn.net/u012842205/article/details/51931017
参考SAN: https://liaoph.com/openssl-san/ 简单来说,使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。

  1. 通过v3扩展文件来生成服务端证书文件
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt

以上即可生成自签证书。使用时,将ca.crt文件加入到系统的信任证书中即可。

  1. 如果服务是通过docker容器的形式对外提供,需要将crt证书转换成cert格式的证书。因为docker daemon会把crt后缀的证书当作CA根证书。
  • 生成cert证书:
    openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert
  • 将证书拷贝到docker的证书目录
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/

注: 如果你使用的nginx默认https端口不是443端口,需要将上述的路径修改成/etc/docker/certs.d/yourdomain.com:portetc/docker/certs.d/harbor_IP:port

  • 重启docker。 systemctl restart docker

完整的脚本如下

yourdomain=$1
openssl genrsa -out ca.key 4096

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=${yourdomain}" \
 -key ca.key \
 -out ca.crt

openssl genrsa -out ${yourdomain}.key 4096

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=${yourdomain}" \
    -key ${yourdomain}.key \
    -out ${yourdomain}.csr

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=${yourdomain}.com
DNS.2=${yourdomain}
DNS.3=www.${yourdomain}.com
EOF

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in ${yourdomain}.csr \
    -out ${yourdomain}.crt

申请免费证书。

如果需要在公网提供服务,下面的网站可以申请90天的免费证书,按照步骤申请即可。
https://app.zerossl.com/certificate/new
阿里云、腾讯云等云厂商也提供了免费的证书申请,可以直接申请一年的证书。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容