HTTP 之 HTTPS实现

1 概述

HTTPS(全称:httpover ssl,Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

https性能相对http差,所以https在保护隐私上有提高了,但是性能降低了

2SSL会话的简化过程

(1)客户端发送可供选择的加密方式,并向服务器请求证书

(2)服务器端发送证书以及选定的加密方式给客户端

(3)客户端取得证书并进行证书验证

如果信任给其发证书的CA,执行以下五步:

(a)验证证书来源的合法性;用CA的公钥解密证书上数字签名

(b)验证证书的内容的合法性:完整性验证

(c)检查证书的有效期限

(d)检查证书是否被吊销

(e)证书中拥有者的名字,与访问的目标主机要一致

(4)客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密,此数据发送给服务器,完成密钥交换

(5)服务用此密钥加密用户请求的资源,响应给客户端

.注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

3https实现

3.1 开启dns

在dns服务器上配置对这台https服务器的解析

3.2 服务器安装mod_ssl

安装语句yum -yinstall mod_ssl;安装该模块后,会修改配置文件,会自动增加LoadModule ssl_module modules/mod_ssl.so在httpd的子配置文件/etc/httpd/conf.d/ssl.conf里,同时也打开了443端口,同时指定了证书的路径

原因是安装的时候,会跑安装脚本,生成私钥文件/etc/pki/tls/private/localhost.key,同时也生成证书文件/etc/pki/tls/certs/localhost.crt,这个证书文件是自签名的,此时https网站已经可以访问,但是由于这个https服务器的证书文件不能使用,有问题,颁发给的机构不对,不是站点名称。所以证书要重新向CA申请。获取CA颁发的证书后才能证书使用https站点。

3.3 服务器生成证书请求文件

在服务器创建证书签署请求,这里是客户端生成证书请求文件,Common Name要和网站的域名一样,可以使用泛域名,如*.ghbsunny.com。其他的相关信息,根据根CA的配置文件/etc/pki/tls/openssl.cnf的policy规定的,默认证书要求countryName,stateOrProvinceName,organizationName要和根CA一致

3.4 服务器向根CA申请证书

http服务器将生成的证书申请文件发给CA

3.5  CA签证

这里要注意要指定证书的有效期,签发完成后,根CA颁发服务器的证书给到服务器,同时把根的证书cacert.pem也一起发给服务器服务器。

3.6配置httpd支持使用ssl和使用的证书

http服务器上ssl.conf配置文件指定服务器证书的路径,服务器私钥路径,同时指定更根CA的证书的路径

配置文件:/etc/httpd/conf.d/ssl.conf,一般只需要修改以下的选项

DocumentRoot

#调整加密主站点的路径,没有调整的话,默认就是http主配置的站点,如果#这里可以调整DocumentRoot和http不一样,那么就会导致http和https的主站点目录不一样。因为这里配置文件配置了虚拟主机,基于443端口,所以出现了一台机器两个主站点,默认http和https是同一主站点

DocumentRoot  "/var/www/html"

ServerName

ServerName www.ghbsunny.com:443

SSLCertificateFile

SSLCertificateFile  /etc/pki/tls/certs/cent63.crt

SSLCertificateKeyFile

SSLCertificateKeyFile  /etc/pki/tls/private/client.192.168.32.63.key

SSLCertificateChainFile

SSLCertificateChainFile   /etc/pki/tls/certs/cacert.pem

日志路径

#以下定义了log的文件,路径是/etc/httpd/logs,和http的log区分开

ErrorLog  logs/ssl_error_log

TransferLog  logs/ssl_access_log

3.7  测试基于https访问相应的主机

a 浏览器导入证书,可以正常使用

bopenssl测试

openssl s_client [-connect host:port] [-cert filename] [-CApathdirectory][-CAfilefilename]

例子

openssl s_client -connect www.ghbsunny.com:443

注意,本地的这台dns要指向能够解析www.ghbsunny.com的dns服务器

c curl测试:

curl  -cacert  cacert.crt  https://www.ghbsunny.com:443

其中,cacert.crt是给http服务器颁发证书的根服务器的证书文件

4 http重定向https

重定向是指将http请求转发至https的URL。这里建议将http和https的主站点设置为同一个站点。因为跳转是会将设置目录下的所有http请求进行跳转,如果https没有http站点的目录,比如http默认主站点是/var/www/html/,但是https下的主站点是/var/www/https,而且没有/var/www/https/web1的站点,当有请求http://www.ghbsunny.com/web1,则跳转会显示网页不存在而导致网页打不开

建议使用HSTS技术进行跳转

基于redirect跳转

Redirect技术跳转的时候,默认客户端发送不加密的请求到服务器端,然后服务器端告诉客户端说,网站已经转到加密站点,然后客户端再发一个加密请求的站点过来,服务器才返回https的结果给客户端,中间经过4步。

.重定向格式如下

Redirect [status] URL-path URL

URL-path指网站上的站点路径

.status状态:有两个值Permanent和Temp

.Permanent:Returnsa permanentredirect status (301) indicating that the resource has moved permanently

.Temp:Returnsa temporary redirectstatus (302). This is the default

基于HSTS跳转

目前主流是采用HSTS(HTTP StrictTransport Security)技术进行跳转

服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程。当客户端第一次发http请求过来,服务器端响应https的结果给客户端,只有两步,这个是相对安全的机制,下次客户端浏览器再次访问的时候,浏览器端自动会将http转换为https,然后以https发请求给服务器

基于HSTS preload list

HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表。这个是在浏览器配置的,是要网站向google申请,谷歌浏览器才会支持

例子

.基于redirect示例:

vim /etc/httpd/conf.d/rediect.conf

Redirect   temp  /var/www/html https://www.magedu.com/

基于HSTS示例:

vim /etc/httpd/conf.d/hsts.conf

Header always setStrict-Transport-Security "max-age=15768000"

#以上这段代码,告诉客户端浏览器下次访问的时候以https来访问

#max-age=15768000在这段时间内访问都自动调整为https来访问

RewriteEngine on

RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1  [redirect=301]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容