一次部署HTTPS的相关事件引发的思考
前言:
上周五快要下班的时候,突然收到通知客户希望了解一下部署HTTPS的流程,这种事情谁听了都会有几分诧异的。因为这件事虽然和工作有一定的相关度,但平时不会走这个方向,实际上也较少接触。此外,客户手下应该不缺人,做运维和开发的肯定比我更懂这个,但情况却和我想的不一样。
正文:
客户有需求,就应该尽量满足!因此,尽管之前对Apache、Tomcat的一些配置不熟,也未有过自己部署HTTPS的经验【当然失败的尝试还是有的】,便趁着周末了解了一下相关的东西,在本地搭建了环境。实践表明,当你对一个东西不熟悉的话,你对难度的预期往往会高过实际很多,当然这里说的是一个你不太了解的东西。从我的角度来说,做完了实验之后,看了相关资料后,总结下来步骤就那么几个【熟练的人可以在不到半小时搞定我花了两天时间所做的工作】,其实真是没什么好说的。但是这里又有点区别,就如有时候写代码,花半小时写出来的代码也许光调试就需要半天或一天。这种情况是有的,当你第一次做的时候,你需要弄清楚步骤和流程,需要让结果达到你的预期。我们会说这样子效率太低了,学习能力太差了,但在一个陌生的环境里独自摸着石头过河能走多快呢?当然,这些其实都不是谈论的重点。
简单说一下CentOS上Apache和Tomcat部署HTTPS的几个要点:
a. 绝大多数SSL的实现使用的是openssl,因此在Apache和Tomcat安装好的情况下要确定openssl已安装;
b. Apache在本地生成三个文件:*.key, *.csr和*.crt,内部用于加密的情况下证书就已经有了,对应命令:
#openssl genrsa –out server.key 1024
#openssl req –new server.key –out server.csr
# openssl x509 -days 3650 -req -in server.csr -signkey server.key -out server.crt
c. 在配置文件/etc/httpd/conf.d/ssl.conf中导入几个整文件:
SSLCertificateFile /etc/pki/tls/mycert/server.crt
SSLCertificateKeyFile /etc/pki/tls/mycert/server.key
进行CA认证的证书则为ca.crt, 代替server.crt
d. 强制将HTTP转换为HTTPS
在/etc/httpd/http.conf末尾或网站根目录下的.htaccess写入如下代码即可指定强制转换的路径:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} somefolder
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]
***亲测在httpd.conf中加入以上代码可行***
e. 虚拟主机的HTTPS配置同样在ssl.conf中
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/mycert/ca.crt
SSLCertificateKeyFile /etc/pki/tls/mycert/ca.key
<Directory /var/www/vhosts/yoursite.com/httpsdocs>
AllowOverride All
</Directory>
DocumentRoot /var/www/vhosts/yoursite.com/httpsdocs
ServerName yoursite.com
</VirtualHost>
f. 重启Apache服务:service httpd restart
g. Tomcat生成证书
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/conf/keystore
只在本地使用的话生成keystore文件即可,如需要生成csr等文件则
keytool -certreq -alias tomcat -file Server.csr -keystore tomcat.keystore
keytool -import -trustcacerts -alias tomcat -file Server.pem -keystore tomcat.keystore
h. 在../tomcat/conf/server.xml中找到注释掉的<connector port="8443"..>, 修改为下图所示即开启SSL

i. 强制转换为HTTPS
在conf/web.xml中添加如下代码即可完成全局强制转换HTTPS
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Uers-only Area<realm-name>
</login-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
j. 虚拟主机的设置在server.xml中,添加对应标签及内容即可

