云服务器怎样安装SSL数字证书以支持https协议
1、云服务器,需要淘宝:Gworg 办理SSL证书:网页链接
2、拿到SSL证书后按照以下教程对应服务器环境要求安装:网页链接
3、安装必要的几点:防火墙允许443端口,云服务器有防火墙也需要设置允许,配置时明确WEB目录与域名。
4、部分程序环境安装较为复杂,也可以请求签发机构代理安装。
HTTPS实际是SSL over HTTP, 该协议通过SSL在发送方把原始数据进行加密,在接收方解
密,因此,所传送的数据不容易被网络黑客截获和破解。本文介绍HTTPS的三种实现方法
。
方法一 静态超链接
这是目前网站中使用得较多的方法,也最简单。在要求使用SSL进行传输的Web网页链接
中直接标明使用HTTPS协议,以下是指向需要使用SSL的网页的超链接:
<a href=“https://192168100100/ok/securePagejsp”>SSL例子</a>
需要说明的是,在网页里的超链接如果使用相对路径的话,其默认启用协议与引用该超
链接的网页或资源的传输协议相同,例如在某超链接“https://192168100100/ok/l
oginjps”的网页中包含如下两个超链接:
<a href=“/bessl/examjsp”>SSL链接</a>
<a href=“http://192168100100/notssl/indexjsp”>非SSL链接
那么,第一个链接使用与“https://192168100100/ok/loginjsp”相同的传输协议
HTTPS,第二个链接使用本身所标识的协议HTTP。
使用静态超链接的好处是容易实现,不需要额外开发。然而,它却不容易维护管理; 因
为在一个完全使用HTTP协议访问的Web应用里,每个资源都存放在该应用特定根目录下的
各个子目录里,资源的链接路径都使用相对路径,这样做是为了方便应用的迁移并且易
于管理。但假如该应用的某些资源要用到HTTPS协议,引用的链接就必须使用完整的路径
,所以当应用迁移或需要更改URL中所涉及的任何部分如:域名、目录、文件名等,维护
者都需要对每个超链接修改,工作量之大可想而知。再者,如果客户在浏览器地址栏里
手工输入HTTPS协议的资源,那么所有敏感机密数据在传输中就得不到保护,很容易被黑
客截获和篡改!
方法二 资源访问限制
为了保护Web应用中的敏感数据,防止资源的非法访问和保证传输的安全性,Java Serv
let 22规范定义了安全约束(Security-Constraint)元件,它用于指定一个或多个We
b资源集的安全约束条件;用户数据约束(User-Data-Constraint)元件是安全约束元件
的子类,它用于指定在客户端和容器之间传输的数据是如何被保护的。用户数据约束元
件还包括了传输保证(Transport-Guarantee)元件,它规定了客户机和服务器之间的通
信必须是以下三种模式之一:None、Integral、Confidential。None表示被指定的Web资
源不需要任何传输保证;Integral表示客户机与服务器之间传送的数据在传送过程中不
会被篡改; Confidential表示数据在传送过程中被加密。大多数情况下,Integral或Co
nfidential是使用SSL实现。
这里以BEA的WebLogic Server 61为例介绍其实现方法,WebLogic是一个性能卓越的J2
EE服务器,它可以对所管理的Web资源,包括EJB、JSP、Servlet应用程序设置访问控制
条款。假设某个应用建立在Weblogic Server里的/mywebAPP目录下,其中一部分Servle
ts、JSPs要求使用SSL传输,那么可将它们都放在/mywebAPP/sslsource/目录里,然后编
辑/secureAPP/Web-INF/webxml文件,通过对webxml的设置可达到对Web用户实现访问
控制。
当Web用户试图通过HTTP访问/sslsource目录下的资源时,Weblogic Server就会查找we
bxml里的访问约束定义,返回提示信息:Need SSL connection to access this reso
urce。资源访问限制与静态超链接结合使用,不仅继承了静态超链接方法的简单易用性
,而且有效保护了敏感资源数据。然而,这样就会存在一个问题: 假如Web客户使用HT
TP协议访问需要使用SSL的网络资源时看到弹出的提示信息: Need SSL connection to
access this resource,大部分人可能都不知道应该用HTTPS去访问该网页,造成的后果
是用户会放弃访问该网页,这是Web应用服务提供商不愿意看到的事情。
方法三 链接重定向
综观目前商业网站资源数据的交互访问,要求严格加密传输的数据只占其中一小部分,
也就是说在一个具体Web应用中需要使用SSL的服务程序只占整体的一小部分。那么,我
们可以从应用开发方面考虑解决方法,对需要使用HTTPS协议的那部分JSPs、Servlets或
EJBs进行处理,使程序本身在接收到访问请求时首先判断该请求使用的协议是否符合本
程序的要求,即来访请求是否使用HTTPS协议,如果不是就将其访问协议重定向为HTTPS
,这样就避免了客户使用HTTP协议访问要求使用HTTPS协议的Web资源时,看到错误提示
信息无所适从的情况,这些处理对Web客户来说是透明的。
实现思想是:首先创建一个类,该类方法可以实现自动引导Web客户的访问请求使用HTT
PS协议,每个要求使用SSL进行传输的Servlets或JSPs在程序开始时调用它进行协议重定
向,最后才进行数据应用处理。
J2EE提供了两种链接重定向机制。第一种机制是RequestDispatcher接口里的forward()
方法。使用MVC(Model-View-Controller)机制的Web应用通常都使用这个方法从Servlet
转移请求到JSP。但这种转向只能是同种协议间的转向,并不能重定向到不同的协议。第
二种机制是使用HTTPServletReponse接口里的sendRedirect()方法,它能使用任何协议
重定向到任何URL,例如:
BeSslResponsesendRedirect(“https://192168100100/order”);
此外,我们还需使用到Java Servlet API中的两个方法:ServletRequest接口中的getS
cheme(),它用于获取访问请求使用的传输协议;HTTPUtils类中的getRequestUrl(),它
用于获取访问请求的URL,要注意的是该方法在Servlet 23中已被移到HTTPServletReq
uest接口。
以下是实现协议重定向的基本步骤:
1 获取访问的请求所使用的协议;
2 如果请求协议符合被访问的Servlet所要求的协议,就说明已经使用HTTPS协议了,不
需做任何处理;
3 如果不符合,使用Servlet所要求的协议(HTTPS)重定向到相同的URL。
例如,某Web用户使用HTTP协议访问要求使用HTTPS协议的资源BeSslServlet,敲入“UR
L:http://192168100100/BeSslServlet”,在执行BeSslServlet时首先使用Proces
sSslServlet.processSsl()重定向到https://192168100100/BeSslServlet,然后
BeSslServlet与客户浏览器之间就通过HTTPS协议进行数据传输。
以上介绍的仅是最简单的例子,是为了对这种重定向的方法有个初步的认识。假如想真
正在Web应用中实现,还必须考虑如下几个问题:
● 在Web应用中常常会用到GET或Post方法,访问请求的URL中就会带上一些查询字串,
这些字串是使用getRequesUrl()时获取不到的,而且在重定向之后会丢失,所以必须在
重定向之前将它们加入到新的URL里。我们可以使用requestgetQueryString()来获取G
ET的查询字串,对于Post的Request参数,可以把它们转换成查询串再进行处理。
● 某些Web应用请求中会使用对象作为其属性,必须在重定向之前将这些属性保存在该
Session中,以便重定向后使用。
● 大多数浏览器会把对同一个主机的不同端口的访问当作对不同的主机进行访问,分用
不同的Session,为了使重定向后保留使用原来的Session,必须对应用服务器的Cookie
域名进行相应的设置。
以上问题均可在程序设计中解决。
通过程序自身实现协议重定向,就可以把要求严格保护的那部分资源与其他普通数据从
逻辑上分开处理,使得要求使用SSL的资源和不需要使用SSL的资源各取所需,避免浪费
网站的系统资源。
网站从http升级到https,需要到CA机构申请SSL证书,将SSL证书部署到服务器端,就可以实现https网站。
拓展回答:
Https和Http的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费。http是超文本传输协议,信息是明文传输。
https 则是具有安全性的ssl加密传输协议。http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
https及https的本地测试环境搭建。aspnet结合https的代码实现http网站转换成https网站,以及之后遇到的问题等。
一:什么是https
SSL(Security Socket Layer)全称是加密套接字协议层,它位于HTTP协议层和TCP协议层之间,用于建立用户与服务器之间的加密通信,确保所传递信息的安全性,同时SSL安全机制是依靠数字证书来实现的。
SSL基于公用密钥和私人密钥,用户使用公用密钥来加密数据,但解密数据必须使用相应的私人密钥。使用SSL安全机制的通信过程如下:用户与IIS
服务器建立连接后,服务器会把数字证书与公用密钥发送给用户,用户端生成会话密钥,并用公共密钥对会话密钥进行加密,然后传递给服务器,服务器端用私人密
钥进行解密,这样,用户端和服务器端就建立了一条安全通道,只有SSL允许的用户才能与IIS服务器进行通信。
提示:SSL网站不同于一般的Web站点,它使用的是“HTTPS”协议,而不是普通的“HTTP”协议。因此它的URL(统一资源定位器)格式为“https://网站域名”。
二:https的本地测试环境搭建
1:win7/windows server 2008R2中 IIS7/IIS75 搭配https本地测试环境
2:windows server 2003中IIS60 搭配https本地测试环境
三:aspnet 结合 https的代码实现
https是由IIS,浏览器来实现的传输层加密,不需要特意的编码。。。平时怎么在aspnet里面编写代码,就怎么写。
很可能要问,为什么我的站点使用了https之后,用firebug之类的软件查看值提交的时候,还是会显示明文呢?例如,博客园的登陆界面提交。
http://passportcnblogscom/loginaspx
为什么这里还是能看到明文的用户名和密码呢?
原因是因为:https(ssl)的加密是发生在应用层与传输层之间,所以,在传输层看到的数据才是经过加密的,而我们捕捉到的http post的,是应用层的,是还没经过加密的数据。
加密的数据只有客户端和服务器端才能得到明文 客户端到服务端的通信是安全的
支付宝也是https的,但是他的同时也增加了安全控件来保护密码, 以前认为这个只是用来防键盘监听的,其实,看下面http post截获的密码:这个安全控件把给request的密码也先加了密,紧接着https再加次密,果然是和钱打交道的,安全级别高多了:)
四:http网站转换成https网站之后遇到的问题
整站https还是个别的页面采用https?网站的连接是使用相对路径?还是绝对路径?
如果是整站都是https,那么会显得网页有些慢,如果是个别页面采用https,那么如何保证从https转换到http的时候的url的准确性呢?
比如我们用http的时候,网站的头部底部都是用的相对路径,假如你的页面是 http://aa/indexaspx 你跳转到 https://aa/loginaspx 这里怎么来跳转?只能把超链接写死
登陆 但是这样的话,你跳转过去之后的页面 ,所有的相对路径都变成了https开头了,这样很影响网站的效率。
虽然使用绝对地址可以解决,但是那样显然不好移植。
下面就是使用第三方的组件,来解决上面的这个问题
步骤
先下载dll文件 http://codegooglecom/p/securityswitch/downloads/list 我选择的是 SecuritySwitch v4200 - Binaryzip这个版本
1: 我们来看看测试项目
admin 文件夹,需要登录之后,才能访问。admin里面的 loginaspx 可以访问。整个admin文件夹都需要https访问:
contactaspx 需要https 访问:
defaultaspx 和 viewaspx 采用 http 访问:
链接我们都采用相对路径,并没有写死成 http://wwwxxcom/aaspx 或者是 https://wwwxxcom/aaspx。
下面我们开始用SecuritySwith来实现上面的https和http访问的规则。
2:在项目上,添加引用 SecuritySwitchdll ,并且添加智能提示。
这样,只能提示就有了。
3:然后我们在webconfig里面添加设置 。根据IIS的不同,还分为 IIS6+ IIS7X(经典模式) 以及 IIS7(集成模式) 的不同的配置,这里我们是按照IIS6+IIS7X的(经典模式)来配置的。
只看看里面的 SSL配置即可:
<xml version="10">
<configuration>
<!--SSL配置1开始-->
<configSections>
<section name="securitySwitch" type="SecuritySwitchConfigurationSettings, SecuritySwitch" />
</configSections>
<securitySwitch baseInsecureUri="http://webjoeyssl"
baseSecureUri="https://webjoeyssl" xmlns="http://SecuritySwitch-v4xsd"
mode="On">
<!--如果你的http和https仅仅只有一个s的区别,那么这里的base的2个url可以不写,那为什么还要搞这2个url呢?因为比如
你的 baseInsecureUri (基本不安全网址) 是 http://wwwqqcom
而你的 baseSecureUri (基本安全网址) 是 https://safeqqcom
然后这个时候你访问一个需要https的页面,假如是 loginaspxreturn=joey
假如你是通过http://wwwqqcom/loginaspxreturn=joey访问的,那么这个
页面会跳转到http://safeqqcom/loginaspxreturn=joey
-->
<paths>
<add path="~/contactaspx"/>
<add path="~/admin/loginaspx"/>
<add path="~/admin" />
<!--这里的admin因为不仅是 admin 文件夹,而且还包含类似的 adminNewsaspx adminQQaspx 页面"-->
<!--但是如果是 ~/admin/ 就是专门指admin文件夹-->
</paths>
</securitySwitch>
<!--SSL配置1结束—>
<appSettings />
<systemweb>
<compilation debug="true">
</compilation>
<!-- 内置票据认证 start-->
<authentication mode="Forms">
<forms name="mycook" loginUrl="admin/loginaspx" protection="All" path="/" />
</authentication>
<!--SSL配置2 如果是 IIS <= 6x, IIS 7x + 经典模式-->
<httpModules>
<add name="SecuritySwitch" type="SecuritySwitchSecuritySwitchModule, SecuritySwitch" />
</httpModules>
<!--SSL配置2结束-->
</systemweb>
<!--SSL配置2 如果是IIS7X + 集成模式-->
<!--<systemwebServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
--><!-- for IIS 7x + 集成模式 --><!--
<add name="SecuritySwitch" type="SecuritySwitchSecuritySwitchModule, SecuritySwitch" />
</modules>
</systemwebServer>-->
<!--如果是IIS7X+集成模式 SSL配置2 结束—>
</configuration>
4: 由于用到了内置票据认证,所以要在 Globalasax添加以下代码:
protected void Application_AuthenticateRequest(object SENDER, EventArgs e)
{
if (HttpContextCurrentUser != null)
{
if (HttpContextCurrentUserIdentityIsAuthenticated)
{
if (HttpContextCurrentUserIdentity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContextCurrentUserIdentity;
FormsAuthenticationTicket tiecket = idTicket;
string userData = tiecketUserData;
string[] roles = userDataSplit(',');
HttpContextCurrentUser = new SystemSecurityPrincipalGenericPrincipal(id, roles);
}
}
}
}
5: 后台登陆界面 admin/loginaspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="loginaspxcs" Inherits="webadminlogin" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 10 Transitional//EN" "http://wwww3org/TR/xhtml1/DTD/xhtml1-transitionaldtd">
<html xmlns="http://wwww3org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
用户名:<asp:TextBox ID="txtUser" runat="server"></asp:TextBox><br />
密码:<asp:TextBox ID="txtPass" runat="server"></asp:TextBox><br />
记住用户名:<asp:CheckBox ID="chkUsername" runat="server" Checked="true"/>
<br />
<asp:Literal ID="litResult" runat="server"></asp:Literal>
<br />
<asp:Button ID="btnSubmit" runat="server" Text="提交" onclick="btnSubmit_Click" />
</form>
</body>
</html>
后台登陆界面 cs admin/loginaspxcs:
using System;
using SystemCollectionsGeneric;
using SystemWeb;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemWebSecurity;
namespace webadmin
{
public partial class login : SystemWebUIPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
string username = txtUserText;
string pass = txtPassText;
bool ischeck=chkUsernameChecked;
if (username=="admin" && pass=="admin")
{
SaveLogin(username, ischeck);
}
}
private void SaveLogin(string username, bool ischeck)
{
HttpCookie cook;
string strReturnURL;
string roles = "admin";//将用户的usernameid,保存到cookies,身份是 admin 身份
//要引用 using SystemWebSecurity;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1, username, DateTimeNow, DateTimeNowAddMinutes(30), ischeck, roles);
cook = new HttpCookie("mycook");//对应webconfig里面的 验证里面的 forms name="mycook"
cookValue = FormsAuthenticationEncrypt(ticket);
ResponseCookiesAdd(cook);
strReturnURL = RequestParams["ReturnUrl"];
if (strReturnURL != null)
{
ResponseRedirect(strReturnURL);
}
else
{
ResponseRedirect("defaultaspx");
}
}
}
}
您好!
实现HTTPS很简单,主要注册SSL证书安装到服务器,当然最好是独立服务器(云服务器)才可以实现安装证书。
一、确定需要域名(网址),登陆淘宝:Gworg 注册SSL证书。
二、按照客服的要求完成域名验证,通常是DNS解析认证,比较简单。
三、获得SSL证书,将SSL证书安装到服务器,就可以实现HTTPS了。
如何设置http自动跳转到httpsapache环境下,配置好https后,需要设置url重定向规则,使网站页面的http访问都自动转到https访问。
1、先打开url重定向支持
1)打开Apache/conf/httpdconf,找到 #LoadModule rewrite_module modules/mod_rewriteso 去掉#号。
2)找到你网站目录的段,比如我的网站目录是c:/www,找到
www”>
…
修改其中的 AllowOverride None 为 AllowOverride All3)重启apache服务2、设置重定向规则
1)在你网站目录下放一个htaccess文件。windows环境下,不能把文件直接改名为htaccess,会提示你必须输入文件名。所以我们先新建一个“新建文本文档txt”文档,记事本打开,选择另存为,保存类型选择“所有文件()”,文件名输入“htaccess”,保存。这样便生成了一个htaccess文件。
2)编辑器打开htaccess文件,写入如下规则:
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} !^/tzphp
RewriteRule () https://%{SERVER_NAME}/$1 [R]
解释:
%{SERVER_PORT} —— 访问端口
%{REQUEST_URI} —— 比如如果url是 http://localhost/tzphp,则是指 /tzphp
%{SERVER_NAME} —— 比如如果url是 http://localhost/tzphp,则是指 localhost
以上规则的意思是,如果访问的url的端口不是443,且访问页面不是tzphp,则应用RewriteRule这条规则。这样便实现了:访问了
http://localhost/indexphp 或者 http://localhost/admin/indexphp
等页面的时候会自动跳转到 https://localhost/indexphp 或者
https://localhost/admin/indexphp,但是访问 http://localhost/tzphp
的时候就不会做任何跳转,也就是说 http://localhost/tzphp 和 https://localhost/tzphp
两个地址都可以访问。
0条评论