此节内容因为是在 WCF分布式安全开发实践(2):传输安全模式之基本身份验证(Windows账户密码):Transport_Basic_WSHttpBinding
的基础上作出的扩展。 与 WCF分布式安全开发实践(10):消息安全模式之自定义用户名密码:Message_UserNamePassword_WSHttpBinding.很相似,我们在传输安全模式下页提供了提供了用户自定义对客户端凭据的验证代码。与消息安全不同的是,这里我们要借助SSL来保证数据交互的安全。首先我们来介绍一下什么是传输安全模式的自定义UserNamePassword。
【0】传输安全模式之基本身份验证:
传输安全模式之基本身份验证需要服务器需要一个有效的可用于安全套接字层 (SSL) 的 X.509 证书,并且客户端必须信任此服务器证书。 这里使用https协议。客户端提供有效的UserName和Password。
1.身份验证(服务器):提供证书,(使用 HTTPS)
2.身份验证(客户端):提供自定义的用户名/密码
WCF安全模式自定义UserNamePassword身份验证的架构如下:
客户端建立SSL安全套接层以后,会使用商定的密码对消息签名,客户端使用证书加密数据,服务端使用证书解密数据,保证数据的安全和机密性,消息签名放置被篡改。这个链接是唯一的。通信结束以后会关闭连接。
是制作和设置SSL证书的过程,和传输安全模式的过程一样,这里直接使用相同证书和端口。延续以前的风格。
【1】制作证书:
(1)使用makecert 工具:Microsoft Visual Studio 2008-->Visual Studio Tools-->Visual Studio 2008 命令提示行。
输入:makecert -sr localmachine -ss My -n CN=WCFServerPK -sky exchange -pe -r
输入:makecert -sr localmachine -ss My -n CN=WCFClientPK -sky exchange -pe -r。
-这里制作了连个证书,主要只使用一个WCFServerPK,可以到出密钥文件pfx,后续我们要导入到其他存储区,设置为信任的证书。WCFClientPK -是为以后文章准备的,也是可以设置为信任的证书。
(2) 打开浏览器---->Internet 选项----->内容----->证书----->个人,默认是保存到当前用户CurrentUser,你会看到刚才制作的证书。这个可以查看部分证书,但是功能有限。我们还是使用控制台证书管理工具。
(3)使用MMC建立证书控制单元查看证书的信息:
开始--运行--MMC--控制台--添加删除单元--证书--当前用户和计算机各添加一个。能查看和管理CurrentUser和LocalMachine的证书。如图:
(4)导入证书到信任的人和信任的CA机构里。步骤如下:
1.导出证书文件,带密钥的pfx文件。使用mmc,保存到桌面位置(方便查找)。这里记住你制作证书的密码。要使用。
2.导入证书到信任的人。使用任务-导入向导--选择证书文件,导入即可。
3.导入证书到信任的机构,使用任务-导入向导--选择证书文件,导入即可。这个证书就被信任了。
【2】SSL证书设置:
下面我们来设置SSL端口证书,这个步骤很重要。不然客户端无法查找到WCF服务。
【2.1】查询SSL证书设置:
需要为使用的端口SSL注册证书。Windows Server 2003 或 Windows XP,则使用 HttpCfg.exe 工具。Windows Server 2003 中已安装该工具。下载该工具/Files/frank_xl/HttpcfgFrankXuLei.rar。如果运行的是 Windows Vista,则使用已安装的 Netsh.exe 工具。在Windows/System32目录下。运行此工具需要命令窗口切换到相应工具解压缩目录下,我直接放置到D盘根目录。方便查找。
(1)在 Windows Server 2003 或 Windows XP 中,通过 query 和 ssl 开关使用 HttpCfg.exe 工具查看当前端口配置,在命令窗口切换到HttpCfg在文件目录,你如下面代码:
httpcfg query ssl
(2)Vista:
netsh http show sslcert
查询SSL端口证书设置信息,如图:
【2.2】设置SSL证书:
(1)在 Windows Server 2003 或 Windows XP:
httpcfg set ssl -i 0.0.0.0:9001-h 9174185b2860b6d5ec3de133d5fcc4e1419b09e5
(2)Vista:
netsh http add sslcert ipport=0.0.0.0:9001 certhash=9174185b2860b6d5ec3de133d5fcc4e1419b09e5
appid={11111111-2222-3333-4444-qqqqqqqqqqqqq} 。最后一个GUID.你可以随便编写一个。使用工具也可以。certhash 参数指定证书的指纹。ipport 参数指定 IP 地址和端口,功能类似于前述 Httpcfg.exe 工具的 -i 开关。appid 参数为可用于标识所属应用程序的 GUID。
【2.3】删除SSL证书:
(1)Windows Server 2003 和 Windows XP 中:
httpcfg delete ssl -i 0.0.0.0:9001-h 9174185b2860b6d5ec3de133d5fcc4e1419b09e5
(2)Vista:
Netsh http delete sslcert ipport=0.0.0.0:9001。
【3】服务端配置:
SSL端口证书配置完成以后,我们来配置服务端相关的文件,首先要实现自定义身份验证的代码。我们就要对WCF服务端进行配置,直接使用配置文件,这里简单。也可以使用代码来完成。
(1)服务验证代码:
证书制作完整以后,就需要来实现自定义用户名和密码的验证程序。这里要重写MyUserNamePasswordValidator类的Val