IOS 网络协议(一) 自签名证书HTTPS文件上传下载(上)html
IOS 网络协议(一) 自签名证书HTTPS文件上传下载(下)java
IOS音视频(三)AVFoundation 播放和录音shell
IOS音视频(四十三)AVFoundation 之 Audio Session数据库
IOS音视频(四十四)AVFoundation 之 Audio Queue Servicesapache
IOS音视频(四十五)HTTPS 自签名证书 实现边下边播swift
IOS音视频(四十六)离线在线语音识别方案windows
IOS 网络协议(一) 自签名证书HTTPS文件上传下载(下)浏览器
- 证书分为2类:自签名证书和CA证书。通常自签名证书不能用来进行身份认证,若是一个server端使用自签名证书,client端要么被设置为无条件信任任何证书,要么须要将自签名证书的公钥和私钥加入受信任列表。但这样一来就增长了server的私钥泄露风险
- TLS是传输层安全协议(Transport Layer Security)的缩写,是一种对基于网络的传输的加密协议,能够在受信任的第三方公证基础上作双方的身份认证。TLS能够用在TCP上,也能够用在无链接的UDP报文上。协议规定了身份认证、算法协商、密钥交换等的实现。
- HTTPS是在基于TLS/SSL的安全套接字上的的应用层协议,除了传输层进行了加密外,其它与常规HTTP协议基本保持一致
- 证书是TLS协议中用来对身份进行验证的机制,是一种数字签名形式的文件,包含证书拥有者的公钥及第三方的证书信息。
- TLS基于CA的身份认证基本原理是:首先验证方须要信任CA提供方本身的证书(CAcert),好比证书在操做系统的受信任证书列表中,或者用户经过“安装根证书”等方式将 CA的公钥和私钥加入受信任列表;而后CA对被验证方的原始证书进行签名(私钥加密),生成最终的证书;验证方获得最终的证书后,利用CAcert中包含的公钥进行解密,获得被验证方的原始证书。
- 根据RSA的加密原理,若是用CA的公钥解密成功,说明该证书的确是用CA的私钥加密的,能够认为被验证方是可信的。
- 自签名的证书没法被吊销,CA签名的证书能够被吊销 能不能吊销证书的区别在于,若是你的私钥被黑客获取,若是证书不能被吊销,则黑客能够假装成你与用户进行通讯
- 若是你的规划须要建立多个证书,那么使用私有CA的方法比较合适,由于只要给全部的客户端都安装了CA的证书,那么以该证书签名过的证书,客户端都是信任的,也就是安装一次就够了
- 若是你直接用自签名证书,你须要给全部的客户端安装该证书才会被信任,若是你须要第二个证书,则还的挨个给全部的客户端安装证书2才会被信任。
x509的证书编码格式有两种:
- PEM(Privacy-enhanced Electronic Mail) 是明文格式的 以 -----BEGIN CERTIFICATE-----开头,已-----END CERTIFICATE-----结尾,中间是通过base64编码的内容,apache须要的证书就是这类编码的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -in server.pem 其实PEM就是把DER的内容进行了一次base64编码
- DER 是二进制格式的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -inform der -in server.der
.crt
证书文件 ,能够是DER(二进制)编码的,也能够是PEM( ASCII (Base64) )编码的 ,在类unix系统中比较常见.cer
也是证书 常见于Windows系统 编码类型一样能够是DER或者PEM的,windows 下有工具能够转换crt到cer.csr
证书签名请求 通常是生成请求之后发送给CA,而后CA会给你签名并发回证书.key
通常公钥或者密钥都会用这种扩展名,能够是DER编码的或者是PEM编码的 查看DER编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform DER -noout -text -in xxx.key 查看PEM编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform PEM -noout -text -in xxx.key.p12
证书 包含一个X509证书和一个被密码保护的私钥
相对自签证书的本身给本身颁证,由权威的证书受权机构(Certificate Authority)颁发的签名证书,咱们称之为:CA证书 CA证书保证书持有者的身份和公钥的拥有权 浏览器对CA证书是信任的
1:先下载安装Java JDK:www.oracle.com/technetwork…
2:安装完后,根据实际的路径找到keytool.exe,如个人在此路径:C:\Program Files (x86)\Java\jdk1.8.0_101\bin\keytool.exe
3:生成keystore。打开命令行(cmd),去到keytool所在的路径,运行:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore d:\mykeystore\keystore.p12 -validity 3650 -ext san=ip:192.168.100.132 -dname "CN=garyyan, OU=mycompany, O=mycompany, L=gd, ST=gd, C=china"
复制代码
此命令中间只须要输入密码,就能生成keystore,假设密码是:123456 其中: 1)keystore可理解为一个数据库,能够存不少个组数据。 每组数据主要包含下面两种数据: a:密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) b:可信任的证书实体(trusted certificate entries)——只包含公钥 2)-keystore d:\mykeystore\keystore.p12,指定在d:\mykeystore(先要手动建立此文件夹),生成keystore:keystore.p12 3)-alias tomcat,为其指明在keystore中的惟一的别名:tomcat ,由于keystore中可能还存有其它的别名,如:tomcat 2 4)-storetype PKCS12指明密钥仓库类型是PKCS12 5)-keyalg RSA,指定加密算法,本例中的采用通用的RAS加密算法 6)-keysize 2048指定密钥的长度为2048 7)-validity 3650 指定证书的有效期为3650天 8)-ext san=ip:192.168.100.132请根据你的服务器的IP地址设置,若是不进行设置,客户端在访问的时候可能会报错 9)-dname “CN=garyyan, OU=mycompany,O=mycompany,L=gd, ST=gd, C=china” 其中:”CN=(名字与姓氏), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), ST=(州或省份名称), C=(单位的两字母国家代码)”,我在测试的过程当中发现随便填就行
keytool -export -keystore d:\mykeystore\keystore.p12 -alias tomcat -file mycer.cer -storepass 123456
复制代码
其中: 1)-keystore d:\mykeystore\keystore.p12 是指上面的keystore文件 2)-alias tomcat是指定别名为tomcat的那一组 3)-file mycer.cer指定在当前目录生成名为mycer.cer的证书 4)-storepass 123456是上面生成keystore 所用的密码
首先须要知道jdk安装目录,在terminal下输入: /usr/libexec/java_home -V
2.跳转到jdk目录下
输入keytool查看
3.建立签名:终端输入,keytool -genkey -v -keystore myKey.jks -keyalg RSA -keysize 2048 -validity 10000 -alias myAlias
因为须要权限,执行命令时须要在前面加上sudo
按提示输入相关信息,这里会提示要输入密码,我使用的都是相同的密码123456
若是前面执行keytool -genkey -v -keystore myKey.jks -keyalg RSA -keysize 2048 -validity 10000 -alias myAlias
命令时,没有输入sudo,则会报下面的错误:
输入sudo和密码后执行结果以下:
查看keystore的指纹数据:keytool -v -list -keystore myKey.jks -alias myAlias -keypass 123456 -storepass 123456
导出证书certificate.pem: sudo keytool -export -rfc -alias myAlias -file upload_certificate.pem -keystore myKey.jks
, 这里一样有权限问题,须要使用sudo