首页域名资讯 正文

部署SSL证书,升级HTTPS安全传输协议

2025-02-18 3 0条评论

http2与HTTPS的关系

HTTP 2.0即超文本传输协议 2.0,是下一代HTTP协议。是由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自1999年http1.1发布后的首个更新。HTTP 2.0在2013年8月进行首次合作共事性测试。在开放互联网上HTTP 2.0将只用于https://网址,而 http://网址将继续使用HTTP/1,目的是在开放互联网上增加使用加密技术,以提供强有力的保护去遏制主动攻击。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

HTTPS证书 原理

由于Internet的架构问题,信息在网络上传输是很容易被别人获取的,那如何建立一个安全的传输网络呢?SSL是建立在信息安全技术的基础上的一套协议,用来保证通信的安全。SSL全称是 Secure Sockets Layer,它是一种间于传输层(比如TCP/IP)和应用层(比如HTTP)的协议。

保证通信安全的最简单的方法是用非对称加密。如果双方都认证了对方的数字证书,那么每次传输信息的时候都用对方的公钥加密,这样就只有对方能解密,从而保证了信息的安全。

SSL的工作原理分别是“握手协议”和“传输协议”。握手协议是基于非对称加密的,而传输协议是基于对称加密的。根据不同的应用,SSL对证书的要求也是不一样的,可以是单方认证(比如HTTP, FTP),也可以是双方认证(比如网上银行)。通常情况下,服务器端的证书是一定要具备的,客户端的证书不是必须的。下面两张图片显示了SSL握手的过程。

 
图1:SSL握手,单方服务器认证

 
图2:SSL握手,双方认证

握手协议可以看成是客户端和服务器协商的一个过程,结果就是一个对称密钥,然后就进入了传输协议的部分。在通信双方协商出一个对称密钥以后,他们用这个密钥来加密传输的数据。同时为每个消息生成时间戳,用此密钥为消息和相应的时间戳生成消息认证码(MAC)。也就是说,每次发送的内容包括 Encrypt(message) + MAC(message + timestamp)

SSL证书生成

SSL证书包括:

1,CA证书,也叫根证书或者中间级证书。如果是单向https认证的话,该证书是可选的。不安装CA证书的话,浏览器默认是不安全的。

2,服务器证书,必选项。通过key,证书请求文件csr,再通过CA证书签名,生成服务器证书。

3,客户端证书,可选项。若有客户端证书则是双向https验证。

以上所有证书都可以自己生成。

文件后缀

linux系统是不以后缀名来判断文件类型的,但是为了我们能够更好地判断文件用途,所以添加各种后缀。以下是约定成俗的后缀。

*.key:密钥文件,一般是SSL中的私钥;

*.csr:证书请求文件,里面包含公钥和其他信息,通过签名后就可以生成证书;

*.crt, *.cert:证书文件,包含公钥,签名和其他需要认证的信息,比如主机名称(IP)等。

*.pem:里面一般包含私钥和证书的信息。

 

服务器证书的生成

a)  生成服务器私钥

openssl genrsa -des3 -out server.key 1024

输入加密密码,用 128 位 rsa 算法生成密钥,得到 server.key 文件。

b)  生成服务器证书请求( CSR )

openssl req -new -key server.key -out server.csr

CSR( Certificate Signing Request)是一个证书签名请求,在申请证书之前,首先要在服务器上生成 CSR ,并将其提交给 CA 认证中心, CA 才能签发 SSL 服务器证书。也可以认为, CSR 就是一个在服务器上生成的证书。

在生成这个文件的过程中,有一点需要特别注意,Common Name 填入主机名(或者服务器IP)。

c)  自己生成服务器证书

如果不使用 CA 证书签名的话,用如下方式生成:

openssl req -x509 -days 1024 -key server.key -in server.csr > server.crt

用服务器密钥和证书请求生成证书 server.crt , -days 参数指明证书有效期,单位为天。商业上来说,服务器证书是由通过第三方机构颁发的,该证书由第三方认证机构颁发的。

如果使用 CA 证书签名,用 openssl 提供的工具 CA.sh 生成服务器证书:

mv server.csr newreq.pem

./CA.sh -sign

mv newcert.pem server.crt

签名证书后,可通过如下命令可查看服务器证书的内容:

openssl x509 -noout -text -in server.crt

可通过如下命令验证服务器证书:

openssl verify -CAfile ca.crt server.crt

客户证书的生成

客户证书是可选的。如果有客户证书,就是双向认证 HTTPS,否则就是单向认证 HTTPS。

a)  生成客户私钥

openssl genrsa -des3 -out client.key 1024

b)  生成客户证书签名请求

openssl req -new -key client.key -out client.csr

c)  生成客户证书(使用 CA 证书签名)

openssl ca -in client.csr -out client.crt

d)  证书转换成浏览器认识的格式

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx

HTTPS证书配置以Nginx 配置为例

小结一下 Nginx 配置SSL注意的问题,详细安装配置内容请参考其它资料,如官方 SSL模块 和 https配置文档。

  1. 首先检查一下是否已安装了 SSL模块,因为默认是不包含的。

用 nginx -V 命令检查一下。如果没有ssl模块则需要重新安装(建议升级到最新版本),注意安装时加上ssl 选项:

./configure –with-http_ssl_module

另外,nginx需要依赖 openssl 提供ssl支持,这个也要有。

  1. nginx.conf 中的典型配置示例

listen     80;

listen    443 ssl;

ssl_certificate      cert.pem; #修改具体文件

ssl_certificate_key  ssl.key; #修改具体文件

ssl_session_cache    shared:SSL:10m;

ssl_session_timeout  10m;

ssl_protocols  SSLv2 SSLv3 TLSv1;

ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

ssl_prefer_server_ciphers   on;

上面第2-4项是关键。这些配置放在 server 块就可以对其中的所有 location 生效了,并且同时支持 http 和 HTTPS。或者把 http 和 HTTPS分开配置也很常见。

  1. 合并证书配置文件

和Apache配置不同,Nginx需要将服务器证书和ca证书链合并到一个文件中,作为 ssl_certificate 配置的内容。

例如,按照证书链从下向上的顺序,我有三个证书:

ssl.crt(自己域名的服务器证书)

sub.class1.trustauth.cn.pem(startssl 的一类证书)

ca.pem(startssl 的根证书)

把它们的内容按顺序连接到的一个文件中,每个内容另起一行,中间没有空行或空格。

 

  1. 避免启动时输入密码

配好之后,启动nginx 要你输入密钥的密码。这是因为 ssl_certificate_key 配置对应的文件(也就是 startssl 给你的私钥文件)内容是加密的,需要输入你创建这个时设置的密码才能解密。这样私钥虽然很安全,但是每次重启服务都要输入一次密码也太麻烦了。其实,只要证书改为解密了的内容,就可以避免每次输入密码。用如下命令即可:

openssl rsa -in ssl.key -out newssl.key  输入密码,就生成了解密后的私钥内容,使用这个就OK了。

更多HTTPS证书配置方法,请关注GDCA!

文章版权及转载声明

本文作者:亿网 网址:https://edns.com/ask/post/149685.html 发布于 2025-02-18
文章转载或复制请以超链接形式并注明出处。