- 网络相关:
IOS 网络协议(一) 自签名证书HTTPS文件上传下载(上)
IOS 网络协议(一) 自签名证书HTTPS文件上传下载(下)
- 音视频相关
IOS音视频(四十三)AVFoundation 之 Audio Session
IOS音视频(四十四)AVFoundation 之 Audio Queue Services
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证书和一个被密码保护的私钥
- 关于CA 签名SSL证书
相对自签证书的自己给自己颁证,由权威的证书授权机构(Certificate Authority)颁发的签名证书,我们称之为:CA证书 CA证书保证书持有者的身份和公钥的拥有权 浏览器对CA证书是信任的
4.1 CA证书申请
- 有很多网站能申请CA证书,如沃通,腾讯,阿里云等,大家可根据自己的喜好去申请 CA证书又分免费和不同价钱的,当然一分钱一分货,对于我们个人开发者来说,免费的CA证书就足够了
4.1.1 从阿里云申请CA证书
- 1:找到阿里云的CA证书 打开阿里云主页:www.aliyun.com/,选“产品”再选“CA…
- 2:选择:立即购买
- 3:选择免费型DV SSL(最主要是不用钱呵 :p),点立即购买,如下图:
- 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
-
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