生成自签名ca证书

更新时间 🔔🕙 2024年9月21日

UTC时区的位置是【Africa/Casablanca】
ubuntu上设置时区:dpkg-reconfigure tzdata
centos上设置时区:tzselect
设置时间:date -s “1970/01/01 01:00:00.000”
上面这些操作,是为了生成1970年开始的证书

1.安装必要工具

apt-get install easy-rsa
# 修改vars文件
cd /usr/share/easy-rsa/
vi ./vars
# 修改注册信息,比如公司地址、公司名称、部门名称等。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shanghai"
export KEY_CITY="Shanghai"
export KEY_ORG="my company"
export KEY_EMAIL="xxx@qq.com"
export KEY_OU="my ou"
# 初始化环境变量
source ./vars
# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/keys目录里
./clean-all
# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca
# 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key-server server
# 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key client1
# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh

2.另外一种非常方便的方式

#1. 生成 2048 位的 RSA 私钥:
openssl genrsa -out private.key 2048

#2. 根据生成的私钥创建 CSR:
openssl req -new -key private.key -out request.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=MyOrganization/OU=IT/CN=sd-xxxx" -addext "subjectAltName=DNS:sd-xxxx"
#您可以根据实际情况修改 `subj` 参数中的各项内容。其中sd-xxxx是自定义域名

#3. 生成有效期为 100 年的自签名证书:
openssl x509 -req -days 36500 -in request.csr -signkey private.key -out certificate.crt -extfile <(printf "subjectAltName=DNS:sd-xxxx")

#4. 验证生成的自签名证书:
openssl x509 -in certificate.crt -noout -text

# 这个命令是用来查看是否与域名绑定在一起,python会需要这个
openssl x509 -in ./certificate.crt -noout -text | grep -E "Subject:|Subject Alternative Name"

#通过以上步骤,您就可以生成一个有效期为 100 年的自签名 SSL 证书了。



#要将生成的自签名 SSL 证书和私钥转换为 Java KeyStore (JKS) 格式,可以使用 `keytool` 命令和 `openssl` 工具。以下是具体步骤:
### 完整的命令示例

#1. 将私钥和证书合并为一个 PKCS#12 文件:
openssl pkcs12 -export -in certificate.crt -inkey private.key -out keystore.p12 -name myalias

#2. 将 PKCS#12 文件转换为 JKS 文件:
keytool -importkeystore -deststorepass 123456 -destkeypass 123456 -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass 123456 -alias myalias

#通过以上步骤,您可以将生成的自签名 SSL 证书和私钥转换为 JKS 格式。

3.java中使用自签名证书(docker中)

# 复制自签名证书到容器中
COPY ./additionFile/sd-xxxx.crt /usr/local/share/ca-certificates/sd-xxxx.crt
# 更新证书存储并信任自签名证书
RUN update-ca-certificates
# 加入到java信任库
RUN $JAVA_HOME/bin/keytool --noprompt -importcert -keystore $JAVA_HOME/lib/security/cacerts -storepass 123456 -alias sd-xxxx -file /usr/local/share/ca-certificates/sd-xxxx.crt
# 验证java信任库
# $JAVA_HOME/bin/keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass 123456

4.python中使用自签名证书(docker中)

# 复制自签名证书到容器中
COPY ./additionFile/sd-xxxx.crt /usr/local/share/ca-certificates/sd-xxxx.crt
# 更新证书存储并信任自签名证书
RUN update-ca-certificates

# 上面是更新的默认python的ssl证书位置。
# 如果python是免安装版本,例如虚拟环境这种,需要额外更新虚拟环境的ssl证书位置。
RUN  \
    # 安装poetry
    curl -sSL https://install.python-poetry.org | python3.10 - && \
    # 创建venv环境,如果是自己在docker中命令行,可以执行【source /data/cusvenv/bin/activate】进入
    python3.10 -m venv ${VIRTUAL_ENV} && \
    # 加入到python信任库
    . /data/cusvenv/bin/activate && \
    pip install certifi && \
    CERT_FILE=$(python -m certifi) && \
    cat /usr/local/share/ca-certificates/sd-xxxx.crt >> $CERT_FILE && \
    deactivate
转载请备注引用地址:编程记忆 » 生成自签名ca证书