`
supershi
  • 浏览: 7609 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

IIS下的SSL证书配置

 
阅读更多

最近一个项目中有服务端与服务端数据交互的功能,为了保证传递数据的安全性,在数据交互的时候在发送端采用了对传输数据用证书签名,在接收端对数据进行验签;接收端连接地址使用SSL进行连接的方案。

 

在项目中用SSL连接出现了很多问题,做了很多尝试,总算把问题一一解决。这里说说我在项目中SSL进行连接遇到的问题及解决方法。

 

在完成主要代码后,不用SSL连接,功能都能正常,换成SSL连接后就出现一些问题。

 

其中最棘手的问题是:“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。”和“根据验证过程,远程证书无效。 ”。在网上查看了很多解决方法,有很多都自己写一段代码,对服务端证书验证总是信任,其实如果用这种方法那就没必要用SSL连接。不过在网上也获得一些收获,有部分人提示是证书的问题,证书验证失败。

 

为了验证这个具体是什么原因,我在本机上搭了一个环境来测试是否因为证书的原因。(注:如果想获得正确结果推荐开发时使用IIS来调试代码,这个SSL连接的问题我在开发时在VS环境下是都OK的,但是放到客户的环境下就出错。),由于我是用.net的,所以现在先在IIS上给自己签发一张服务器证书。具体步骤如下:

 

1、在IIS中的网站下,右键鼠标,在弹出的网站属性中选择目录安全选项卡,选择安全通信中的服务器证书。

 

2、在弹出框中选择新建证书,如果你已经有一个服务器证书可以选择指派现有证书。

 

 

3、接下来一般都可以一路默认。


 

4、接下来要填写单位和部门,这个信息是待会制作证书必须的,所以需要记录好。


 

5、接下来是SSL证书最重要的一环了,标准称呼站点公用名称,实际就是的网站地址。这个就是接收端验证服务端SSL证书的关键,也是制作证书必须的,也要记录好。


 

6、接下来填写证书颁发机构要求的地理信息,这个也是证书制作必须的,要记录好。

 


 
 7、填好上面的部分后就会生成一个证书签名请求CSR,里面是你之前填写的信息的Base64编码 ,默认存放到C盘下,你也可以指定位置,这个也是制作证书所必须的,要存放好。这里我命名为certreq1.txt。接下来就完成了。

 


8、接下来就该制证了,制作只能在有签发电子证书资质的机构去制证;我这里在公司的测试RA中为自己签发一张SSL证书,具体步骤这里就不详述了。这里有个地方是要注意的,证书主题是有正序主题和逆序主题,我这个是逆序主题,根据我之前在IIS里面填的内容,我的证书的主题为:C=CN,ST=gd,L=sz,O=myca,OU=test,CN=192.168.100.113,这个是满足X509命名规则的证书主题。填完完整的信息后就该制证了,填入P10请求,就是之前生成的证书签名请求CSR,把里面内容复制到P10。

 

9、制证完成后就可以下载证书,证书会保存为.p7b文件,里面包含一个或多个证书,一般包含本证书和它的根证书。下载保存到本地。

 

 

双击打开这个文件你就可以看到:


里面有这次签发的SSL证书和根证书。在服务器证书上右键,选择“所有任务”->“导出”,将这张证书导出。选择DER编码二进制,导出为一个.cer文件。下一步会使用,这里我命名为113_test.cer。

 

10、接下来在IIS里面完成之前未完成的操作。还是选择IIS网站属性里面的目录安全性选项卡,选择服务器证书,这个时候会有如下图所示:

 


 直接下一步



 选择之前导出的证书,113_test.cer。下一步就OK了。到这个地方,SSL证书就已经成功安装到了IIS中,不过需要设置才能启用。

 

11、下面来启用SSL证书,指定IIS中的内容使用https来访问,接下来我们选择"目录安全选项卡"中"安全通信"中的“编辑”按钮,出现如下图的界面。如果需要网站或者虚拟目录使用https来访问,要勾选“要求安全通道(SSL)”,“客户证书”中,“忽略客户证书”则表示这个网站或者虚拟目录是单向验证,服务端不会验证客户端的证书。如果勾选“要求客户证书”则为双向,要握手成功的话,客户端要成功验证服务端证书,服务端也要验证客服端的证书。一般我们都会选择单向SSL。

 

至此,IIS下的SSL证书就算是完成了,接下来就是验证:“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。”和“根据验证过程,远程证书无效。 ”。这类错误提示是不是因为证书的原因造成的,我把我的SSL设置为单向验证,用192.168.100.113这个地址来访问接收端结果正常,但是换成lcalhost来访问就会提示“根据验证过程,远程证书无效。”。之后再给自己签发了一个localhost的SSL证书,用localhost来访问接收端,错误消失。

现在结果已经很明确,出现:“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。”和“根据验证过程,远程证书无效。 ”。这类错误只要不是粗心造成代码错误,可以确定是因为证书的问题。所以如果网站的SSL的主题是网站的URL,但是你在代码里面访问的时候使用的是IP地址,极有可能出现错误。但是在浏览器里面用IP地址加https访问网站则不受影响。

在JAVA环境下签发及配置SSL证书也很相似,需要编写一段脚本来完成签发,这篇文章就不再赘述。下一篇文章我将记录我的服务端与服务端使用双向SSL验证及对传输数据使用证书签名的内容。

  • 大小: 22.6 KB
  • 大小: 29.4 KB
  • 大小: 40.5 KB
  • 大小: 33.2 KB
  • 大小: 34.8 KB
  • 大小: 33.9 KB
  • 大小: 24.4 KB
  • 大小: 27.9 KB
  • 大小: 35.5 KB
  • 大小: 35.7 KB
  • 大小: 15.4 KB
  • 大小: 32.1 KB
  • 大小: 28.6 KB
  • 大小: 28.6 KB
  • 大小: 72.1 KB
  • 大小: 37.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics