证书服务(三)生成带有SAN扩展的证书
四:openssl生成证书#
1.模拟CA#
1.1.生成CA根证书私钥,根据你实际需要去生成
有密码:openssl genrsa -des3 -out rootCA.key 4096
无密码:openssl genrsa -out rootCA.key 4096
1.2.生成根证书签名请求文件
openssl req -new -key rootCA.key -out rootCA.csr
1.3.生成CA自签证书
可以用key生成:openssl req -new -x509 -key rootCA.key -out rootCA.crt -days 3650
也可以用csr文件:openssl req -new -x509 -key rootCA.csr -out rootCA.crt -days 3650
1.4.如果1.1生成了有密码的私钥,也有办法去掉key密码
openssl rsa -in rootCA.key -out rootCA_unpass.key.unsecure
1.5如果想自动化输入证书信息,可以用-subj
openssl req -new -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=ca.jackadam.ml/emailAddress=jackadam@sina.com"
openssl req -new -x509 -key rootCA.key -out rootCA.crt -days 3650 -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=ca.jackadam.ml/emailAddress=jackadam@sina.com"
2.生成服务器证书#
2.1生成服务器私钥
openssl genrsa -out server.key 4096
2.2生成服务器签名请求
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=server.jackadam.ml/emailAddress=jackadam@sina.com"
2.3用CA签名
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 3650
3.生成客户端证书#
3.1生成服务器私钥
openssl genrsa -out client.key 4096
3.2生成服务器签名请求
openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=client.jackadam.ml/emailAddress=jackadam@sina.com"
3.3用CA签名
openssl x509 -req -in client.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out client.crt -days 3650
4.查看证书#
五:NGINX配置证书#
1.docker运行nginx#
docker-compose:
version: '3.5' services: nginx: image: nginx container_name: nginx restart: always ports: - "80:80" - "443:443" volumes: - ./templates:/etc/nginx/templates - ./cert:/etc/nginx/cert privileged: true network_mode: "bridge" environment: - NGINX_HOST=server.jackadam.ml - NGINX_PORT=80
./templates/example.conf.template
server { # 服务器端口使用443,开启ssl, 这里ssl就是上面安装的ssl模块 listen 443 ssl; # 域名,多个以空格分开 server_name server.jackadam.ml; # ssl证书地址 ssl_certificate /etc/nginx/cert/server.crt; # pem文件的路径 ssl_certificate_key /etc/nginx/cert/server.key; # key文件的路径 # ssl验证相关配置 ssl_session_timeout 5m; #缓存有效期 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; #安全链接可选的加密协议 ssl_prefer_server_ciphers on; #使用服务器端的首选算法 location / { root /usr/share/nginx/html; index index.html index.htm; } }
cert目录:
2.尝试HTTP方式进行IP访问#
3.尝试HTTPS方式进行IP访问#
需要安装CA证书,才能验证,
4.安装CA证书#
将rootCA.crt复制到本地电脑,双击即可安装。
5.还有问题#
chrome中F12即可看到错误信息
缺少Subject Alternative Name(SAN)
6.尝试域名访问#
六:SAN证书#
1.什么是san证书#
SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。
现在都SAN了,看来我们自己生成证书缺少这一项,所以在现在安全条件下,被认为不安全了。
2.生成带SAN扩展的证书请求文件#
openssl req -new -sha256 -key server.key \ -subj "/C=CN/ST=HeNan/L=ZhengZhou/O=JACKADAM/OU=jack/CN=server.jackadam.ml/emailAddress=jackadam@sina.com" \ -extensions v3_req \ -config <(cat /etc/pki/tls/openssl.cnf \ <(printf "[req]\nreq_extensions = req_ext\n[req_ext]\nsubjectAltName=DNS:server.jackadam.ml")) \ -out SANserver.csr
查看两个证书请求的区别:
openssl req -noout -text -in server.csr openssl req -noout -text -in SANserver.csr
3.签名证书#
openssl ca -in SANserver.csr \ -policy policy_anything \ -cert rootCA.crt \ -keyfile rootCA.key \ -batch \ -extensions SAN \ -config <(cat /etc/pki/tls/openssl.cnf \ <(printf "[SAN]\nsubjectAltName=DNS:server.jackadam.ml")) \ -out ./SANserver.crt
openssl,说是不从请求中获取SAN扩展,还得手动配置,为了安全?
不过我从windowsCA服务器中,用请求文件签发证书,是会包含请求中的SAN扩展。
4.查看SAN证书#
openssl x509 -text -noout -in SANserver.crt
5.更新nginx证书#
有了使用者可选名称,这个证书就算是合格的证书了。
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/16259794.html
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性