博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IIS下的SSL证书配置
阅读量:4919 次
发布时间:2019-06-11

本文共 2261 字,大约阅读时间需要 7 分钟。

 

 

最近一个项目中有服务端与服务端数据交互的功能,为了保证传递数据的安全性,在数据交互的时候在发送端采用了对传输数据用证书签名,在接收端对数据进行验签;接收端连接地址使用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验证及对传输数据使用证书签名的内容。

作者:

转载于:https://www.cnblogs.com/myfapiao/archive/2013/01/24/2874127.html

你可能感兴趣的文章
iOS开发UI篇—transframe属性(形变)
查看>>
java中的单例模式
查看>>
Elasticsearch Server,2nd Edition pdf 翻译 中文
查看>>
Django-缓存
查看>>
java.util.Map.Entry接口
查看>>
Linux中crond服务与crontab用法
查看>>
PLSQL连接ORACLE配置字符串简介 oracle网络配置 三个配置文件 listener.ora、sqlnet.ora、tnsnames.ora原理解释...
查看>>
开发使用Node.js的一个小技巧
查看>>
对象序列化
查看>>
UVA 208 Firetruck (DFS+剪枝)
查看>>
windows设置电脑的固定IP
查看>>
Python
查看>>
犀牛Phinoceros 如何切换中文语言
查看>>
Win7如何解决精简版的迅雷7无法运行
查看>>
C#.NET常见问题(FAQ)-如何判断某个字符是否为汉字
查看>>
直接用postman测试api ,服务器端没提供跨域也可以访问。
查看>>
数据的类型以及内置方法
查看>>
继承之super关键字的使用
查看>>
XML - 报表数据的新大陆
查看>>
echart在X轴下方添加字
查看>>