WCF开发框架形成之旅--如何实现X509证书加密

本文涉及的产品
Digicert DV 证书 单域名,20个 3个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

在前面几篇文章,均介绍了一些WCF服务的开发经验,对于数据的加密传输,重要性不言而喻。关于在WCF使用证书加密的重要性,在上篇随笔《

WCF开发框架形成之旅--您的数据是否需要加密》 有详细的介绍,特别对于重要的、敏感的数据,加密传输非常重要。

因此自从开始使用WCF以来,一直想使用合适的数据加密传输来解决问题,WCF常用的就是使用X509证书来实现加密,开始创建WCF服务,并顺利调用,以为一且均很美好,但是这个X509加密处理方式却令人头痛不已,一直没能顺利调通,并参考了很多www.codeproject.com上的相关文章,里面有很多不错的文章,不过很多不够系统,也说得不够具体化。本文的意图就是详细、系统化介绍如何处理证书加密的操作,方便自己及他人日常开发WCF借鉴。

首先先介绍一下前人对WCF开发中应用证书加密的一些思路介绍,个人觉得比较靠谱的是这两篇文章

1、 http://www.codeproject.com/KB/WCF/9StepsWCF.aspx 

2、 Using Certificate-based Authentication and Protection with Windows Communication Foundation (WCF)

第一篇文章基本已经介绍了证书加密操作的相关步骤了:创建证书、配置服务及客户端节点。不过没有说明我们一般通过那样创建的证书,其实是临时用的测试证书,不在配置文件的certificateValidationMode属性中使用除了“None"属性外的值,否则就不能顺利运行调用服务。这个问题其实可以通过在Windows2003中部署证书服务来创建合格的证书,具体可以参考文章实现:http://www.codeproject.com/KB/WCF/wcf_certificates.aspx

另外作者可能也只是在一台开发机器上部署服务和调用客户端或者是XP系统,因此也没有考虑给IIS授权的问题,因为在Windows2003等服务器机器上,要给IIS授权才能访问证书,需要使用WinHttpCertCfg.exe或者CertMgr.exe来实现证书的授权等操作,在这方面,文章http://www.codeproject.com/KB/WCF/CustomUserNamePassAuth2.aspx 介绍的有一点靠谱了,不过了解整篇文章却无助完整测试WCF服务的应用

综上所述,要成功部署基于X509证书加密的操作,需要这几方面的知识和操作步骤。

1、 创建WCF服务应用以及调用客户端。

2、 创建客户证书和服务端的X509证书

3、 配置服务端的配置文件,使之使用X509证书服务。

4、 授权IIS访问服务器证书

5、 在服务器证书管理中导入服务器端证书

6、 在客户端导入客户端证书,完成X509证书配置并调用服务。

下面就这几方面分别介绍相关的处理。

1、创建WCF服务应用以及调用客户端。  

 这个是基本的操作,客户创建适合自己的WCF开发框架,基于我的Winform开发框架扩展而成的WCF框架,是一种比较完善、高效、弹性化的开发框架,详细步骤及说明请参考随笔《基于我的Winform开发框架扩展而成的WCF开发框架》,使用这种方式构造的开发框架,各层职责比较分明,而且方便管理。

2、 创建客户证书和服务端的X509证书

在VS2008 的DOS命令提示中,输入下面的指令即可创建相关的服务器和客户端证书

makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=ParkingServer -sky exchange -pe

makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=ParkingClient -sky exchange -pe 

下面是各种参数的介绍

属性

解析

-sr

指定的证书存储区中的注册表位置。 
currentUser 
指定注册版存储位置为 HKEY_CURRENT_USER. 
localMachine 
指定注册版存储位置为 HKEY_LOCAL_MACHINE.

-ss

指定证书存储的位置。

-a

指定相关的算法,可以选择 MD5 算法或者 SHA1算法

-n

指定证书的名称。该名称遵循X.500命名标准。简单例子如 "CN=MyName" 格式,如果没有指定/n开关,证书默认的名称是"Joe's Software Emporium"。

-sky

证书键类型。可以设置为 exchange 或者 signature。

-pe

证书可导出

 

创建证书成功后,我们在开发的机器上就可以看到两个不同的证书了。

要看这两个证书,需要执行下面操作, 开始-》运行-》mmc.exe=》在控制台中选择文件=》添加/删除管理单元=》添加=》选择证书=》弹出证书管理单元选择计算机账户,默认下一步确定回来,就看到下面的界面。

 

在上面我们可以看到创建在LocalMachine账户下的证书,我们双击查看证书可以看到这个证书是一个不受信任的证书,但是我们还是可以使用的,只是需要在Web.Config配置信息中,certificateValidationMode 属性指定为None,而不能指定其他信任值。

3、 配置服务端的配置文件,使之使用X509证书服务。

根据创建的证书信息,我们修改Web.Config文件,使之应用X509证书加密,如下所示。关键的地方是设置验证方式使用证书。

 <security mode="Message"> 

     <message clientCredentialType="Certificate"/>
</security>

而证书的相关信息指定如下。

< serviceCertificate findValue="ParkingServer"
       x509FindType ="FindBySubjectName"
       storeLocation
="LocalMachine"
       storeName
="My" />  

上面标示证书名称是ParkingServer ,通过查找名字方式对应,并且存储在本地计算机账户、个人证书目录下的位置。

Web.Config 部分内容:

  

4、 授权IIS访问服务器证书

