如何搭建VPN来开服务器
这是一个简短的教程,目的是为了快速搭建一个可用的***,本文并不涉及有关***的正常使用内容。本简短教程基于以下硬件条件:
一台安装了Debian GNU/Linux 50的VPS。
当然理论上所有可以安装pptpd包的nix系统都可以作为主机,教程中安装方式是基于Debian的apt-get命令,其他发行版请自行对照使用。
这台VPS的物理位置是Fremont, CA。
物理位置作为***这个应用本身并不重要,在这里提出只是多此一举。
安装服务器端软件
# apt-get install pptpd
Debian的包管理是所有发行版里最好的,所以这条命令打完就安装完毕了我们的pptp服务器端程序。
配置IP地址范围
编辑/etc/pptpdconf,在最后添加如下地址:
localip 19216801remoteip 1921680234-238,1921680245
这两句设置了当外部计算机通过pptp联接到***后所能拿到的ip地址范围和服务器的ip地址设置。
增加一个用户
编辑/etc/ppp/chap-secrets,在下面增加类似的条目:
username pptpd password
上面内容很好理解,最后那个星号是说允许从任何IP地址联接,如果你想单独设定IP地址也可以。
重启pptpd服务
# /etc/initd/pptpd restar
理论上到这里一个***就已经搭建完毕了。无论你用的是Windows还是OSX,或者是iPhone OS,都可以通过建立一个pptp链接来联入这个***。不过你并不能通过这个来上Internet,因为所有的数据都作用于那台pptpd的服务器上,而不会传入拨入的计算机设备上。要上Internet还需要这么干:
dns解析支持
编辑:/etc/ppp/options,在里面找一下“ms-dns”项目:
ms-dns 20867222222 ms-dns 20867220220
我填写的是OpenDNS的地址,当然你也可以填写电信的DNS。
允许转发
编辑/etc/sysctlconf,看一下netipv4ip_forward参数是不是1。
netipv4ip_forward=1
最后的最后,运行一下这条命令来打开iptables的转发支持:
/sbin/iptables -t nat -A POSTROUTING -s 19216800/24 -o eth0 -j MASQUERADE
注意:来自@LEMONed的消息,只有Xen的VPS可以搭建pptp,OpenVZ的不行。
引用来自@LEMONed的话:
因为openvz下只有venet0,没有eth0,而绝大多数的vps都是openvz的,然后绝大多数的openvz vps都没有masqurade,只能搭建open***并且要自签证书什么的,根本不能用pptpd。我为了给iphone搭个***曾经把这个研究透彻了
用户想要与MySQL服务器建立一条安全连接时,常常依赖***隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSL wrapper)。这每一种方法各有其优缺点。比如说,在出现多条短时间MySQL连接的高度动态环境下,***或SSH隧道也许是比SSL更好的选择,因为后者建立每条连接时需要成本高昂的SSL握手计算。另一方面,如果是长时间运行的MySQL连接比较少的那些应用,基于SSL的加密可能很合理。由于MySQL服务器已经内置了SSL支持功能,你不需要实施***或SSH隧道之类单独的安全层,这种隧道有其自己的维护开销。
在MySQL服务器中实施SSL可以加密在服务器与客户机之间来回传输的所有数据,因而防止广域网或数据中心里面可能出现的窃听或数据嗅探行为。此外,SSL还通过SSL证书提供了身份验证机制,因而可以保护用户,远离可能出现的网络钓鱼攻击。
我们在本文中将介绍如何启用MySQL服务器上的SSL。请注意:同样过程适用于MariaDB服务器。
创建Server SSL证书和私钥
我们必须为MySQL服务器创建SSL证书和私钥,通过SSL连接到服务器时要用到它们。
首先,创建一个临时的工作目录,我们将把私钥和证书文件放在该目录下。
$ sudo mkdir ~/cert $ cd ~/cert
确保OpenSSL已安装在运行MySQL服务器的系统上。通常,所有Linux发行版在默认情况下都安装了OpenSSL。想检查一下OpenSSL有没有安装,不妨使用下面这个命令。
$ openssl version OpenSSL 101f 6 Jan 2014
现在,继续创建CA私钥和证书。下面这些命令将创建ca-keypem和ca-certpem。
$ openssl genrsa 2048 > ca-keypem $ openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-keypem > ca-certpem
第二个命令会询问你几个问题。你在这些字段里填入什么并不重要。只管填好那些字段。
下一步是为服务器创建私钥。
$ openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-keypem > server-reqpem
这个命令会再次询问几个问题,你可以填写上一步中提供的相同答案。
下一步,使用下面这个命令,将服务器的私钥导出成RSA类型的密钥。
$ openssl rsa -in server-keypem -out server-keypem
最后,使用CA证书,创建服务器证书。
$ openssl x509 -sha1 -req -in server-reqpem -days 730 -CA ca-certpem -CAkey ca-keypem -set_serial 01 > server-certpem
配置MySQL服务器上的SSL
完成上述过程后,我们应该有了CA证书、服务器的私钥及其证书。下一步就是配置MySQL服务器,以便使用私钥和证书。
在配置MySQL服务器之前,检查一下SSL选项已被启用还是被禁用。为此,登录进入到MySQL服务器,输入下面这个查询。
mysql> SHOW GLOBAL VARIABLES LIKE 'have_%ssl';,
该查询的结果会如同下图。
请注意:“have_openssl”和“have_ssl”变量的默认值是“被禁用”,如下所示。想启用MySQL服务器中的SSL,继续执行下列步骤。
1 将ca-certpem、server-certpem和server-keypem拷贝或移动到/etc目录下。
$ sudo mkdir /etc/mysql-ssl $ sudo cp ca-certpem server-certpem server-keypem /etc/mysql-ssl
2 使用文本编辑工具,打开服务器的mycnf配置文件。添加或去掉注释[mysqld]部分中类似下面内容的几行。这些应该指向你放在/etc/mysql-ssl中的私钥和证书。
[mysqld] ssl-ca=/etc/mysql-ssl/ca-certpem ssl-cert=/etc/mysql-ssl/server-certpem ssl-key=/etc/mysql-ssl/server-keypem
3 在mycnf中,还要找到“bind-address = 127001”,并将它改成:
bind-address =
那样一来,你就可以从另一个主机连接到MySQL服务器了。
4 重启MySQL服务。
$ sudo service mysql restart 或 $ sudo systemctl restart mysql 或 $ sudo /etc/initd/mysql restart
你只要查看MySQL错误日志文件(比如/var/log/mysql/mysqllog),就可以检查SSL配置有没有问题。要是错误日志中没有警告或错误(就像下面的屏幕截图),这表明SSL配置没有问题。
验证SSL配置的另一个办法就是,在MySQL服务器里面再次运行“have_%ssl”查询。
mysql> SHOW GLOBAL VARIABLES LIKE 'have_%ssl';
创建拥有SSL权限的用户
服务器端的SSL配置完成后,下一步就是创建有权通过SSL访问MySQL服务器的用户。为此,登录进入到MySQL服务器,输入下面内容:
mysql> GRANT ALL PRIVILEGES ON TO ‘ssluser’@’%’ IDENTIFIED BY ‘dingdong’ REQUIRE SSL; mysql> FLUSH PRIVILEGES;
把“ssluser”(用户名)和“dingdong”(密码)换成你自己的用户名和密码。
如果你想分配一个特定的IP地址(比如19216828),以便用户从该地址来访问服务器,那就改而使用下列查询。
mysql> GRANT ALL PRIVILEGES ON TO ‘ssluser’@’19216828’ IDENTIFIED BY 'dingdong' REQUIRE SSL; mysql> FLUSH PRIVILEGES;
配置MySQL客户机上的SSL
鉴于MySQL服务器端配置已完成,不妨将目光转移到客户机端。就MySQL客户机而言,我们就需要基于服务器的CA私钥和证书,创建新的私钥和证书。
在服务器的CA私钥和证书驻留于其中的MySQL服务器主机上运行下列命令。
$ openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-keypem > client-reqpem
类似服务器端配置,上述命令会询问几个问题。只管填好字段,就像前面所做的那样。
我们还需要将创建的客户机私钥转换成RSA类型,如下所示。
$ openssl rsa -in client-keypem -out client-keypem,
最后,我们需要使用服务器的CA私钥和证书,创建客户机证书。
$ openssl x509 -sha1 -req -in client-reqpem -days 730 -CA ca-certpem -CAkey ca-keypem -set_serial 01 > client-certpem
现在,将ca-certpem、client-certpem和client-keypem文件转移到你想要运行MySQL客户机的任何主机上。
在客户机主机上,使用下面这个命令,通过SSL连接到MySQL服务器。
$ mysql --ssl-ca=ca-certpem --ssl-cert=client-certpem --ssl-key=client-keypem -h -u ssluser -p
在输入ssluser的密码后,你会看到如往常那样的MySQL提示符。
想检查一下你有没有使用SSL,在提示符处输入状态命令。
mysql> status;
如果你已通过SSL连接上去,它会在SSL字段显示密码信息,如下所示。
by fleshwound (http://wwwsmatrixorg)
(注:这是我们的完整设计中的一部分,其它有些部分尚要求保密,希望这个拙文能给做J2EE项目的兄弟们带来点帮助,有任何关于JAVA安全和密码学理论和应用的问题可以来我们的论坛:http://bbssmatrixorg)
近年来,随着互连网和计算机的普及,电子商务和电子政务成为当今社会生活的重要组成部分,以网上订购和网上在线支付的为主要功能的网店系统(Web Shop System)是目前电子商务的热门技术。
JAVA以它“一次编译,处处运行”的神奇魅力和强大的安全技术支持,很快成为WEB信息系统开发的首选语言,而J2EE就是为了WEB应用开发而诞生的。目前J2EE的应用大部份都是多层结构的, 良好的分层可以带来很多好处,例如可以使得代码结构清晰,方便组件复用,可以快速适应应用的新需求。同时,JAVA还提供了强大的安全技术(例如:JCA,HTTPS,JSSA等)。对于电子商务系统而言,系统平台的安全性和效率是其中的核心问题,而这些正好是J2EE及其相关技术的强项。
0 系统中所要使用的API及其特点介绍
该系统中主要使用的技术和特点如下:
(1)EJB :主要是作为J2EE中间层,完成商业逻辑。目前主要有三种类型的EJB: 会话 Bean (Session Bean)、实体Bean (Entity Bean)、消息驱动的Bean(MDB);
(2)JAAS:在J2EE 中用于处理认证和授权服务,进行资源控制;
(3)JSP和Java Servlets:用于J2EE的表示层,生成用户界面;
(4)JDBC:用于数据库(资源层)的连接和与数据库进行交互;
(5)JNDI:Java命名和目录接口,该API实际上是用来访问J2EE的所有资源;
(6)JMS:Java消息传输服务,配合MDB使用。
1 Session的安全问题与解决方案
在项目中,保存Session一般有两种方法,一是分别放在客户端,一是集中放在服务器端。在客户端保存Session是指将Session的状态串行化,然后嵌入到返回给客户的HTML页面中。当Session中的信息很少时,这样实现比较容易,另外这种方法还消除了跨越多个服务器复制状态的问题。
但是在客户端保存Session状态时,必须考虑到由此带来的安全问题,因为黑客可能通过嗅探攻击(Sniffer)获取敏感信息。为了不让敏感信息数据暴露,解决的方法是对数据进行加密或者使用HTTPS,采用SSL技术。
如果是要保存大量Session状态的应用,最好的方法是将Session状态统一放在服务器端。当状态被保存在服务器上时,不会有客户端Session管理的大小和类型限制。此外,还避免了由此带来的安全问题,而且也不会遇到由于在每个请求间传送Session状态带来的性能影响,但是对服务器的性能要求比较高。网店系统的安全性要求较高,因此Session还是集中放在中间层服务器端,同时对客户端到服务器端采用SSL连接。
2客户端的缓存安全设计
大部分顾客使用的WEB浏览器将浏览过的页面缓存在磁盘上,这样我们浏览网页的时候不需要重新向服务器发出HTTP请求,对于普通的网页不存在安全问题。但是对于需要保密的WEB应用,会带来安全隐患和泄漏隐私,因此对于客户端缓存,也必须做适当的处理。最好的方法就是禁止使用缓存,但是对于大部分顾客而言,要求在客户端不用缓存是不现实的,因此我们必须在中间层解决该问题,方法是采用Servlet过滤器技术。该技术是Servlet23以后才出现的,在J2EE中的应用很广泛。要使用该技术,需要执行以下步骤:
(1) 编写一个Servlet过滤器,实现javaxservletFilter接口;
(2) 修改Webxml文件,使容器知道过滤器在什么时候被调用。
JavaxservletFilter主要有3个方法:
(1)init(FilterConfig cfg) :当开始使用 servlet 过滤器服务时,容器调用此方法一次。传送给此方法的 FilterConfig 参数包含 servlet 过滤器的初始化参数;
(2)destroy() :当不再使用 servlet 过滤器服务时,容器调用此方法;
(3)doFilter(ServletRequest req, ServletResponse res, FilterChain chain): 容器为每个映射至此过滤器的 servlet 请求调用此方法,然后才调用该 servlet 本身。传送至此方法的 FilterChain 参数可用来调用过滤器链中的下一个过滤器。当链中的最后一个过滤器调用 chaindoFilter() 方法时,将运行最初请求的 servlet。因此,所有过滤器都应该调用 chaindoFilter() 方法。如果过滤器代码中的附加认证检查导致故障,则不需要将原始 servlet 实例化。在这种情况下,不需要调用 chaindoFilter() 方法,相反,可将其重定向至其它一些错误页面。
如果 servlet 映射至许多 servlet 过滤器,则按照应用程序的部署描述符(webxml)中的先后出现的次序来调用 servlet 过滤器。这一部分的主要代码如下:
//要引入的类库
import javaxservlet;
import javaxservlethttpHttpServletResponse;
import javaio;
import javasecurity;
//设置servlet过滤代码段
public class CacheFilter implements Filter {
protected FilterConfig filterConfig;
private String cachetp;
//初始化
public void init(FilterConfig filterConfig) throws ServletException
{
thisfilterConfig = filterConfig;
cachetp=configgetInitParameter("CacheControlType");
if (cachetp==null)
{
throw new ServletException("没有定义Cache控制类型");
}
}
//
public void destroy()
{
thisfilterConfig = null;
}
//执行过滤器部分
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException, ServletException {
if (response instanceof HttpServletResponse )
{
HttpServletResponse resp=(HttpServletResponse) response;
respaddHeader("Cache-Control",cachetp);
}
else
{
throw new ServletException("非法相应!");
}
chaindoFilter(request, response);
}
}
以下是在Webxml中添加的对应的内容
CacheFilter
CacheFilter
Cache filter
CacheControlType
no-store
CacheFilter
/cachecontrol
3视图访问的安全设置
所有用户都必须登陆,只有登陆才可以看到用户的角色和权限相对应的视图。因此一个重要的问题就是如何防止一个视图或者部分的视图被一个未被授权的客户直接访问。
在一些情况下,资源被限制为完全不允许某些用户访问,例如:管理后台就不应该让普通顾客会员访问。有几个方法可以做到这一点。一个方法是加入应用逻辑到处理控制器或者视图的程序中,禁止某些用户访问。另一个方案是设置运行时的系统,对于一些资源,仅允许经由另一个应用资源内部调用。在这种情形,对于这些资源的访问必须被通过另一个表现层的应用资源进行,例如一个servlet控制器。对于这些受限制的资源不允许通过浏览器直接调用。
在J2EE中,可以利用Web容器中内置的安全技术来进行角色访问资源的控制。根据最新版本的servlet和EJB规范,安全限制在webxml的配置描述文件中描述,我们可以通过配置webxml来控制角色访问,修改配置描述文件webxml就可以达到快速修改安全策略的目的。
安全限制允许使用编程的方法根据用户的角色来控制访问。资源可以被某些角色的用户访问,同时禁止其它的角色访问。另外,某个视图的一部分也可以根据用户的角色来限制其访问。如果某些资源完全不允许来自于浏览器的直接访问,那么这些资源可以配置只允许一些特殊的安全角色访问,而这些安全角色不分配给任何一个用户。这样只要不分配这个安全角色,那么以这种方式配置的资源将禁止所有的浏览器直接访问。下面一个例子就是webxml配置文件的一部分,它定义了一个安全的角色以限制直接的浏览器访问。角色的名字是“vip”,受限制资源的名字是specialgood1jsp、specialgood2jsp、specialgood3jsp和bookinfojsp。除非一个用户或者组被分配到“vip”角色,否则这些客户都不可以直接访问这些JSP页面。不过,由于内部的请求并不受这些安全的限制,一个初始时由某servlet控制器处理的请求将会导向到这些受限制的页面,这样它们就可以间接访问这些JSP页面。
<security-constraint>
<web-resource-collection>
<web-resource-name>specialgood </web-resource-name>
<description>special good infomation</description>
<url-pattern>/shop/jsp/a1/specialgood1jsp</url-pattern>
<url-pattern>/shop/jsp/a1/specialgood2jsp</url-pattern>
<url-pattern>/shop/jsp/a1/specialgood3jsp</url-pattern>
<url-pattern>/shop/jsp/a1/bookinfojsp</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>vip</role-name>
</auth-constraint>
</security-constraint>
3 各层次间的耦合问题与解决策略
表现层的数据结构,例如HttpServletRequest,应该被限制在表现层上。如果将这些细节放到其它层(主要是业务逻辑层)中,将大大降低了代码的的重用性,令代码变得复杂,并且增加了层间的耦合。解决方法一个常用方法是不让表现层的数据结构和商业层共享,而是拷贝相关的状态到一个更常见的数据结构中再共享。你也可以选择由表现层数据结构中将相关的状态分离出来,作为独立的参数共享。另外在域对象暴露表现层的数据结构,如果将诸如HttpServletRequest的请求处理数据结构和域对象共享,这样做也会增加了应用中两个不同方面的耦合。域对象应该是可重用的组件,如果它们的实现依赖协议或者层相关的细节,它们可重用性就很差,同时维护和调试高耦合的应用更加困难。成熟的解决方案是不通过传送一个HttpServletRequest对象作为一个参数,而是拷贝request对象的状态到一个更为常用的数据结构中,并且将这个对象共享给域对象。你也可以选择由HttpServletRequest对象中将相关的状态分离出来,并且将每一个的状态作为一个独立的参数提供给域对象。
4 EJB的安全设计与控制
EJB的执行过程一般是这样的:(1)客户端通过JNDI检索Home对象的引用;(2)JNDI返回Home对象的引用;(3)请求创建一个新的EJB对象;(4)创建EJB对象;(5)返回EJB对象;(6)调用商务方法;(7)调用Enterprise Bean引起EJB的安全问题原因主要存在三个方面:
(1)用包嗅探器(Packet Sniffer)获取用户凭证信息并直接调用会话Bean;(2)对实体Bean进行未授权访问;(3)对消息驱动的Bean的无效访问(发布恶意或者虚假的消息)
以上安全问题可导致客户端或者服务端欺骗攻击和DDOS攻击。解决问题(1)的方法是使用JAVA中SSL技术来保护通讯,解决(2)的方法是对于实体Bean全部采用本地接口或者采用JAAS(文献[1]),对于(1)和(2),我们可以同时采取以下措施:让容器完成认证并传输用户凭证信息,另外使用声明性或者程序设计的安全验证角色。对于问题(3),J2EE并没有提供一个很好的方案,我们的解决方案是采用数字签名技术来保证信息来自可信任的源。该方法的结合代码简要说明如下,消息采用JMS传递:
//客户端,要用到消息发送者的私钥进行签名
messagesetString("userid",userid);
messagesetString("useritem",useritem);
messagesetInt("usersn",serialnum);//包含一个序列号
messagesetString("usercertid",certid);
String signature=getSignature(userid+":"+useritem+":"+serialnum+":"+certid);
//进行签名,其中getSignature为签名函数,要用到消息发送者的私钥进行签名,具体密码学技术可参考文献[2];
messagesetString("signature",signature);
sendmessage(message);//发送信息
//服务器端
String checkstr=userid+":"+messagegetString("useritem")+":"+
messagegetInt("usersn")+":"+usercertid;
boolean b_check=checkSignature(checkstr,msggetString("signature"),
usercertid,userid);
//进行验证,其中checkSignature为验证函数,要用到消息发送者的公钥进行验证,具体密码学技术可参考文献[2];
5 CA中心与证书的生成
前面我们已经提出在客户端要使用HTTPS和SSL,因此要建立一个自己的CA中心来管理分发证书,加强客户端到中间层服务器端通讯的安全性建立CA中心的第一步是利用JAVA工具包中的Keytool生成一个X509证书,然后将该证书交由权威CA中心Vertsign签名,再将该证书设置为根证书,建立自己的CA每次有新用户注册交易的时候,都必须签发一个用户独一无二的证书,关键的过程是如何签发证书签发证书的过程如下:
(1)从中间层CA服务器的密钥库中读取CA的证书:
FileInputStream in=new FileInputStream(ShopCAstorename);
KeyStore ks=KeyStoregetInstance("JKS");
ksload(in,storepass);
javasecuritycertCertificate c1=ksgetCertificate(alias);
(2)获得CA的私钥:
PrivateKey caprk=(PrivateKey)ksgetKey(alias,cakeypass);
(3)从CA的证书中提取签发者信息:
byte[] encod1=c1getEncoded();
X509CertImpl shopcimp1=new X509CertImpl(encod1);
X509CertInfo shopcinfo1=(X509CertInfo)shopcimp1get(X509CertImplNAME+
""+X509CertImplINFO);
X500Name issuer=(X500Name)shopcinfo1get(X509CertInfoSUBJECT+
""+CertificateIssuerNameDN_NAME);
(4)获取待签发的证书相关信息,与(3)类似;
(5)设置新证书的有效期、序列号、签发者和签名算法:
//设置新证书有效期为1年
Date begindate =new Date();
Date enddate =new Date(begindategetTime()+300024360601000L); CertificateValidity cv=new CertificateValidity(begindate,enddate);
cinfo2set(X509CertInfoVALIDITY,cv);
//设置新证书序列号
int sn=(int)(begindategetTime()/1000);
CertificateSerialNumber csn=new CertificateSerialNumber(sn);
cinfo2set(X509CertInfoSERIAL_NUMBER,csn);
//设置新证书签发者
cinfo2set(X509CertInfoISSUER+""+
CertificateIssuerNameDN_NAME,issuer);
//设置新证书算法
AlgorithmId algorithm =
new AlgorithmId(AlgorithmIdmd5WithRSAEncryption_oid);
cinfo2set(CertificateAlgorithmIdNAME+
""+CertificateAlgorithmIdALGORITHM, algorithm);
(6)创建证书并签发:
// 创建证书
X509CertImpl newcert=new X509CertImpl(cinfo2);
// 签名
newcertsign(caprk,"MD5WithRSA");
(7)将新证书提供给注册用户,并提示安装,一般的做法是在用户注册成功后系统立即返回一个证书对象给中间层某个Servlet,由其返回给用户。
参考文献
[1]沈耀,陈昊鹏,李新颜EJB容器中基于JAAS 的安全机制的实现[J]:计算机应用与软件 20049 16~18
[2](美)Jess Garms著,庞南等译 Java安全性编程指南[M]北京:电子工业出版社 2002
[3] http://javasuncom/j2ee/
[4] 蔡剑,景楠 Java 网络程序设计:J2EE(含14最新功能)[M]北京: 清华大学出版社 2003
[5](美)John Bell Tony Loton Java Servlets 23编程指南[M]北京: 电子工业出版社 2002
[6](美)Joseph JBambara等著,刘堃等译 J2EE技术内幕[M]北京:机械工业出版社 2002
[7](美)Li Gong著JAVA 2平台安全技术——结构、API设计和实现[M]北京: 机械工业出版社 2000
[8](英)Danny Ayers等著,曾国平等译 Java服务器高级编程[M]北京:机械工业出版社 2005
[9]http://wwwsmatrixorg/bbs
[10]http://wwwsmatrixcn/bbs
哈,站长一语中的。其实不是Exchange的问题,是CA的问题。大概在这里解释一下吧,如果站长觉得在此处不妥,就把这个帖子移到别处吧。
CA是5年前11月份为Exchang2003建立的,有效期是5年(咋建CA网上有的是了)结果2年前5月份升级到Exchange2010,重新向CA申请的证书,现在2年到期,续订证书,但是到11月份正好根证书5年到期,所以会出现这样仅能续订半年证书的情况。
查看CA时间的方法为,在CA服务器上,打开控制面板里-管理工具-证书颁发机构-右键点击CA属性,查看证书日期,一般都是5年,续订的方法是右键点CA-所有任务-续订CA证书,这样就会再延期5年。
重新在EXCHANGE上申请续订证书,这时候的申请续订的数字证书时间会是2年,要想延长这个时间需要修改CA服务器的注册表(这个网上也有,大家可以搜一下)
续订完证书,在EXCHANGE的EMC上完成证书申请的搁置请求,导入证书后,会提示证书不可用,我觉得是虽然在CA上续订了证书,但是在EXCHANGE上还是认为是一个新证书,所以要手动把证书安装一下,既可。最后记得把服务迁移到新证书下,尤其是IIS,改变后可能某些IIS设置需要调整一下,要不会出现用户OWA访问有点问题。
俺自以为是的给留下的问题解决的办法,结果发现还是有问题,犯了一个基本的错误,这个也讲给大家吧,也许大家都知道了,客户端上需要安装的是根证书而不是导入Exchange的那张,我把EXCHANGE那张证书在客户端装了N多遍都报错。结果发现是这个问题,根源就是没有搞懂数字证书的原理。另外在CA服务器下载根证书的时候还要注意,因为续签了所以有两张根证书,注意要下那个续签的新根证书!
创建根证书密钥文件(自己做CA)rootkey:
创建根证书的申请文件rootcsr:
创建一个自当前日期起为期十年的根证书rootcrt:
创建服务器证书密钥serverkey:
创建服务器证书的申请文件servercsr
创建自当前日期起有效期为期两年的服务器证书servercrt
创建客户端证书密钥文件clientkey
创建客户端证书的申请文件clientcsr
创建一个自当前日期起有效期为两年的客户端证书clientcrt
将客户端证书文件clientcrt和客户端证书密钥文件clientkey合并成客户端证书安装包clientpfx
保存生成的文件备用,其中servercrt和serverkey是配置单向SSL时需要使用的证书文件,clientcrt是配置双向SSL时需要使用的证书文件,clientpfx是配置双向SSL时需要客户端安装的证书文件 crt文件和key可以合到一个文件里面,把2个文件合成了一个pem文件(直接拷贝过去就行了)
x509证书一般会用到三类文,key,csr,crt。
Key是私用密钥openssl格,通常是rsa算法。
Csr是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。
crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。
1key的生成
opensslgenrsa -des3 -out serverkey 2048
这样是生成rsa私钥,des3算法,openssl格式,2048位强度。serverkey是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:
opensslrsa -in serverkey -out serverkey
serverkey就是没有密码的版本了。
2生成CA的crt
opensslreq -new -x509 -key serverkey -out cacrt -days3650
生成的cacrt文件是用来签署下面的servercsr文件。
3csr的生成方法
opensslreq -new -key serverkey -outservercsr
需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。
4crt生成方法
CSR文件必须有CA的签名才可形成证书,可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢。
opensslx509 -req -days 3650 -in servercsr -CA cacrt -CAkey serverkey-CAcreateserial -out servercrt
输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥,-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。
最后生成了私用密钥:serverkey和自己认证的SSL证书:servercrt
证书合并:
catserverkey servercrt > serverpem
想要搭建https网站,需要具备域名、空间、https证书等要素。https证书申请流程如下:
第一步,生成并提交CSR(证书签署请求)文件
CSR文件一般都可以通过在线生成(或服务器上生成),申请人在制作的同时系统会产生两个秘钥,公钥CSR和密钥KEY。选择了SSL证书申请之后,提交订单并将制作生成的CSR文件一起提交到证书所在的CA颁发机构。
第二步,CA机构进行验证
CA机构对提交的SSL证书申请有两种验证方式:
第一种是域名认证。系统自动会发送验证邮件到域名的管理员邮箱(这个邮箱是通过WHOIS信息查询到的域名联系人邮箱)。管理员在收到邮件之后,确认无误后点击我确认完成邮件验证。所有型号的SSL证书都必须进行域名认证。
第二种是企业相关信息认证。对于SSL证书申请的是OV SSL证书或者EV SSL证书的企业来说,除了域名认证,还得进行人工核实企业相关资料和信息,确保企业的真实性。
第三步,CA机构颁发证书
由于SSL证书申请的型号不同,所验证的材料和方式有些区别,所以颁发时间也是不同的。
如果申请的是DV SSL证书最快10分钟左右就能颁发。如果申请的是OV SSL证书或者EV SSL证书,一般3-7个工作日就能颁发。
1、用CA登陆时,提示以下错误。
2、这是因为没有启动或者没有安装好CA驱动,启动或重新下载并安装CA驱动。之后,再重新插入CA,驱动就会重新安装了。
3、当电脑右下角提示成功注册后,就说明安装了正确的驱动了,再去登陆国税网络端就能成功登陆进去了。
4、还有一种情况,就是到期了还没缴费。欠费的情况下,也是没有办法登陆进去的。以上是调用CA证书服务器失败后的原因。
0条评论