使用Openssl 创建可以被Torando使用的crt证书以及Key密钥

来源:互联网 发布:linux shell 引号 参数 编辑:程序博客网 时间:2024/05/18 12:29

Hello ,I am KitStar


注意:所有的操作都在Ubuntu32位系统中进行。代码都在终端进行。生成的证书以及KEY将用在Window.

1. 首先创建自己的CA

  • 首先,需要准备一个放置CA文件的目录,包括颁发的证书和CRL。这里我们选择目录为:/var/MyCA.
    然后我再在这个目录中建立三个文件。

    $ mkdir /var/MyCA$ cd /var/MyCA$ mkdir certs private$ chmod g-rwx,o-rwx private$ echo "01" > serial           //这个文件用来追踪最后一次颁发的证书ude序列号。初始化为01$ touch index.txt          //这个文件是一个排序数据库,用来跟踪已经颁发的证书。

    这第三个文件是Openssl的配置文件也是最重要的文件。如果没有这个文件,将无法给自己的证书签名。

    创建文件:

    $ touch openssl.cnf

    创建完成之后,在文件夹找到这个文件。然后在里面写入配置信息,如下:

    [ ca ]default_ca = myca[ myca ]dir = /var/MyCAcertificate = $dir/cacert.pemdatabase = $dir/index.txtnew_certs_dir = $dir/certsprivate_key = $dir/private/cakey.pemserial = $dir/serialdefault_crl_days= 7default_days = 365default_md = md5policy = myca_policyx509_extensions = certificate_extensions// 一下的内容将根据你的项目需求修改。读者在正常使用的时候请删除这句话。[ myca_policy ]commonName = LiKaiCAstateOrProvinceName = shanghaicountryName = cnemailAddress = 774968931@qq.comorganizationName= liugankejiorganizationalUnitName = SGMWPETH5SERVER[ certificate_extensions ]basicConstraints= CA:false
  • 我们需要告诉Openssl配置文件的历路径。我们通过环境变量设置:

    $ OPENSSL_CONF=/var/MyCA/openssl.cnf$ export OPENSSL_CONF
  • 我们需要一个根证书为自己颁发的证书签名,这个证书可以从其他CA获取,或者用自签名的证书。想必大家刚开始都用来测试,所有此处我们用不用第三方去认证。我们自己生成一个自签名的根证书。(当然,浏览器不认的。咱这相当于自己刻了个自己的章子,没有多少可信度以及权威性。别人是不认的。)

    首先,还是打开刚才创建的openssl.cnf文件。继续添加一下命令:

    [ req ]default_bits = 2048default_keyfile = /var/MyCA/private/cakey.pemdefault_md = md5prompt = nodistinguished_name = root_ca_distinguished_namex509_extensions = root_ca_extensions// 一下的内容将根据你的项目需求修改。读者在正常使用的时候请删除这句话。[ root_ca_distinguished_name ]commonName = LiKaiCAstateOrProvinceName = shanghaicountryName = cnemailAddress = 774968931@qq.com organizationName = Root Certification Authority[ root_ca_extensions ]basicConstraints = CA:true
  • 好了。现在生成自己的根证书。

    $ openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf
  • OK,这时候穿创建了ca.key 以及 ca.crt两个文件。
    可以验证一下信息是否正确:

    openssl x509 -in ca.crt -text -noout

    预留这两个文件。等会为自己的证书进行签名认证。