k. 重启Tomcat
如上便是Tomcat和Apache上部署HTTPS的简明步骤,操作上来说除了获取CA证书,其余都在服务器上的配置文件中完成,可以看到操作并不复杂
当然,如果是第一次弄,或者需要根据业务进行调整及配置,那自然就没这么简单了
思考:
将HTTP改为HTTPS自然上信息安全方面的思考,照我之前的理解来看,运维人员显然应该对此比较熟悉,而客户那边做运维的人可是很多的,这又是本文一开始提到的这事谁听了都会有几分诧异的。事实上,情况和我理解的不一样,客户的业务量很大,他们并不像许多公司货企业那样有一班负责网络、服务器等运维的人,他们的员工稍微有点不一样。这些都不是重点,重点是他们将很多项目外包出去给开发商做,就是说自己提出要求,然后等着验收。由于自己并没有接手项目,对一些相关的知识存在理解上的欠缺也就说得过去了,自己的工程师不知道怎么进行相关配置【又诧异了吧】
客户有部署HTTPS的需求,这种事本应该顺手就交给开发商做了,但开发商说这需要对代码进行较大改动,不愿意做这事。于是万能的某乙方工程师出场了,客户出了钱买服务,什么事都会想到找你。基本上就是觉得自己被某乙方忽悠了,然后找另一个乙方来咨询,好家伙,这下子由不懂变得懂了点,可以进行谈判了
以我肤浅的经验来看,这种事情代码层面就不需要做什么更改,弄好证书,改改配置文件就行了。我在这里并不似要吐槽客户或批判谁,只是提出自己的一点思考。
首先:
客户找上来,为其提供的某项服务与平时所做的有一定差距,但并非毫不相干,只要有关系,服务方就逃不了
客户的需求在时间上有一定的紧迫性,因此,为了不让客户着急,就得牺牲自己的休息时间,这一点开网店的同学有时候劳累过度跟这个就有点像
客户觉得他既然出了钱购买你的服务,你就应该尽可能的帮他解决问题,最好是解决所有问题,在他看来,只要能有半毛钱关系就会拉上你【具体因客户而异】
客户在遇到问题时,有很多时候自己不知道该如何处理或者自身并没有这方面的能力,此时不仅是一个服务于被服务的关系,同时也是向你寻求帮助,如果你不帮这个忙,他可能就不知道该找谁了
客户的业务量很大,很多方面如运维都有刚需,但从成本方面或业务的相关性方面等考虑会进行一定的取舍,专注于自己的核心业务,而其他的则交给他们认为的可靠第三方
其次:
最初认为,开发商偷懒或怎样的,作为开发人员处理这种事自然是没问题的,有可能他们认为部署HTTPS或更改服务器配置需要花较多时间,而这些时间都是要计算在自己的成本中的。从他们的角度来讲,这大概算是一项增值的或附加的服务,如果这是麻烦或者我为你多做些什么,但是却没有附加的报酬,那我肯定是不乐意的。这是一种猜想,后来客户说,与开发人员沟通过后发现开发人员对服务器的配置不太了解,这,又是一件让人很诧异的事情了。依旧不针对任何人或任何事,因为不了解这两方之间的业务关系,加上开发人员主要任务是写代码,对他们而言在指定的环境下完成指定的功能便可,所谓术业有专攻也未尝不可能。
最后,本人与上文提到的开发商实质上都是提供服务的乙方,而我们之间共同的客户则是甲方。甲方出钱,希望乙方尽可能多地为他服务,因此在很多事情上会比较多地依赖于乙方,自身没有太多解决问题的能力。另一方面也体现出他可以专注于自己的业务,减少一些对于他来说不是很必要的业务成本。乙方的生成依赖于甲方的业务,需要尽可能满足对方的需求,尤其以信息安全方面的服务更是要在方方面面都有一定的解决问题的能力,有时候专注度无法提升,但综合业务能力会比较强。这里面还有一个引起我思考的问题,就像现在学校里专业划分越来越细一样,社会上的工作岗位也是这样,在乙方可能需要干很多事情,而在甲方如阿里、百度、腾讯等很可能便是一个人负责一整块业务,管好自己的业务就行了。精细化分工,可以让我们专注于自己的领域,在纵向层面走得更远,同时也让接触面变得更小了。因此当问题出现在两项业务的中间范围时,首先该由谁解决这个问题需要商榷,另一方面,这其中必然会有自己不熟悉的东西在里面,而对一般人来说,解决陌生问题的预期付出会比实际更高。未知和陌生本身就有一种不确定性,而人的习惯是喜欢可预测和掌握的,对不确定性的恐惧会带来对目标的高估。这也就可以解释客户那边主要的工作是运维,但这个可能本该属于运维的工作自己却胜任不了,同样的作为开发商也会以难度大为理由推脱由己方部署HTTPS,因为他们平时的工作与这一方面接触较少,而且对于这种事情来说,它只是偶尔发生的,因此也不会在这个上面投入较多经历。
信息、业务、职能等在对接的时候,往往会出现裂缝和偏差,这一方面会产生问题,另一方面也造就了一个解决问题的价值空间,不管其是否合理,但它就在那里。
---以上是本人一点浅薄的想法,如有不对之处敬请指正---
一次部署HTTPS的相关事件引发的思考的更多相关文章
- “reliable message”事件引发的思考
今天无意间看到了“reliable message"事件,平时还真没深入研究过这个事件,于是,就收集资料并稍微研究了一下,以下是官方就该事件给出的说明: When you send a me ...
- 苹果App部署HTTPS进行在线下载安装
苹果App的ipa下载需要有几个前提,可参考:Android和IOS的本地App如何安装(apk&ipa) 本文主要介绍如何部署https提供ipa的下载,步骤如下: 1. 搭建一个HTTPS ...
- 移动端前端常见的触摸相关事件touch、tap、swipe等整理
前端的很多事件在PC端和浏览器端可公用,但有些事件却只在移动端产生,如触摸相关的事件 本文整理了移动端常见的一些事件,包括原生支持的click.touch.tap.swipe事件,也有定义型的gest ...
- Nginx上部署HTTPS
Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev,且ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/, ...
- Nginx上部署HTTPS + HTTP2
Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev(或者OpenSSL),且ln -s /usr/lib/x86_64-linux-gnu/libssl.so ...
- 背水一战 Windows 10 (68) - 控件(控件基类): UIElement - Pointer 相关事件, Tap 相关事件, Key 相关事件, Focus 相关事件
[源码下载] 背水一战 Windows 10 (68) - 控件(控件基类): UIElement - Pointer 相关事件, Tap 相关事件, Key 相关事件, Focus 相关事件 作者: ...
- 云计算之路-阿里云上:在SLB上部署https遇到的问题及解决方法
一.问题场景 这个问题只会出现在云服务器操作系统使用Windows Server 2012的场景,如果使用的是Windows Server 2008 R2则不存在这个问题. 二.https部署场景 1 ...
- springboot+apache前后端分离部署https
目录 1. 引言 2. 了解https.证书.openssl及keytool 2.1 https 2.1.1 什么是https 2.1.2 https解决什么问题 2.2 证书 2.2.1 证书内容 ...
- 明年将制定个人信息保护法 网站部署https迫在眉睫
12月20日,全国人大常委会法工委举行第三次记者会.全国人大常委会法工委发言人岳仲明表示,中国明年将制定个人信息保护法.数据安全法等. 数据泄露为何频频出现 你是否经常接到骚扰电话?推销.诈骗等等均有 ...
随机推荐
- 【Win10应用开发】自适应磁贴中的分组
老周在上一篇文章中介绍过了自适应磁贴的基本结构,以及给大家演示了一些例子. 本文老周给大伙伴们说说自适应磁贴的另一个特点——分组呈现. 当磁贴的内容被分组后,每个组中的内容就会被视为一个整体.比如某磁 ...
- vue实例属性(vm.$els)
不需要表达式 参数: id(必需) 用法: 为 DOM 元素注册一个索引,方便通过所属实例的 $els 访问这个元素. 注意: 因为 HTML 不区分大小写,camelCase 名字比如 v-el:s ...
- Unity事件
unity3d事件函数整理,事件,回调函数,消息处理 Unity3D中所有控制脚本的基类MonoBehaviour有一些虚函数用于绘制中事件的回调,也可以直接理解为事件函数,例如大家都很清楚的Star ...
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】
本系列前面的文章我们主要以编程的角度对ASP.NET Core的依赖注入系统进行了详细的介绍,如果读者朋友们对这些内容具有深刻的理解,我相信你们已经可以正确是使用这些与依赖注入相关的API了.如果你还 ...
- 掌握 cinder-scheduler 调度逻辑 - 每天5分钟玩转 OpenStack(48)
上一节我们详细讨论了 cinder-api 和 cinder-volume,今天讨论另一个重要的 Cinder 组件 cinder-scheduler. 创建 Volume 时,cinder-sche ...
- ViewPager+RadioGroup实现标题栏切换,Fragment切换
1.说明: 在使用RadioGroup做标题栏切换的时候,跟ViewPager的滑动有冲突,最后查看了源码+断点调试解决了一些碰到的问题,写一篇博客总结一下,有同样需求的朋友可以借鉴一下,自己以后有用 ...
- 应用程序框架实战三十三:表现层及ASP.NET MVC介绍(二)
最近的更新速度越来越慢,主要是项目上比较忙,封装EasyUi也要花很多时间.不过大家请放心,本系列不会半途夭折,并且代码干货也会持续更新.本文继续介绍表现层和Asp.net Mvc,我将在本篇讨论一些 ...
- SubSonic3.0插件分页查询速度测试
使用SubSonic3.0一段时间了,一直都想找机会测试一下各种查询分页速度,对比一下插件的查询效率到底怎么样,所以昨天写好了测试程序,准备好1K.1W.10W.50W和100W记录的数据表,早上详细 ...
- 【tomcat】不同域名解析到同一tomcat不同项目上
问题: 1. 有多个域名,想输入的每个域名只能访问其中的一个项目 2. 这些项目都部署在同一个tomcat上的 解决步骤: 1.首先把所有域名都解析到这台服务器上,解析时只能填写ip地址,不 ...
- Java ConcurrentHashMap Example and Iterator--转
原文地址:http://www.journaldev.com/122/java-concurrenthashmap-example-iterator#comment-27448 Today we wi ...