私建CA签发证书
1、操作系统:CA、server 两台主机均为Centos 7;
=======================================================以下是创建CA过程=====================================================
2、查看配置文件,确保相关目录和文件已经存在;
查看配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ~] # cat /etc/pki/tls/openssl.cnf #################################################################### [ CA_default ] dir = /etc/pki/CA # Where everything is kept certs = $ dir /certs # Where the issued certs are kept crl_dir = $ dir /crl # Where the issued crl are kept database = $ dir /index .txt # database index file. #unique_subject = no # Set to 'no' to allow creation of # several ctificates with same subject. new_certs_dir = $ dir /newcerts # default place for new certs. certificate = $ dir /cacert .pem # The CA certificate serial = $ dir /serial # The current serial number crlnumber = $ dir /crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $ dir /crl .pem # The current CRL private_key = $ dir /private/cakey .pem # The private key RANDFILE = $ dir /private/ .rand # private random number file |
配置相关目录和文件
/etc/pki/CA/{certs,crl,newcerts} 目录必须存在
/etc/pki/CA/{serial,index.txt} 创建文件
第一次创建ca需要在serial中写入序列号:echo 01 > /etc/pki/CA/serial
3、生成私钥:
1 | ~] # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) |
4、生成自签证书,CA自己给自己签证;
1 | # -x509:生成自签格式证书,专用于创建私有CA时;<br>~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365 |
5、CA已经创建完成;注意:在创建CA自签证书的时候填写国家、省份、城市信息注意保存记住,后续其它应用申请证书时,填写的国家、省份、城市信息要保持一致;
=====================================================server http应用申请证书==================================================================
1、创建httpd的证书存放路径,一般建议在httpd的配置目录创建,便于管理;
1 | ~] # mkdir /etc/httpd/ssl |
2、生成http私钥;
1 | ~] # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) |
3、生成证书签署请求;
1 | ~] # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365 |
注意:在填写国家、省份、城市信息的时候和CA保持一致;
4、填写扩展信息;
1 | ~] # echo "subjectAltName = DNS:*.server.com, DNS: server.com" > /etc/httpd/ssl/http.ext |
注意:填写的是服务访问的域名
5、将 /etc/httpd/ssl/http.ext 和 /etc/httpd/ssl/httpd.csr 通过可靠手段传输到CA的 /tmp 目录;
======================================================================CA 签署证书===============================================================
1、执行证书签署命令;
1 | ~] # openssl ca -in /tmp/http.csr -out /tmp/http.crt -days 365 -extfile /tmp/http.ext |
2、将签署后的 /tmp/http.crt 传给 server主机;
====================================================================server httpd 配置使用证书===========================================================
1、安装httpd的ssl模块;
1 | ~] # yum install mod_ssl |
2、将 CA 签署的证书 http.crt 拷贝到 /etc/httpd/ssl 中;
3、配置httpd的https;
1 2 | ~] # vim /etc/httpd/conf.d/ssl.conf<br>SSLCertificateFile /etc/httpd/ssl/http.crt SSLCertificateKeyFile /etc/httpd/ssl/http .key |
4、重启下 httpd 服务:systemctl restart httpd
===============================================================================浏览器配置=============================================================
1、导入根证书,CA机构的证书 /etc/pki/CA/cacert.pem;
谷歌浏览器:设置 -------> 搜索安全-------------> 管理证书 --------------> 选择 受信任的根证书办法机构 -----------> 导入 ------------> 选择文件的时候选择所有文件类型 --------> 完成导入即可。
2、修改浏览器机器的host配置文件,添加server的域名和ip配置;
3、使用https协议访问server的服务;https://server.com/
参考:https://www.cnblogs.com/will-space/p/11913744.html
解决Chrome不能识别证书通用名称NET::ERR_CERT_COMMON_NAME_INVALID错误;上面操作已经通过:
1 | echo "subjectAltName = DNS:*.server.com, DNS: server.com" > /etc/httpd/ssl/http .ext 处理了 |
ip配置:
1 2 3 4 5 6 7 8 | [root@CA ~] # vim http.ext keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName=@SubjectAlternativeName [ SubjectAlternativeName ] IP.1=192.168.1.1 IP.2=192.168.1.2 |
DNS配置:
1 2 3 4 5 6 7 8 | [root@CA ~] # vim http.ext keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName=@SubjectAlternativeName [ SubjectAlternativeName ] DNS.1= test .com DNS.2=www. test .com |
extendedKeyUsage 可以指定证书目的,即用途,一般有:
serverAuth:保证远程计算机的身份
clientAuth:向远程计算机证明你的身份
codeSigning:确保软件来自软件发布者,保护软件在发行后不被更改
emailProtection:保护电子邮件消息
timeStamping:允许用当前时间签名数据
如果不指定,则默认为 所有应用程序策略
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」