完成以上操作后,如果你的开发机器是XP,那么应该服务端是可以运行正常了,如果你的开发机器是Window2003,那么,恭喜你中奖了,运行服务后会出现下面的错误信息的:[ArgumentException: 证书“CN=ParkingServer”必须具有能够进行密钥交换的私钥。该进程必须具有访问私钥的权限。],如下图所示。

 

要解决上面的错误, 只需要给相应的账号分配权限即可,这里IIS访问证书密钥的权限可以通过WinHttpCertCfg.exe来处理,只需要通过命令行执行该程序即可,如下所示。

winhttpcertcfg -g -c LOCAL_MACHINE\My -s ParkingServer -a "NETWORKSERVICE" 

运行命令后,在运行WCF服务,一切OK了

 

这里另外也介绍下WinHttpCertCfg.exe来进行处理的几个命令。

列出证书的授权列表
winhttpcertcfg -l -c LOCAL_MACHINE\My -s ParkingServer -a "NETWORKSERVICE"

给IIS的NETWORKSERVICE账户以基于证书名称模式授权
winhttpcertcfg -g -c LOCAL_MACHINE\My -s ParkingServer -a "NETWORKSERVICE"

给IIS的NETWORKSERVICE账户以基于证书文件模式授权
winhttpcertcfg -g -i "ParkingServer.pfx" -c LOCAL_MACHINE\My -a "NETWORKSERVICE" -p

移除账号对于证书的授权

winhttpcertcfg -r -c LOCAL_MACHINE\My -s ParkingServer -a "NETWORKSERVICE" 

5、 在服务器证书管理中导入服务器端证书

 完成以上步骤,如果服务配置文件正确,基本上在开发机器上不会有什么问题了,但是如果把服务部署到另外一台服务器机器上,那么就会可能出现找不到证书的错误。因为服务还没有导入创建好的证书呢。

首先我们在开发机器上,在证书的控制台中选定服务端证书并导出即可把服务端证书导出到文件中,如下图所示。

 

记得在导出的时候选择带私钥的选项即可,导出的文件保存为ParkingServer.pfx。然后我们在服务器中,在相同的控制台中把服务端的证书导入即可使得WCF服务在服务器中也可以正常访问了。

6、 在客户端导入客户端证书,完成X509证书配置并调用服务

如果客户端需要部署很多个,那么每个客户端需要把第二步创建的客户端证书导入,才能正常方便服务器的WCF服务,否则会出现证书的各种提示错误。

如果这些操作完成,那么真诚恭喜你,真的可以使用WCF服务了,而且是使用了X509证书加密的WCF服务。 

最后把整个测试例子放上来,供大家参考学习:http://files.cnblogs.com/wuhuacong/TestWcfService.rar  

本文转自博客园伍华聪的博客,原文链接:WCF开发框架形成之旅--如何实现X509证书加密,如需转载请自行联系原博主。



目录
相关文章
|
2月前
|
安全 网络安全 数据安全/隐私保护
SSL/TLS证书**是一种用于加密网络通信的数字证书
SSL/TLS证书**是一种用于加密网络通信的数字证书
110 6
|
3月前
|
安全 网络安全 区块链
网络安全与信息安全:构建数字世界的防线在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的重要屏障。随着网络攻击手段的不断升级,从社交工程到先进的持续性威胁(APT),我们必须采取更加严密的防护措施。本文将深入探讨网络安全漏洞的形成原因、加密技术的应用以及提高公众安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
在这个数字信息日益膨胀的时代,网络安全问题成为了每一个网民不可忽视的重大议题。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全漏洞如同隐藏在暗处的“黑洞”,时刻准备吞噬掉我们的信息安全。而加密技术作为守护网络安全的重要工具之一,其重要性不言而喻。同时,提高公众的安全意识,也是防范网络风险的关键所在。本文将从网络安全漏洞的定义及成因出发,解析当前主流的加密技术,并强调提升安全意识的必要性,为读者提供一份详尽的网络安全指南。
|
4月前
|
存储 SQL 安全
网络安全与信息安全:守护数字世界的坚盾在这个高度数字化的时代,网络安全和信息安全已经成为个人、企业乃至国家安全的重要组成部分。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
随着互联网技术的飞速发展,网络安全问题日益凸显。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全事件层出不穷。本文将从网络安全漏洞的定义与分类入手,探讨常见的网络攻击手段;随后深入解析加密技术的原理及其在保护信息安全中的作用;最后强调提升公众与企业的安全意识的重要性,并提出具体的建议。通过综合运用这些知识点,我们可以更好地构建起一道道坚固的防线,守护我们的数字世界。
|
3月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
51 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
5月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
135 56
|
4月前
|
算法 安全 网络安全
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
185 0
|
5月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享安卓与iOS开发中的线程管理比较
【8月更文挑战第30天】本文将探讨网络安全与信息安全的重要性,并分享关于网络安全漏洞、加密技术和安全意识的知识。我们将了解常见的网络攻击类型和防御策略,以及如何通过加密技术和提高安全意识来保护个人和组织的信息安全。
|
7月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
7月前
|
安全 网络协议 网络安全
【红队APT】反朔源&流量加密&CS&MSF&证书指纹&C2项目&CDN域前置
【红队APT】反朔源&流量加密&CS&MSF&证书指纹&C2项目&CDN域前置
160 1
|
6月前
|
数据安全/隐私保护
https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图
https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图
198 0