IOS 网络协议(一) 自签名证书HTTPS文件上传下载(下)

2,665 阅读8分钟
  • 网络相关:

IOS 网络协议(一) 自签名证书HTTPS文件上传下载(上)

IOS 网络协议(一) 自签名证书HTTPS文件上传下载(下)

  • 音视频相关

IOS音视频(一)AVFoundation核心类

IOS音视频(二)AVFoundation视频捕捉

IOS音视频(三)AVFoundation 播放和录音

IOS音视频(四十三)AVFoundation 之 Audio Session

IOS音视频(四十四)AVFoundation 之 Audio Queue Services

IOS音视频(四十五)HTTPS 自签名证书 实现边下边播

IOS音视频(四十六)离线在线语音识别方案

IOS 网络协议(一) 自签名证书HTTPS文件上传下载(下)

  • 证书相关概念
  1. 证书分为2类:自签名证书和CA证书。一般自签名证书不能用来进行身份认证,如果一个server端使用自签名证书,client端要么被设置为无条件信任任何证书,要么需要将自签名证书的公钥和私钥加入受信任列表。但这样一来就增加了server的私钥泄露风险
  2. TLS是传输层安全协议(Transport Layer Security)的缩写,是一种对基于网络的传输的加密协议,可以在受信任的第三方公证基础上做双方的身份认证。TLS可以用在TCP上,也可以用在无连接的UDP报文上。协议规定了身份认证、算法协商、密钥交换等的实现。
  3. HTTPS是在基于TLS/SSL的安全套接字上的的应用层协议,除了传输层进行了加密外,其它与常规HTTP协议基本保持一致
  4. 证书是TLS协议中用来对身份进行验证的机制,是一种数字签名形式的文件,包含证书拥有者的公钥及第三方的证书信息。
  5. TLS基于CA的身份认证基本原理是:首先验证方需要信任CA提供方自己的证书(CAcert),比如证书在操作系统的受信任证书列表中,或者用户通过“安装根证书”等方式将 CA的公钥和私钥加入受信任列表;然后CA对被验证方的原始证书进行签名(私钥加密),生成最终的证书;验证方得到最终的证书后,利用CAcert中包含的公钥进行解密,得到被验证方的原始证书。
  6. 根据RSA的加密原理,如果用CA的公钥解密成功,说明该证书的确是用CA的私钥加密的,可以认为被验证方是可信的。
  7. 自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信
  8. 如果你的规划需要创建多个证书,那么使用私有CA的方法比较合适,因为只要给所有的客户端都安装了CA的证书,那么以该证书签名过的证书,客户端都是信任的,也就是安装一次就够了
  9. 如果你直接用自签名证书,你需要给所有的客户端安装该证书才会被信任,如果你需要第二个证书,则还的挨个给所有的客户端安装证书2才会被信任。
  • 证书类型:

x509的证书编码格式有两种:

  1. PEM(Privacy-enhanced Electronic Mail) 是明文格式的 以 -----BEGIN CERTIFICATE-----开头,已-----END CERTIFICATE-----结尾,中间是经过base64编码的内容,apache需要的证书就是这类编码的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -in server.pem 其实PEM就是把DER的内容进行了一次base64编码
  2. DER 是二进制格式的证书 查看这类证书的信息的命令为 :openssl x509 -noout -text -inform der -in server.der
  • 证书扩展名:
  1. .crt 证书文件 ,可以是DER(二进制)编码的,也可以是PEM( ASCII (Base64) )编码的 ,在类unix系统中比较常见
  2. .cer 也是证书 常见于Windows系统 编码类型同样可以是DER或者PEM的,windows 下有工具可以转换crt到cer
  3. .csr 证书签名请求 一般是生成请求以后发送给CA,然后CA会给你签名并发回证书
  4. .key 一般公钥或者密钥都会用这种扩展名,可以是DER编码的或者是PEM编码的 查看DER编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform DER -noout -text -in xxx.key 查看PEM编码的(公钥或者密钥)的文件的命令为 openssl rsa -inform PEM -noout -text -in xxx.key
  5. .p12 证书 包含一个X509证书和一个被密码保护的私钥
  • 关于CA 签名SSL证书

相对自签证书的自己给自己颁证,由权威的证书授权机构(Certificate Authority)颁发的签名证书,我们称之为:CA证书 CA证书保证书持有者的身份和公钥的拥有权 浏览器对CA证书是信任的

4.1 CA证书申请

  • 有很多网站能申请CA证书,如沃通,腾讯,阿里云等,大家可根据自己的喜好去申请 CA证书又分免费和不同价钱的,当然一分钱一分货,对于我们个人开发者来说,免费的CA证书就足够了

4.1.1 从阿里云申请CA证书

  • 1:找到阿里云的CA证书 打开阿里云主页:www.aliyun.com/,选“产品”再选“CA…
    找到阿里云的CA证书
  • 2:选择:立即购买
  • 3:选择免费型DV SSL(最主要是不用钱呵 :p),点立即购买,如下图:
    选择免费型DV SSL
  • 4:点“确认订单”->”去支付“
  • 5:点”证书控制台“
  • 6:点如下图的”补全“,然后填写个人资料
    点如下图的”补全“
  • 7:信息补全后点提交,提交后大概一小时左右就能收到证书申请成功的信息,接下来就下载证书: 去到:”管理控制台“->”产品与服务”->”我的证书“,选择”下载”
    信息补全后点提交
  • 8:阿里云能根据不同的服务器生成不同的证书,如tomcat,apache等,选择自己所要的,如下图:
    阿里云能根据不同的服务器生成不同的证书

4.1.2

4.1.3

4.2 window生成自签名证书

  • 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=(单位的两字母国家代码)”,我在测试的过程中发现随便填就行

  • 4:导出公钥证书(主要用于客户端): 运行命令:
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 所用的密码

4.3 mac生成自签名证书

4.3.1 mac下通过keytool生成自签名证书

  • 首先需要知道jdk安装目录,在terminal下输入: /usr/libexec/java_home -V

    查看jdk版本

  • 2.跳转到jdk目录下

    跳转到jdk目录下

  • 输入keytool查看

    输入keytool查看

  • 3.创建签名:终端输入,keytool -genkey -v -keystore myKey.jks -keyalg RSA -keysize 2048 -validity 10000 -alias myAlias 由于需要权限,执行命令时需要在前面加上sudo

    执行1

  • 按提示输入相关信息,这里会提示要输入密码,我使用的都是相同的密码123456

    按提示输入相关信息

  • 如果前面执行keytool -genkey -v -keystore myKey.jks -keyalg RSA -keysize 2048 -validity 10000 -alias myAlias命令时,没有输入sudo,则会报下面的错误:

    没有输入sudo,则会报下面的错误

  • 输入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

    导出证书certificate.pem

4.3.2 mac下通过openssl生成自签名证书

4.4 nginx服务器配置自签名证书

4.5 tomcat服务器配置自签名证书

4.6 appache服务器配置自签名证书

5. HTTPS 自己实现IOS端证书验证

6. Alamofire实现SSL安全认证 源码解析

7. HTTPS实现文件上传

8. HTTPS实现文件下载

9. HTTPS文件传输通过moya+alamofire+rxswift实现

  1. www.jianshu.com/p/31bcddf44…