本次教程将记录如何配置https服务器,因为本着学习的态度我会将Centos 和Windows配置https服务器都记录一下。
参考来源:
https://www.jianshu.com/p/5880ae1cd595
https://blog.csdn.net/clinuxf/article/details/90403935
https://blog.csdn.net/qq_15092079/article/details/82149807
https://www.cnblogs.com/yaowen/p/9235784.html
https://blog.csdn.net/tanyhuan/article/details/79992975
https://www.cnblogs.com/aaron-agu/p/10560659.html
https://blog.csdn.net/huplion/article/details/52892869?utm_source=distribute.pc_relevant.none-task
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL(Secure Socket Layer)。
SSL协议提供的服务主要有:
认证用户和服务器,确保数据发送到正确的客户机和服务器
加密数据以防止数据中途被窃取
维护数据的完整性,确保数据在传输过程中不被改变
SSL证书的作用
SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。
SSL证书的两大作用:数据加密和身份认证
SSL 证书遵守 SSL协议,通过在客户端浏览器和Web服务器之间建立一条SSL安全通道
一个有效、可信的 SSL 数字证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。因此,浏览器指向一个安全域时,SSL 将同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。
SSL证书我们一般分两种:自签证书和权威机构授权证书,前者免费,但不被浏览器认可,会报安全隐患错误;后者大多数花钱,也有免费的,但是需要绑定域名,可以去腾讯阿里云华为云等购买域名进行生成。
一、在Centos7配置Https服务器
配置https服务器首先是生成ssl证书,本次我们生成 ssl x509证书,分为三个key、csr、crt。
1、安装openssl(当前目录/root 当前用户root)
yum install openssl
2、安装openssl开发库,这是重点 Ubuntu 安装的是libssl-dev(当前目录/root 当前用户root)
yum install openssl-devel
可以测试 安装是否成功(当前目录/root 当前用户root)
openssl version -a
3、查看openssl的配置文件openssl.cnf的存放位置(即openssl的安装位置)(当前目录/root 当前用户root)
去图所指位置/etc/pki/tls/查看openssl的配置文件openssl.cnf 这是 openssl 的配置文件,下面生成证书及签名的时候 我们将用到这个文件,可能不同的os 此文件的位置不同。(当前目录/root 当前用户root)
cat /etc/pki/tls/openssl.cnf
4、选择一个文件夹,我是在root目录下新建的https文件(命令:mkdir https),下面操作都是在此目录下进行,首先生成SSL证书的key,key是私用密钥openssl格,通常是rsa算法。
(切换到目录/root/https 当前用户root,执行下面代码)
这样是生成rsa私钥,des3算法,openssl格式,1024位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。
openssl genrsa -des3 -out server.key 1024
运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!
去除密码的命令(选用)防止每次连接服务器都要手动输入密码,我选用了,执行之后要输入刚刚生成key所输入的密码。(当前目录/root/https 当前用户root)
openssl rsa -in server.key -out server.key
5、生成CSR文件,CSR是证书请求文件,用于申请证书。在制作CSR文件的时,必须使用自己的私钥来签署申请,还可以设定一个密钥。
将之前的openssl.cnf 拷贝到当前目录中,即和生成的 server.key 同一目录,我的目录是https(当前目录/root/https 当前用户root)
cp /etc/pki/tls/openssl.cnf ./
openssl req -new -key server.key -out server.csr -config openssl.cnf
需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合没有域名输入公网IP,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。
openssl.cnf简单释义
vi /usr/lib/ssl/openssl.cnf
[ req_distinguished_name ]
countryName = Country Name (2 letter code)##国家名,2个字母代码简称
countryName_default = CN ##中国就是CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)##州或省的名字
stateOrProvinceName_default = beijing
localityName = Locality Name (eg, city) ##本地城市名
localityName_default =beijing
0.organizationName = Organization Name (eg, company) ##组织(公司)名
0.organizationName_default = beijing www company
organizationalUnitName =Organizational Unit Name(eg,section)##组织单元(部门)名
organizationalUnitName_default = www
commonName = Common Name(e.g.server FQDN or YOUR name)##服务器域名
commonName = www.baidu.com
commonName_max = 64
#emailAddress = Email Address ##Email地址
emailAddress = admin@baidu.com
emailAddress_max = 64
# SET-ex3 = SET extension number 3
[ req_attributes ]
#challengePassword = A challenge password ##修改密码
challengePassword =
challengePassword_min = 4
challengePassword_max = 20
6、CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,那我们就自己做证书。
在目录/etc/pki/CA/下已经存在了这些certs文件夹,所以只需要在这个文件下新建index.txt, serial即可(当前目录/root/https 当前用户root)
我们在serial中写入 16进制数,我写的是0000
创建好回到 原来的目录下,我的是https(当前目录/root/https 当前用户root)
openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf
7、用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:(当前目录/root/https 当前用户root)
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
如果报这个错误 TXT_DB error number 2
修改CA下 index.txt.attr yes改为 no 重新执行报错的指令
ok,到了这里应该已经创建了可以使用的证书了,如果在为文件签名的时候有错误,那多半是信息不正确可能是ca和其他端的要一一对应吧,这时可以去清空一下 /etc/pki/CA/里的信息,将index和serial有关的都删除,重新建这两个文件,然后从第5步重新开始。
8、接下来就是配置https了。
我们为了简化代码也不在之前的项目基础上改写了 直接用此代码即可,同时别忘记将生成的server.crt和server.key放在和此文件同级目录下。也别忘记在Centos中安装tornado
from tornado import httpserver
from tornado import ioloop
from tornado import web
class TestHandler(web.RequestHandler):
def get(self):
self.write("Hello, World!")
def main():
application = web.Application([
(r"/", TestHandler),
])
server = httpserver.HTTPServer(application, ssl_options={
"certfile":"server.crt",
"keyfile": "server.key",
})
server.listen(8000)
ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
执行
在浏览器中输入
有些浏览器会报不安全,因为你是自己生成的嘛,人家肯定不信任啊,当然了我们做前后端分离项目是没必要在浏览器装证书的,在ngnix的时候是为了做https的反向代理。否则前端做https访问,在nginx反向代理的时候后端不做https会报错的。
二、在windows 10上搭建https服务器
步骤是一样的证书是必须的,我们将在centos上生成的证书在window上用也是可以的
1、安装openssl,我用的是 openssl-0.9.8k_WIN32
2、进入此文件下bin目录,打开openssl.exe程序
3、生成server.key,同样的这是有密码的,在每次我们连接的时候都需要输入密码,不方便
genrsa -des3 -out server.key 1024
4、去除密码(选用),需要输入刚刚生成key所输入的密码
rsa -in server.key -out server.key
5、 生成csr,同样的要输入国家、城市等等
req -new -key server.key -out server.csr -config openssl.cnf
6、生成自签名证书,有效期365天
x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
这样就会在当前目录下生成证书啦
7、我们把server.crt和server.key放到 和 https_main.py文件一起执行一下试试
oK,到此结束。
来源:CSDN
作者:物联网菜鸟
链接:https://blog.csdn.net/qq_41445357/article/details/104319690