自签名免费(SSL)私有证书
内容导航
(一)生成加密证书
1,生成加密自签名(SSL)证书
mkdir /data/ssls/www.haha.com
openssl req -new -x509 -newkey rsa:2048 -keyout /data/ssls/www.haha.com/server.key -out /data/ssls/www.haha.com/server.crt
注意:执行后需要输入密码,然后依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
(二)生成不加密证书
1,使用openssl工具生成一个RSA私钥
openssl genrsa -des3 -out /data/ssls/www.haha.com/server.key 2048
注意:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名,生成私钥,会要求你输入这个key文件的密码需要提供一个至少4位的密码,由于生成时候必须输入密码。你可以输入后,后面再删掉(因为以后要给nginx使用。每次reload nginx配置时候都要你验证这个PAM密码的)。
2,删除密码,重命名文件,导出key内容
mv /data/ssls/www.haha.com/server.key /data/ssls/www.haha.com/server.key.org(或cp /data/server.key /data/server.key.org)
openssl rsa -in /data/ssls/www.haha.com/server.key.org -out /data/ssls/www.haha.com/server.key
注意:导出key内容时候需要输入设置的密码。
3,生成CSR(证书签名请求)
使用生成的私钥(key文件)生成证书请求csr文件
openssl req -new -key /data/ssls/www.haha.com/server.key -out /data/ssls/www.haha.com/server.csr
注意:依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
4,生成自签名crt证书
根据key和csr这2个文件生成crt证书文件
openssl x509 -req -days 3650 -in /data/ssls/www.haha.com/server.csr -signkey /data/ssls/www.haha.com/server.key -out /data/ssls/www.haha.com/server.crt
(三)添加证书到受信任的存储路径
1,下载证书到本地
2,win + r 打开mmc进入控制台1
注意:导入成功后记得在本机hosts文件中添加domain ip映射后浏览器访问。
EDN:内容参考
(四)解决不安全告警的问题
1,背景描述:
遇到需要从http跨协议访问https的情况,此时就需要对要访问的https网址生成自签名证书,但是在谷歌浏览器中会报不安全的告警,必须手动操作下才能最终访问到https网址,很是麻烦
2,解决方法:
1.使用指定-subj “/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization”,生成根证书私钥和根证书 -keyout CA-private.key -out CA-certificate.crt
“/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization” (英文引号)
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization" -keyout CA-private.key -out CA-certificate.crt -reqexts v3_req -extensions v3_ca
2.生成自签名证书私钥 -out private.key
openssl genrsa -out private.key 2048
3.根据自签名证书私钥生成自签名证书申请文件 -out private.csr
“/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization/CN=ip/domain”
openssl req -new -key private.key -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization/CN=ip/domain" -sha256 -out private.csr
4.定义自签名证书扩展文件(解决chrome安全告警)。在默认情况下生成的证书一旦选择信任,在 Edge, Firefox 等浏览器都显示为安全,但是Chrome仍然会标记为不安全并警告拦截,
这是因为 Chrome 需要证书支持扩展 Subject Alternative Name, 因此生成时需要特别指定 SAN 扩展并添加相关参数,将下述内容放到一个文件中,命名为private.ext
[ req ]
default_bits = 1024
distinguished_name = req_distinguished_name
req_extensions = san
extensions = san
[ req_distinguished_name ]
countryName = CN
stateOrProvinceName = Definesys
localityName = Definesys
organizationName = Definesys
[SAN]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = IP:xxx.xxx.xxx.xxx
扩展多个域名和IP,编辑配置文件(跟本章内容无关,仅供参考):
证书转换参考1
证书转换参考2
# 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
distinguished_name = req_distinguished_name
# 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
x509_extensions = v3_req
# 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
prompt = no
[req_distinguished_name]
#国家代码,一般都是CN(大写)
C = CN
#省份
ST = Beijing
#城市
L = Beijing
#企业/单位名称
O = phpkoo
#企业部门
OU = phpkoo
#证书的主域名
CN = phpkoo.com
##### 要加入到证书请求中的一系列扩展项 #####
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[ alt_names ]
DNS.1=第一个域名
DNS.2=第二个域名
DNS.N=第N个域名
IP.1=第一个IP
IP.2=第二个IP
IP.N=第N个IP
5.根据根证书私钥及根证书-CA CA-certificate.crt -CAkey CA-private.key、自签名证书申请文件 -in private.csr、自签名证书扩展文件 -extfile private.ext,生成自签名证书 -out private.crt
openssl x509 -req -days 3650 -in private.csr -CA CA-certificate.crt -CAkey CA-private.key -CAcreateserial -sha256 -out private.crt -extfile private.ext -extensions SAN
6,将根证书CA-certificate.crt下载在本地
选择确定
访问
3,解决linux curl提示证书安全问题。
方法:手动补齐证书链或将CA颁发机构加入信任列表解决该问题
cd /etc/pki/ca-trust/source/anchors/
cp /usr/local/openresty/nginx/ssl/CA-certificate.crt ./
update-ca-trust extract
EDN:内容参考
这里基本是搬运了。参考文章地址:
解决https网站通过nginx+openssl自签名证书访问,在谷歌浏览器报不安全告警的问题
更多推荐
所有评论(0)