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

本文涉及的产品
Digicert DV 单域名(免费证书),20个 3个月
简介:

在前面几篇文章,均介绍了一些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证书加密,如需转载请自行联系原博主。



目录
相关文章
|
8月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
11月前
|
安全 网络安全 数据安全/隐私保护
SSL/TLS证书**是一种用于加密网络通信的数字证书
SSL/TLS证书**是一种用于加密网络通信的数字证书
503 6
|
5月前
|
数据采集 监控 API
加密货币 Pump 监测刮刀工具开发原理及实现路径
开发Pump监测刮刀工具需综合运用高频数据采集、波动率建模、跨平台对冲三大核心技术,2025年的技术瓶颈已从基础数据获取转向超低延迟执行与合规适配。建议采用模块化开发策略,优先实现核心监控功能,再逐步接入AI决策与链上套利模块。代码示例需根据最新交易所API文档动态调整,并严格遵守所在地监管法规。
|
安全 网络安全 区块链
网络安全与信息安全:构建数字世界的防线在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的重要屏障。随着网络攻击手段的不断升级,从社交工程到先进的持续性威胁(APT),我们必须采取更加严密的防护措施。本文将深入探讨网络安全漏洞的形成原因、加密技术的应用以及提高公众安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
在这个数字信息日益膨胀的时代,网络安全问题成为了每一个网民不可忽视的重大议题。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全漏洞如同隐藏在暗处的“黑洞”,时刻准备吞噬掉我们的信息安全。而加密技术作为守护网络安全的重要工具之一,其重要性不言而喻。同时,提高公众的安全意识,也是防范网络风险的关键所在。本文将从网络安全漏洞的定义及成因出发,解析当前主流的加密技术,并强调提升安全意识的必要性,为读者提供一份详尽的网络安全指南。
|
7月前
|
安全 网络协议 算法
零基础IM开发入门(五):什么是IM系统的端到端加密?
本篇将通俗易懂地讲解IM系统中的端到端加密原理,为了降低阅读门槛,相关的技术概念会提及但不深入展开。
204 2
|
8月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
870 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
8月前
|
安全 搜索推荐 网络安全
免费SSL证书:一键加密,守护网站安全
在互联网时代,网站安全至关重要。SSL证书是保护网站数据传输安全的核心工具,提供数据加密、提升信任度、提高搜索引擎排名及避免“不安全”警告等多重优势。现在,您可以通过JoySSL官网免费获取SSL证书,只需注册并填写注策码(230907),即可一键加密,轻松守护网站安全,提升用户体验和品牌形象。立即行动,为您的网站穿上“安全防护衣”!
160 11
|
7月前
|
安全 数据建模 网络安全
数字时代的信任快餐:DV证书的生存法则与文明困境——当加密锁链成为互联网的“方便面哲学”
深夜的杭州余杭区,阿里云数据中心灯火通明,每秒完成2.4万次SSL证书验证,其中65%为DV证书。DV证书通过自动化验证快速构建网络信任,如同预制菜般高效,但也带来了安全隐患,如钓鱼网站滥用。其崛起反映了效率至上的趋势,但背后隐藏着信任通胀与安全风险。随着加密算法进化和新信任机制的探索,DV证书或将在未来被更复杂的安全体系取代。
|
12月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
267 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
算法 安全 网络安全
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
概念区分:对称加密、非对称加密、公钥、私钥、签名、证书
1247 0