Loading

shell脚本生成证书SAN证书,chrome自签名证书无效。

san证书是什么:

SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。

不含该扩展的证书,已经被chrome识别为不安全了,那么现在就要生成带SAN扩展的证书。

#!/bin/bash

C=CN
ST=HeNan
L=ZhengZhhou
O=FreeNet
CAOU=CA
CACN=ca.test.com
SERVERCN=test.jackadam.top
CLIENTCN=client.test.com
emailAddress=test@sina.com


echo "生成CA证书"
echo "创建CA私钥"
openssl genrsa -out ./ca.pem 4096 

echo "创建CA签名请求"
openssl req -new -key ./ca.pem -out ./ca.csr -subj "/C=${C}/ST=${ST}/L=${L}/O=${O}/OU=${CAOU}/CN=${CACN}/emailAddress=${emailAddress}"

echo "生成自签名CA证书(ca.cert)"
openssl x509 -req -days 3650 -in ./ca.csr -signkey ./ca.pem -out ./ca.crt


echo "生成Server证书"
echo "生成服务端私钥(server.pem)"
openssl genrsa -out ./server.pem 4096

echo "生成服务端证书签名请求(server.csr)"
openssl req -new -key ./server.pem -out ./server.csr -subj "/C=${C}/ST=${ST}/L=${L}/O=${O}/OU=${CAOU}/CN=${SERVERCN}/emailAddress=${emailAddress}"

echo "使用ca证书签署服务端csr以生成服务端证书(server.cert)"
openssl x509 -req -in ./server.csr -CA ./ca.crt -CAkey ./ca.pem -CAcreateserial -out ./server.crt -days 3650



echo "生成Client证书(用于双向认证)"
echo "生成客户端私钥(client.pem)"
openssl genrsa -out ./client.pem 4096

echo "生成客户端证书签名请求(client.csr)"
openssl req -new -key ./client.pem -out ./client.csr -subj "/C=${C}/ST=${ST}/L=${L}/O=${O}/OU=${CAOU}/CN=${CLIENTCN}/emailAddress=${emailAddress}"

echo "使用ca证书签署客户端csr以生成客户端证书(client.cert)"
openssl x509 -req -in ./client.csr -CA ./ca.crt -CAkey ./ca.pem -CAcreateserial -out ./client.crt -days 3650


echo "SAN证书"
echo "SANserver私钥"
openssl genrsa -out ./SANserver.pem 4096


echo "SANserver证书请求"
openssl req -new -sha256 -key ./SANserver.pem \
    -subj "/C=${C}/ST=${ST}/L=${L}/O=${O}/OU=${CAOU}/CN=${CLIENTCN}/emailAddress=${emailAddress}" \
    -extensions v3_req \
    -config <(cat /etc/pki/tls/openssl.cnf \
        <(printf "[req]\nreq_extensions = req_ext\n[req_ext]\nsubjectAltName=DNS:${SERVERCN}")) \
    -out SANserver.csr 
    
echo "Openssl 不带入请求中的san扩展"
openssl x509 -req -in ./SANserver.csr -CA ./ca.crt -CAkey ./ca.pem -CAcreateserial -out ./SANserver.crt -days 3650


    
echo "查看请求文件"
openssl req -noout -text -in SANserver.csr 

echo "查看证书"
openssl x509 -text -noout -in SANserver.crt



echo "Openssl,手动配置san扩展"
echo "openssl,无法从csr证书请求文件中复制x509选项,必须手动配置进去。"
openssl genrsa -out ./test.pem 1024 
echo "证书请求"
openssl req -new -sha256 \
    -key ./test.pem \
    -subj "/C=${C}/ST=${ST}/L=${L}/O=${O}/OU=${CAOU}/CN=${CLIENTCN}/emailAddress=${emailAddress}" \
    -extensions v3_req \
    -config <(cat /etc/pki/tls/openssl.cnf \
        <(printf "[v3_req]\nsubjectAltName=DNS:${SERVERCN}")) \
    -out test.csr 
echo "签名证书"
openssl req -new -sha256  \
    -x509 \
    -days 10000 \
    -key ./test.pem \
    -subj "/C=${C}/ST=${ST}/L=${L}/O=${O}/OU=${CAOU}/CN=${CLIENTCN}/emailAddress=${emailAddress}" \
    -extensions SAN \
    -config <(cat /etc/pki/tls/openssl.cnf \
        <(printf "[SAN]\nsubjectAltName=DNS:${SERVERCN}")) \
    -out test.crt
openssl req -noout -text -in test.csr 
openssl x509 -text -noout -in test.crt

这里包含了生成CA证书,当然在企业内部,使用AD域管理的时候,我还是会使用windowsCA作为证书服务器。

可以在任意电脑证书管理中,申请SAN证书。

 

 

 

 

 

 

 

 

 

 我也不知道这能怎么用。

暂时我的用法应该是:

windows部署CA证书服务器

openssl生成普通证书请求或带x509扩展SAN的证书请求。这时候是有私钥的。

在windowsCA证书服务器,web页面申请证书,拿到证书和私钥,配置到目标服务器。

使用windowsCA证书服务器的原因是,主网络在使用windows域服务,可以自动安装企业CA证书并信任。

 

posted @ 2022-04-29 17:41  上官飞鸿  阅读(601)  评论(0编辑  收藏  举报