基于openssl的https服务配置
环境:
CA服务器:192.168.1.121
WEB服务器: 192.168.1.107
一、在CA服务器上生成自签证书
1.生成根私钥
(umask 077;openssl genrsa -out private/cakey.pem 2048)
2.生成自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 730
3.创建所需的目录和文件
touch index.txt
echo 01 > serial
二、在WEB服务器端生成证书颁发请求,并发送给CA
1.创建证书保存目录
mkdir /etc/httpd/ssl
2.生成私钥
(umask 077;openssl genrsa -out httpd.key)
3.生成证书请求
openssl req -new -key httpd.key -out httpd.csr
需要注意的是这个填写的除开Commn Name,Email Adress外都要和CA服务器上的相同,否则在下面的签署过程中会报错。这个Common Name是Web服务器的虚拟主机名。
4.发送证书请求给CA服务器
scp httpd.csr 192.168.1.121:/tmp
三、在CA服务器上签署请求证书
1.签名
openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 730
2.查看变化的信息
查看序列
查看新生成证书
3.发送证书给WEB服务器
scp /tmp/httpd.crt 192.168.1.107:/etc/httpd/ssl
删除tmp目录下的证书
rm -rf /tmp/httpd.c*
四、配置服务器使用证书
1.安装ssl模块
yum -y install mod_ssl
2.编辑ssl.conf
<VirtualHost 192.168.1.107:443> DocumentRoot "/var/www/html" ServerName www.ihs.com:443 ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES SSLCertificateFile /etc/httpd/httpd.crt SSLCertificateKeyFile /etc/httpd/httpd.key <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
重启Apache
3.由于www.ish.com并不是真实的域名,故需要在hosts文件下加入该域名进行本地解析
访问https://www.ihs.com,会出现证书错误,这是由于证书是私有CA颁发的,故需要做如下步骤:
将CA服务器上的证书cacert.pem导出到本地,改名为cacert.crt,点击再导入浏览器
退出浏览器,再重新访问https://www.ihs.com/
出现了一把锁,证书错误提示也消失了。
参考文档:
http://disablessl3.com/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了