2. 生成SSL证书

  • 首先要生成自己服务器的私钥(key文件):
    • 方法一:创建没有密码保护的(1024也可以是2048)

      $ openssl genrsa -out server.key 1024 (with out password protected)
    • 方法二:创建又密码保护的

      $ openssl genrsa -des3 -out server.key 1024 (password protected)
    • 注意:如果用方法二创建的key.则在每次访问服务器的时候都需要输入密码。如果觉得不方便可以用一下命令去除这个密码验证。

      $ openssl rsa -in server.key -out server.key
  • 创建CSR文件:

    $ openssl req -new -out server.csr -key server.key 

    注意:如果无法创建,有可能是权限不够。

    然后终端就是出现一些用户信息列表,需要你自己填入:

    Country Name (2 letter code) [AU]:cn State or Province Name (full name) [Some-State]:shanghaiLocality Name (eg, city) []:shanghaiOrganization Name (eg, company) [Internet Widgits Pty Ltd]:liugankejiOrganizational Unit Name (eg, section) []:SGMWPETH5SERVERCommon Name (eg, YOUR name) []:192.168.1.69   注释:一定要写服务器所在的ip地址 Email Address []:774968931@qq.com

3. 最后,用生成的CA证书为刚才的server.csr文件签名,生成对应的 server.crt 文件

$ openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA ../ca.crt -CAkey ../ca.key -CAcreateserial -days 3650  

OK,打完收工。现在把你的生成的server.key 和 server.crt 文件传到window文件夹中。


4,在Tornado网站中开启HTTPS

  1. 剩下的就简单了。在你的项目中添加server.key 和 server.crt 文件。并且修改对应的代码:
import os.pathfrom tornado import httpserverfrom tornado import ioloopfrom tornado import webclass TestHandler(web.RequestHandler):    def get(self):        self.write("Hello, World!")def main():    settings = {        "static_path": os.path.join(os.path.dirname(__file__), "static"),    }    application = web.Application([        (r"/", TestHandler),    ], **settings)    server = httpserver.HTTPServer(application, ssl_options={           "certfile": os.path.join(os.path.abspath("."), "server.crt"),           "keyfile": os.path.join(os.path.abspath("."), "server.key"),    })    server.listen(8000)    ioloop.IOLoop.instance().start()if __name__ == "__main__":    main()

然后把相关的证书扔到 py 文件的目录下。改成相应的名字。然后开启服务。

接着用浏览器或curl啥的尝试访问一下: curl https://localhost:8000

看到请求返回的 Hello, World! 了么? 当然…..

不行了。因为浏览器没有这个server.crt证书。就算你导入,也不行。因为咱的这个证书啊。不是权威机构签名认证的,是刚才自己用自己创建的CA进行认证的

5. 为U3D 的安卓应用进行Https访问进行准备

如果将要用在U3D 客户端进行对服务器的访问。则还要生成相应的客户端的证书:“client.p12”。不然的的话。U3D 打包出来只能用在PC 端。安卓以及苹果将没法使用。

1.创建私钥 :

C:/OpenSSL/bin>openssl genrsa -out client/client-key.pem 1024  

2.创建证书请求 :

C:/OpenSSL/bin>openssl req -new -out client/client-req.csr -key client/client-key.pem 
Country Name (2 letter code) [AU]:cn State or Province Name (full name) [Some-State]:shanghaiLocality Name (eg, city) []:shanghaiOrganization Name (eg, company) [Internet Widgits Pty Ltd]:liugankejiOrganizational Unit Name (eg, section) []:SGMWPETH5SERVERCommon Name (eg, YOUR name) []:ClientEmail Address []:Client    //注释:就是登入中心的用户(本来用户名应该是Common Name,但是中山公安的不知道为什么使用的Email Address,其他版本没有测试) Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:123456 An optional company name []:liugankeji

3.自签署证书 :

C:/OpenSSL/bin>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ../ca.crt -CAkey ../ca.key -CAcreateserial -days 3650  

4.将证书导出成浏览器支持的.p12格式 :

C:/OpenSSL/bin>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12   

具体U3D 安卓中的操作在下一篇文章中:U3D 安卓通过openssl创建的电子证书进行HTTPS 加密访问

友谊链接:
openssl制作证书全过程
使用Tornado搭建HTTPS网站
使用OpenSSL生成证书

·

阅读全文
0 0
原创粉丝点击