搭建Tornado Https服务器之Tornado Https服务器(8)

       本次教程将记录如何配置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                    = [email protected]
 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,到此结束。 

发布了16 篇原创文章 · 获赞 0 · 访问量 304

猜你喜欢

转载自blog.csdn.net/qq_41445357/article/details/104319690