如何搭建一个HTTPS服务端

关于 HTTPS 的基本原理大家都已经不再陌生,今天和大家说说如何搭建一个支持 HTTPS 的服务端。

服务端的 HTTPS

HTTPS 已经几乎成为了当前互联网推荐的通信方式,它能最大化保证信息传输的安全,从去年苹果的强制 HTTPS ,到如今各大网站都支持了 HTTPS。它会越来越普及。

之前写过几篇关于 HTTPS 原理的文章,有用户留言希望了解一些如何在服务端搭建 HTTPS 服务的内容,这次就和大家聊聊这个话题。

SSL 证书

搭建一个 HTTPS 站点,第一步要做的就是申请 SSL 证书, 而且要在标准的证书颁发机构来申请。 当然,从技术上来说,你可以使用自签名证书,但自签名证书会被所有的浏览器视为不安全的证书,并且会给用户报错,就像这样:

所以,还是需要申请一个正规的证书的。 可申请证书的颁发机构有很多,比如 GoDaddy,Comodo,Verisign 等等。价格从一年几美金到几十美金不等。

我们就以 GoDaddy 为例,带大家了解一下流程。 在 GoDaddy 的首页有一个 Web Security 标签,点击这个标签后可以找到 SSL Certificates 选项:

点击进去, 就可以看到可选的几个证书形式,有单域名的,还有允许多个二级域名的等:

避免广告嫌疑,下面的价格信息略去了~,这里只给大家介绍流程,帮助大家了解。 证书服务商大家可以自行选择。

接下来,证书颁发机构会让你填写一个叫做 CSR 的东西, 如果大家搞 iOS 开发对这个应该不陌生,申请苹果开发者证书的时候大家也做过类似的事情。

CSR 全称 Certificate Signing request。 顾名思义就是用于申请证书必须的一些信息,在 Lunix 系统中,它可以通过命令生成(大多数的服务端应该都是基于 Linux 的,所以我们用它来作为例子):


  1. $ openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr 

openssl 命令,如果你的系统没有安装的话,可以通过包管理先安装。 需要把这里面的 yourdomain.key 和 yourdomain.csr 替换成你自己的名称,可以是域名,也可以是其他标识。

生成成功后,可以用 cat 命令输出 yourdomain.csr 中的内容:


  1. $ cat yourdomain.csr 

会在命令行输出 CSR 的内容,把这段内容复制到前面截图中的文本框中,然后点击生成就好了。

注意,这里的 yourdomain.key 文件你要保管好。 这是你证书的私钥,后面配置 HTTPS 的时候需要用到它。 并且它不能重新生成,而且不能泄露出去。原因可以参考我前面关于 HTTPS 原理的相关文章。

与此同时,证书颁发机构在你提交 CSR 之后,会给你生成证书文件, Godaddy 会生成两个证书,一个是你站点的证书,一个是根证书。 把它们下载到你的服务器上面。

Apache 服务端配置

证书准备好之后,我们要对服务端程序进行配置,让它支持 HTTPS。这里我给大家以 CentOS 7 操作系统, Apache 2.x 服务端程序为例。

Apache 的 HTTPS 配置文件一般在 /etc/httpd/conf.d/ssl.conf 这个位置。 用 vim 编辑器打开它, 然后加入这样一个节点:


  1. <VirtualHost *:443> 
  2.      SSLEngine On 
  3.      SSLCertificateFile /root/yoursite.crt 
  4.      SSLCertificateKeyFile /root/yoursite.key 
  5.      SSLCACertificateFile /root/rootcert.crt 
  6.  
  7.      ServerAdmin admin@yoursite.com 
  8.      ServerName yoursite.com 
  9.      DocumentRoot /var/www/html/ 
  10. </VirtualHost> 

这里用到了我们前面准备的证书和秘钥。 SSLCertificateFile 是你站点的证书, SSLCACertificateFile 是根证书, SSLCertificateKeyFile 是只保存在你服务器的私钥。

有了这些信息后,Apache 就可以正确的处理 HTTPS 请求了。 在这之前我们还需要在做最后一步操作, 编辑 /etc/httpd/conf/httpd.conf 文件, 这个是 Apache 的主配置文件, 加入这样一行:


  1. Listen 443 

这个是让你的服务端同时监听 443 端口。 因为 HTTPS 的默认端口是 443, 所以这个设置是必须要有的。

一切都就绪后,重启你的服务器:


  1. systemctl restart httpd 

然后再用浏览器输入 https://yoursite.com 访问你的站点时,就应该可以看到 HTTPS 验证成功的小锁头了。

防火墙设置

如果配置都就绪,你重启了之后,依然不能正常访问,有可能是你的防火墙把 443 端口拦截了,把它打开:


  1. iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT 
  2. iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT 

结束

目前成熟的 Web 服务程序都有对 HTTPS 很好的支持,只需要经过简单的配置,即可完成 HTTPS 服务器的搭建。 而 HTTPS
之所以相对性能消耗更大,是因为每次数据传输都需要进行加密和解密的操作。 作为 APP
开发者们,可能对服务端的技术了解的并没有那么深,可以把它作为一个备忘录,日后用到的时候再来看看。

