使用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
- 方法一:创建没有密码保护的(1024也可以是2048)
创建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
- 剩下的就简单了。在你的项目中添加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生成证书
·
- 使用Openssl 创建可以被Torando使用的crt证书以及Key密钥
- 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书
- 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书
- 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书
- 使用OPENSSL创建证书
- 使用openssl生成证书及密钥失败
- openssl 生成证书 server.key server.crt
- linux下使用openssl生成 csr crt CA证书
- linux下使用openssl生成 csr crt CA证书
- 使用openssl来生成CA证书、申请证书、颁发证书以及撤销证书的过程
- 使用openssl来生成CA证书、证书申请、颁发证书以及撤销证书的过程
- OpenSSL生成.key、.crt、.pfx证书(Windows下)
- 使用OpenSSL创建CA颁发证书
- 如何使用openssl创建根CA和中间CA以及签署其他client证书请求
- 使用OpenSSL生成证书
- openssl 使用证书
- 使用openssl签发证书
- 使用OpenSSL生成证书
- ServletContext与ApplicationContext
- 数据库存储过程学习(一)
- 学习笔记——JAVA执行javascript
- AngularJs的UI组件ui-Bootstrap分享(四)——Datepicker Popup
- Oracle 11G数据库导入导出
- 使用Openssl 创建可以被Torando使用的crt证书以及Key密钥
- [JAVA学习笔记-86]ConcurrentHashMap与synchronizedMap的对比
- 今天重温了Css样式。发现回头已不是从前
- MQ产品比较-ActiveMQ-RocketMQ
- 中国架构师大会:系统架构的迭代与创新
- 腾讯的微信小程序开发环境下常用快捷键汇总
- memcached与redis区别比较及选择
- opengles动画
- onMeasure()和onSizeChanged()