腾讯云CentOS自建CA证书搭建https服务器

为了完成实验以及不同电脑虚拟机不同,索性买了一个腾讯云的服务器,学生价,很便宜。

实验环境:CentOS7.5,Apache 2.4.6 OpenSSL 1.0.2k

理论知识

Http和Https的区别略
Https建立流程如下图(图源郭老师知乎)

Https建立过程
大概流程:

  • CA服务器生成自己的密钥对,并颁发给自己一个证书(根证书)
  • 在浏览器中加入此根证书,即信任由该机构颁发的证书
  • 网站服务器生成自己的密钥对,将自己的域名等验证信息、公钥生成一个csr文件,作为请求发送给CA服务器,CA服务器验证无误之后,CA的私钥对网站发送给自己的信息加密,生成该网站的证书颁发给该网站服务器
  • 网站成功获取证书
  • 客户机访问该https网站
    • 网站将自己的证书发送给客户机
    • 客户机查看证书颁发机构,从自己的证书库中查找有无该证书颁发机构的根证书
    • 使用根证书中的公钥对网站所发送证书进行验证,核实网站服务器的身份和域名等信息是否有误
    • 验证无误,与服务器进行协商通信加密方式
    • 开始通信

搭建实验环境

安装apache、PHP、MySQL(此实验用不到)、ssl模块(mod_ssl)、openssl

配置CA

查看CA配置文件 /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

x509_extensions	= usr_cert		# The extentions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt 	= ca_default		# Subject Name options
cert_opt 	= ca_default		# Certificate field options

# Extension copying option: use with caution.
# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions	= crl_ext

default_days	= 365			# how long to certify for
default_crl_days= 30			# how long before next CRL
default_md	= sha256		# use SHA-256 by default
preserve	= no			# keep passed DN ordering

# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy		= policy_match

为了简单一点,直接使用默认配置,不做改动。

生成根证书

在/etc/pki/CA中,默认初始化有四个空文件夹,如果没有,请创建。
在这里插入图片描述
创建数据库index.txt和序列号文件serial,并给serial一个初始值01
在这里插入图片描述
使用openssl生成一个密钥对,存放在private文件中(对应配置文件中要求)

在这里插入图片描述
生成证书请求,并自签证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem
req 生成证书请求命令
-new 生成新证书请求
-x509 采用x509格式标准
-key 所使用的密钥对
-days 证书有效期
-out 证书保存路径

在该命令后,需要输入国家、省份、城市、组织名、部门名、服务器名和Email
在这里插入图片描述
至此,CA根证书颁发完成。

网站服务器向CA请求认证

创建目录,存放网站的密钥对和证书
在这里插入图片描述
使用openssl生成密钥对
在这里插入图片描述
生成证书请求文件csr

openssl req -new -key httpd.key -days 365 -out httpd.csr

需要输入国家、省份、城市、组织名(与根证书组织名相同)、部门名、主机名(十分关键,即域名)、Email
主机名中,如果想通过IP直接访问,即填IP地址,如果有域名,即填域名;
如果想通过修改hosts文件的方式通过域名访问,需要使用一个没有备案的域名,本例中采用www.alskjdfqorewasd.com
在这里插入图片描述
至此,生成了一个csr文件(Certificate Signing Request),将此证书请求发送给CA,生成证书颁发给服务器,在此采用最简单的方式
显示该证书请求中的关键信息,确认后两次键入y,将生成证书发动到-out后面的参数中
在这里插入图片描述
至此,网站服务器已经成功获取到由CA发送的证书。
查看CA中的数据库index.txt,已经有了数据,并在newcerts中有了一个新的证书文件
在这里插入图片描述

修改apache的证书和密钥对配置

查看/etc/httpd/conf.d/ssl.conf,找到SSLCertificateFile和SSLCertificateKeyFile,分别将后面的参数修改为ssl目录中的httpd.crt和httpd.key,并保存。
在这里插入图片描述
重启httpd服务

systemctl restart httpd.service

如果有报错,显示httpd服务无法正常重启,有可能是证书和密钥指向的位置不对,或者之前哪一步有错误,认真检查。

在客户机测试

采用本地Windows系统做测试,使用火狐浏览器
因为生成证书时使用的是映射域名,所以修改C:\Windows\System32\drivers\etc下的hosts文件,在最后加上一行

服务器IP地址 www.alskjdfqorewasd.com

使用浏览器打开https://www.alskjdfqorewasd.com,显示如下
在这里插入图片描述
浏览器告诉我们说这个网站是自签名的,火狐不信任这个网站,证书颁发者未知,此时只需要将CA的根证书导入到浏览器中即可

  • 将服务器上的/etc/pki/CA/cacert.pem拷贝至本地
  • 火狐浏览器右上角三道杠-选项-隐私与安全-证书-查看证书
  • 证书颁发机构-导入
  • 选择cacert.pem文件,两项全打勾,确认导入
    在这里插入图片描述
    可点击查看,查看CA根证书中的详细信息。

重新刷新网站,成功访问。
在这里插入图片描述
可通过点击地址栏左侧小锁,安全连接>查看更多信息-查看证书来查看网站的证书详细信息。
HTTPS服务器搭建完成。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值