作者:佚名

来源:51CTO

时间: 2025-01-01 14:30:53

如何搭建一个HTTPS服务端的相关文章

利用OpenStreetMap(OSM)数据搭建一个地图服务

图 利用OSM数据简单发布的北京地图服务   一.OSM是什么        开放街道图(OpenStreetMap,简称OSM)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图(wiki:http://wiki.openstreetmap.org/wiki/Main_Page).尤其值得称道的是,osm数据开源,可以自由下载使用. 二.OSM数据结构        OpenStreetMap包括空间数据以及属性数据.其中空间数据主要包括三种:点(Nodes).路(Way

为苹果ATS和微信小程序搭建 Nginx + HTTPS 服务

昨天测试开发微信小程序,才发现微信也要求用HTTPS加密数据,想来是由于之前苹果的ATS审核政策的缘故吧,微信想在苹果上开放小程序必然也只能要求开发者必须使用HTTPS了,于是在服务器上测试安装Nginx+HTTPS服务. 安装 HTTPS 最麻烦的问题应该就是获取证书了,证书感觉种类也挺复杂的,有好几种,单域.泛域.多域...还有个种标准乱七八糟的感觉,而且收费很高,还是每年买的. 现在各个云服务商也都有提供各种基础功能的免费证书,但似乎很多只对单域免费,这里的单域是指每个二级域名都算是一个域

CIZE:像 Gulp 一样搭建一个 CI 服务

CIZE 是什么? CIZE 是一个「持续集成」工具,希望能让开发人员更快捷的搭建一个完整.可靠.便捷的 CI 服务. 甚至可以像 Gulp 或 Grunt 一样,仅仅通过一个 cizefile.js 即可完成几乎所有的工作. 快速搭建 全局安装 $ [sudo] npm install cize -g 编写 Job 新建 cizefile.js $ mkdir your_path $ cd your_path $ vim cizefile.js 输入如下内容 //定义「项目」 const de

html页面访问本地搭建的Server,服务端解析前几行出现好几个Null

问题描述 问题:写了一个简单的HTML页面,表单提交数据到服务端,服务端用Javasocket实现对12345端口的监听,服务端解析后控制台显示好几行null,而且在访问服务段的时候有很长的延时浏览器页面才有反应.求路过的高手解疑.HTML页面代码:<html><head><title>Html学习</title></head><body><fieldset><legend>注册区域</legend>

搭建oauth2.0服务端

问题描述 各位大侠:请教一个问题,第一次研究oauth2.0,想自己搭建一套oauth2.0服务器,从官网下载了DotNetOpenAuth.OAuth2的源代码,还是感觉无从下手,不知道哪位大侠有这方面的经验,请指教!..最好给出ASP.NET的搭建步骤,万分感谢! 解决方案 解决方案二:你研究咋样了,我也开始研究了,无从下手,想来个demo看看都下载不到解决方案三:同感,有思路拉吗?解决方案四:在tomcat下面能搭建Oauth2.0服务器?

设备端用一个tcp socket调用服务端的web service,这个流程应该怎样的?

问题描述 如题... 解决方案 解决方案二:你在相关决策中处于什么身份?遇到了什么问题?是有人要拖延时间,还是有人特别热爱重新发明火车轮子,还是有人特别有闲钱但是热爱编程?这基本上相当于你让一个程序园员开发一个网站,你提出说希望网站不要在1000用户并发访问时显得太慢,然后你的程序员回答你说"好的,我们先要花2个月时间(实际上可能要1年)自己重写一个window文件系统,这样就能自己'保证'性能了(以后还要提出什么学术性的想法,以后再说)".如果不是编程环境异常恶劣,那么这想法在开发中

多个socket服务端,一个socket客户端在调用其中一个不通时,如何有选择的调用其它几个

问题描述 socket服务端:server1,server2,server3,server4socket客户端:client1,client2,client3,client41.client1先调server1不通,进而试着调用server2,server2不通就调server3,server3不通就调用server42.client2先调server2不通,进而试着调用server1,server1不通就调server3,server3不通就调用server43.client3先调server

webservice-ttuscany搭建的webService 服务端接收复杂参数

问题描述 ttuscany搭建的webService 服务端接收复杂参数 用tuscany 搭建的webService 服务端怎么接收一个复杂类型,比如jabaBean,对象数组之类的参数

改进同步等待的网络服务端应用

思路:ThreadPool的静态方法RegisterWaitForSingleObject是专门解决这个问题的,它可以等待一个 等待句柄,在这个等待句柄收到信号后执行一个回调方法,从而解决了利用一个单独的线程去等待信号的 问题,减少了空闲的线程.为了演示这个场景,我们用HttpListener类来创建一个网络服务端,收到客户 端的请求后要异步调用一个方法去处理请求,在这个请求处理完或者超时之前,不会给客户端返回 Response的,客户端的请求一直在这儿等着 .ThreadPool.Regist