标签归档:openssl

HTTPS证书生成和一些基础知识

HTTPS 区别于 HTTP,它多了加密(encryption),认证(verification),鉴定(identification)。它的安全源自非对称加密以及第三方的 CA 认证。

CA 数字证书认证中心

举个栗子

普通的介绍信

假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?

常用的办法是带公司开的一张介绍信,在信中说:兹有张三先生前往贵公司办理业务,请给予接洽……云云。

然后在信上敲上A公司的公章。

张三先生到了 B 公司后,把介绍信递给 B 公司的前台李四小姐。李小姐一看介绍信上有 A 公司的公章,而且A公司是经常和 B 公司有业务往来的,这位李小姐就相信张先生不是歹人了。

引入中介机构的介绍信

好,回到刚才的话题。如果和 B 公司有业务往来的公司很多,每个公司的公章都不同,那前台就要懂得分辨各种公章,非常滴麻烦。

所以,有某个中介公司 C,发现了这个商机。C公司专门开设了一项“代理公章”的业务。

今后,A 公司的业务员去B公司,需要带2个介绍信:
  介绍信1
  含有 C 公司的公章及 A 公司的公章。并且特地注明:C 公司信任A公司。
  
  介绍信2
  仅含有 A 公司的公章,然后写上:兹有张三先生前往贵公司办理业务,请给予接洽……云云。

这样不是增加麻烦了吗?有啥好处捏?

主要的好处在于,对于接待公司的前台,就不需要记住各个公司的公章分别是啥样子的;他/她只要记住中介公司 C 的公章即可。

当他/她拿到两份介绍信之后,先对“介绍信1”的 C 公章,验明正身;确认无误之后,再比对“介绍信1”和“介绍信2”的两个 A 公章是否一致。如果是一样的,那就可以证明“介绍信2”是可以信任的了。

在上面的栗子中,C公司 就是 CA认证中心。 介绍信就是CA认证。

CA 认证分为三类:

  • DV(Domain Validation),面向个体用户,安全体系相对较弱,验证方式就是向 whois 信息中的邮箱发送邮件,按照邮件内容进行验证即可通过;
  • OV(Organization Validation),面向企业用户,证书在 DV 证书验证的基础上,还需要公司的授权,CA 通过拨打信息库中公司的电话来确认;
  • EV(Extended Validation),打开 Github 的网页,你会看到 URL 地址栏展示了注册公司的信息,这会让用户产生更大的信任,这类证书的申请除了以上两个确认外,还需要公司提供金融机构的开户许可证,要求十分严格。

生成密钥、证书

具体操作前,还要先说一些基本概念:

  • .pem: 这是一个集合格式。公钥和私钥都是这个格式。为了区分一般私钥用.key后缀,公钥用.pub后缀。

  • .csr:这个后缀的全称是Certificate Signing Request,即是证书签名请求文件。有一些应用可以通过向证书颁发机构certificate-authorities提交请求,来生成这个文件。 这个文件实际的格式是 PKCS10 。它包括了证书请求的所有的相关细节信息,包括 subject ,orginataion,state,whatnot,以及证书的公钥,之后csr文件会被提交给caca在其基础上进行数字签名,将签名之后的文件返回过来,这个返回过来的文件就是公钥文件(其中包含了public key不包含private key)。这个返回回来的文件也可以有多种格式。可以用如下的命令查看相关信息openssl req -text -noout -in yourcsrfile.csr

  • .pkcs12 .pkx .p12最初被RSA定义在 Public-Key Cryptography Stantard 中,变量12表示这个是被Microsoft加强过的。这个格式同时包含公钥和私钥证书对,不同于.pem文件,这个格式的文件是被加密过的,Openssl可以把这个格式的文件转化成为同时包含公钥和私钥信息的文件:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

  • .crt .cer .cert 实质上是.pem(准确的说是.der)格式的文件的不同扩展。以这些后缀结尾的文件,会被windows的浏览器默认为是证书文件,而.pem不会被这样认出。

  • .der是另一种证书格式,它根据ASN1 DER 格式来存储,ASN1全称Abstract Syntax Notation One也是一种对于数据表示,编码以及传输的数据格式。.pem实际上是采用base64加密之后的.der文件。openssl也可以把.der文件转化成为.pem文件openssl x509 -inform der -in to-convert.der -out converted.pem


具体操作

第一部生成CA证书

现在目录里面会有三个文件,更具上面的基础知识的描述,可以知道这些什么是文件

第一步,为服务器端准备公钥、私钥

目录里多了2个服务端的公钥和私钥

第三步,生成服务器端证书

这次多了三个文件

另外多出来的ca.srl是什么文件呢?

是用来存储证书序列号文件的。

Nginx 部署

nginx配置的server中加上如下配置:

重启后就可以正常访问了。但是很由于CA证书是我们自己签发的,浏览器并不认可,所以会进行警告。

双向认证

在项目中为了数据传输的安全性,我们就可以加上ssl认证。比如:移动端请求服务端的认证加密,以及内部服务的认证加密都可以使用。

第一步, 既然是双向认证,那么我们同样需要为客户端生成一套密钥。

第二步,nginx启用双向认证。

第三步,客户端。

执行

但是这个时候用浏览器访问就会400错误。

这是我们可以为浏览器生成一个证书。然后让浏览器导入就可以访问了。

导入流程见下方

输入刚刚这只的密码即可

点击确认完成

刷新后,选择证书。

之后正常访问。

参考以及引用自:

  1. http://wangzhezhe.github.io/blog/2015/08/05/httpsandgolang/
  2. http://www.cnblogs.com/freespider/p/3622830.html
  3. http://www.barretlee.com/blog/2015/10/05/how-to-build-a-https-server/
  4. http://blog.csdn.net/jiangwlee/article/details/7724274

搭建HTTPS服务器

一、申请https证书

StartSSL可以免费申请https证书,但是免费证书只能使用在一个域名中。

1、登录或注册账号

有账号就登录,没账号就注册。

选择地区、填写邮件,等待确认验证码。

安装浏览器证书

安装完成,点击选择证书,登录。

2、域名验证

选择Validations Wizard -> Domian Validation 域名验证

填写域名

等待获取域名信息,选择验证方式,输入验证码,确认验证,完毕。

3、申请证书

选择 Certificates -> Web Server SSL/TLS Certificate 网页服务器SSL认证

输入域名,以及密钥,点击提交。

系统会根据刚刚输入的密钥生成一个私钥,我们需要将其保存下来。

之后StartSSL就会通过我们的申请。我们只需要将其下载下来上传到服务器即可。

二、服务器配置

www.iter-cc.com.zip解压后得到不同版本服务器的证书,我需要使用的是Nginx Server.zip

解压Nginx Server.zip

服务器配置

编辑nginx配置

当我们重启服务器的时候,系统会让我们输入刚刚生成密钥的命令

输入确认后即可完成。

访问网站,OK!

如果嫌每次重启服务器的时候需要输入密码比较烦,我们可以解密私钥。然后将nginx的路径指向解密后的密钥即可。

编辑服务器配置

之后重启服务器就可以无需密码。

访问网站确认ok!!!