windows
参考:https://mos86.com/40020.html
1、按下Windows键+R输入secpol.msc在运行对话框。单击确定打开安全策略管理单元。

2.在本地安全策略
管理单元中,单击公钥策略
,找到证书路径验证设置

3.然后在证书路径验证设置
属性中,选中定义这些策略设置
。确保您选中允许用户受信任的根CA用于验证证书
,并允许用户在此处信任对等信任证书
选项。在根证书存储下,选择第三方根CA和企业根CA
选项。单击应用,然后单击确定。

关闭本地安全策略管理单元。
4.按下Windows键+R输入certmgr.msc
在运行对话框。

5.在证书管理器窗口中,单击受信任的根证书颁发机构
右键单击证书
并选择所有任务

6.现在在证书导入向导中,单击下一步。

7.然后浏览证书根文件(请确保选择正确的文件格式.CRT )你从你的CA点击下一步。

8.在下一个屏幕上,选择根据证书类型选项自动选择证书库
。点击下一步。

9.单击完成以最终将证书导入到受信任的根证书颁发机构存储。

这样,您可以将新的受信任的根证书安装到Windows 10.
linux
以centos7为例:
把.crt格式的根CA证书放到下面这个目录里面就可以了
/etc/pki/ca-trust/source/anchors/
以ubuntu为例
1、将.crt格式的根CA证书放到/usr/local/share/ca-certificates下面
2、执行命令sudo update-ca-certificates
自签证书的脚本
脚本1
[root@xxx-01 certs-generator]# cat flush.sh gen.root.sh gen.cert.sh
#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE[0]}")"
echo 'Removing dir out'
rm -rf out
echo 'Creating output structure'
mkdir out
cd out
mkdir newcerts
touch index.txt
echo "unique_subject = no" > index.txt.attr
echo 1000 > serial
echo 'Done'
#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE[0]}")"
if [ -f "out/root.crt" ]; then
echo Root certificate already exists.
exit 1
fi
if [ ! -d "out" ]; then
bash flush.sh
fi
# Generate root cert along with root key
openssl req -config ca.cnf \
-newkey rsa:2048 -nodes -keyout out/root.key.pem \
-new -x509 -days 7300 -out out/root.crt \
-subj "/C=CN/ST=Shanghai/L=Pudong/O=IT/CN=service ROOT CA"
# Generate cert key
openssl genrsa -out "out/cert.key.pem" 2048
#!/usr/bin/env bash
if [ -z "$1" ]
then
echo
echo 'Issue a wildcard SSL certificate with Fishdrowned ROOT CA'
echo
echo 'Usage: ./gen.cert.sh <domain> [<domain2>] [<domain3>] [<domain4>] ...'
echo ' <domain> The domain name of your site, like "example.dev",'
echo ' you will get a certificate for *.example.dev'
echo ' Multiple domains are acceptable'
exit;
fi
SAN=""
for var in "$@"
do
SAN+="DNS:*.${var},DNS:${var},"
done
SAN=${SAN:0:${#SAN}-1}
# Move to root directory
cd "$(dirname "${BASH_SOURCE[0]}")"
# Generate root certificate if not exists
if [ ! -f "out/root.crt" ]; then
bash gen.root.sh
fi
# Create domain directory
BASE_DIR="out/$1"
TIME=`date +%Y%m%d-%H%M`
DIR="${BASE_DIR}/${TIME}"
mkdir -p ${DIR}
# Create CSR
openssl req -new -out "${DIR}/$1.csr.pem" \
-key out/cert.key.pem \
-reqexts SAN \
-config <(cat ca.cnf \
<(printf "[SAN]\nsubjectAltName=${SAN}")) \
-subj "/C=CN/ST=Shanghai/L=Pudong/O=IT/OU=$1/CN=*.$1"
# Issue certificate
# openssl ca -batch -config ./ca.cnf -notext -in "${DIR}/$1.csr.pem" -out "${DIR}/$1.cert.pem"
openssl ca -config ./ca.cnf -batch -notext \
-in "${DIR}/$1.csr.pem" \
-out "${DIR}/$1.crt" \
-cert ./out/root.crt \
-keyfile ./out/root.key.pem
# Chain certificate with CA
cat "${DIR}/$1.crt" ./out/root.crt > "${DIR}/$1.bundle.crt"
ln -snf "./${TIME}/$1.bundle.crt" "${BASE_DIR}/$1.bundle.crt"
ln -snf "./${TIME}/$1.crt" "${BASE_DIR}/$1.crt"
ln -snf "../cert.key.pem" "${BASE_DIR}/$1.key.pem"
ln -snf "../root.crt" "${BASE_DIR}/root.crt"
# Output certificates
echo
echo "Certificates are located in:"
LS=$([[ `ls --help | grep '\-\-color'` ]] && echo "ls --color" || echo "ls -G")
${LS} -la `pwd`/${BASE_DIR}/*.*
[root@xxx-01 certs-generator]# cat ca.cnf
[ ca ]
default_ca = Compass_ROOT_CA
[ Compass_ROOT_CA ]
new_certs_dir = ./out/newcerts
certificate = ./out/root.crt
database = ./out/index.txt
private_key = ./out/root.key.pem
serial = ./out/serial
unique_subject = no
default_days = 3650
default_md = sha256
policy = policy_loose
x509_extensions = ca_extensions
copy_extensions = copy
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ ca_extensions ]
basicConstraints = CA:false
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
# subjectAltName = IP:127.0.0.1
keyUsage = digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
[ req ]
# Options for the `req` tool (`man req`).
default_bits = 2048
distinguished_name = req_distinguished_name
string_mask = utf8only
# SHA-1 is deprecated, so use SHA-2 instead.
default_md = sha256
# Extension to add when the -x509 option is used.
x509_extensions = v3_ca
[ req_distinguished_name ]
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
# Optionally, specify some defaults.
countryName_default = CN
stateOrProvinceName_default = Shanghai
localityName_default = IT
0.organizationName_default = Service
organizationalUnitName_default =
emailAddress_default =
[ v3_ca ]
# Extensions for a typical CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ v3_intermediate_ca ]
# Extensions for a typical intermediate CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
# Extensions for client certificates (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
[ server_cert ]
# Extensions for server certificates (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
[ ocsp ]
# Extension for OCSP signing certificates (`man ocsp`).
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning
或者去github找一些开源的脚本生成也可以,实在不行还可以用最传统的方法手动openssl生成证书
开源: https://github.com/llekn/openssl-ca
#简陋脚本
StandardOutput(){
echo -e "\033[1;32m$1\033[0m"
}
ErrorOutput(){
echo -e "\033[1;31m$1\033[0m"
}
read -e -p "请输入你的域名:" DOMAIN
mkdir ${DOMAIN} && cd ${DOMAIN}
(umask 077;openssl genrsa -out ca.key 2048)
openssl req -new -key ca.key -out ca.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=Internet/OU=devops/CN=ca.${DOMAIN}"
openssl x509 -req -days 3650 -in ca.csr -signkey ca.key -out ca.crt
(umask 077;openssl genrsa -out ${DOMAIN}.key 2048)
openssl req -new -key ${DOMAIN}.key -out ${DOMAIN}.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=Internet/OU=devops/CN=${DOMAIN}"
openssl x509 -req -days 3650 -in ${DOMAIN}.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out ${DOMAIN}.crt
StandardOutput "密钥文件路径: ${DOMAIN}/${DOMAIN}.key"
StandardOutput "证书文件路径: ${DOMAIN}/${DOMAIN}.crt"