自签证书
如果你使用的时IP而不是域名,只需要将下面的yourdomain.com改成IP地址即可。
- 生成CA证书私钥
openssl genrsa -out ca.key 4096
- 生成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
- 生成服务器证书私钥
openssl genrsa -out yourdomain.com.key 4096
- 生成证书签名请求
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
- 生成 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 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。
- 通过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
文件加入到系统的信任证书中即可。
- 如果服务是通过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:port
或etc/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=hostname
DNS.4=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
网友评论