OpenSSL生成自签名SSL证书科普:TLS、SSL、HTTPS与证书很多人可能听过不止3种,但它们有什么联系呢?TLS是传输层安全(TransportLayerSecurity)的缩写。它是一种基于网络传输的加密协议。它可以在受信任的第三方公证的基础上对双方进行身份验证。TLS可用于TCP或无连接的UDP数据包。该协议规定了身份认证、算法协商、密钥交换等的实现。SSL是TLS的前身,不再更新。HTTPS是基于TLS/SSL安全套接字的应用层协议。除了传输层加密外,与常规的HTTP协议基本一致。证书是TLS协议中用于验证身份的机制。包含证书所有者的公钥和第三方证书信息的数字签名形式的文件。有两种类型的证书:自签名证书和CA证书。一般情况下,自签名证书不能用于身份认证。如果服务器使用自签名证书,则必须将客户端设置为无条件信任任何证书,或者必须将自签名证书的公钥和私钥添加到信任列表中。但这增加了服务器私钥被泄露的风险。基于TLSCA的身份认证的基本原理是:首先,验证者需要信任CA提供者自己的证书(CAcert),例如证书在操作系统的可信证书列表中,或者用户安装了CA的通过“安装根证书”获得证书。将公钥和私钥添加到信任列表中;然后CA对被验证方的原始证书进行签名(私钥加密),生成最终证书;验证者得到最终证书后,使用CAcert中包含的公钥进行解密,得到被认证方的原始证书。根据RSA的加密原理,如果用CA的公钥解密成功,则说明证书确实是用CA的私钥加密的,可以认为被验证方是可信的。微信小程序支持https和Websocket用于第三方服务器的网络通信。WebSocket是HTML5提供的一种在单TCP连接上进行全双工通信的协议,解决了HTTP协议效率低下的问题,可以更好的节省服务器资源和带宽,实现实时通信。这里我选择使用node.js来配置本地服务器。它有很多websocket库,ws就是其中之一。它被称为最轻和最快的。ws的使用比较简单,直接看https://github.com/websockets/ws即可。这里重点介绍微信小程序带ssl证书的websocket的实现。在生产环境中,建议大家购买ssl证书。在开发环境中,可以生成一个ssl自签名证书,临时使用。这里的开发环境是win7X64系统。1、安装OpenSSL下载链接:http://slproweb.com/products/Win32OpenSSL.html这里建议下载32位版本,因为任何版本的window都可以使用。!!!强烈建议下载v1.0.2版本,不要使用v1.1.0及更新版本,因为会出现bug:“problemcreatingobjecttsa_policy1=1.2.3.4.1”!如果在安装过程中出现此窗口,说明您的电脑上没有安装VisualC++2008Redistributables,请自行下载安装。安装的其余部分都是默认的。我安装在D:\OpenSSL-Win32目录下。这里我要将证书输出到D盘根目录,先用管理员权限打开cmd(切记!!!)。然后进入D盘根目录。在创建证书之前,需要设置2个环境变量:setRANDFILE=D:\.rndsetOPENSSL_CONF=D:OpenSSL-Win32binopenssl.cfg第二句告诉系统在哪里可以找到openssl.cfg文件。现在就可以运行OpenSSL了,在cmd中输入D:OpenSSL-Win32binopenssl.exe运行。上面的流程如图所示:2、生成服务器证书第一步:对于一个网站来说,首先要有自己的私钥。为服务器创建一个1024位的RSA密钥,保存在ca.key文件中:opensslgenrsa-outssl.key1024如果要加密码保护,改成如下命令:opensslgenrsa-des3-outssl。key1024使用私钥可以生成证书。OpenSSL使用x509命令生成证书。这里需要区分两个概念:证书(certificate)和证书请求(certificatesignrequest)证书是用于身份认证的自签名或CA签名的凭证。证书请求是签名请求,需要使用私钥进行签名。x509命令可以将证书和证书请求相互转换,但是我们这里只使用从证书请求到证书的过程。第2步:可以从私钥或加密的私钥生成“证书请求”:opensslreq-new-keyssl.key-outssl.csr如果私钥已加密,则需要密码。req命令会要求用户通过命令行输入国家、地区、组织等信息,这些信息会附加到证书上显示给连接方。第三步:使用私钥对“证书请求”进行签名,生成证书crt。根据不同的场景,签名的方式也略有不同:(1)自签名,生成私有证书自签名的原理是使用私钥对私钥生成的“证书请求”进行签名生成证书文件。证书的颁发者是自己,所以验证者必须有证书的私钥来验证所颁发的信息,所以要么验证者信任所有证书,面临被冒充的风险,要么验证者的私钥(或加密私钥)key)需要发送给验证者,面临私钥泄露的风险。当然,自签名也不是没有用。例如,两台需要内部通信的计算机需要使用加密但不想使用第三方证书。他们可以在两端使用相同的私钥和证书进行验证(当然,这与对称加密没有区别。)。自签名的方法是:opensslx509-req-inssl.csr-signkeyssl.key-outssl.crt(2)自签名,生成CA证书CA证书是一种特殊的自签名证书,可以用于其他证书的签名。这样,当验证者选择信任CA证书时,其他签署的证书就会被信任。验证者在验证时,CA证书来自操作系统的可信证书库或指定的证书列表。opensslx509-req-insign.csr-extensionsv3_ca-signkeysign.key-outsign.crt(3)使用CA证书签署其他证书opensslx509-req-inssl.csr-extensionsv3_usr-CAsign.crt-CAkeysign.key-CAcreateserial-outssl.crt3.知识扩充如果要使用从属CA密钥进行授权码签名(通过微软的signtool工具),必须将密钥和证书打包成一个PKCS12文件。pkcs12-export-outia.p12-inkeyia.key-inia.crt-chain-CAfileca.crt如果在上一节中,您将根CA和从属CA的CommonName设置为相同,那么这个步骤您将收到如下错误:自签名证书在pkcs12中获取chain.error时出错要在Windows上使用signtool对可执行文件进行签名:在“受信任的根证书颁发机构”存储中安装ia.p12文件(例如:双击它),并使用signtool/wizard对其进行签名。上面创建的证书(.crt文件)也可以双击查看安装:欢迎加入QQ群交流:146202960或点击链接加入QQ群:https://jq.qq.com/?_wv=1027&k。..
