如何创建证书:
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=JiangServer -sky exchange -pe (服务端证书)
makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=JiangClient -sky exchange -pe (客户端证书)
makecert-sr localmachine -ss My -n CN=wcf服务端机器名 -sky exchange -pe –r
各种参数的介绍
属性解析
-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
证书可导出
详细说明:见msdn。
证书创建成功后!—
这样就基本简单的x509验证方式已经配置好了,发布到IIS中。运行如下:
----------------------------------------------------------------------------------------------------------- 运行后报错---------------------------
“/”应用程序中的服务器错误。--------------------------------------------------------------------------------密钥集不存在。说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Security.Cryptography.CryptographicException: 密钥集不存在。源错误: 执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪: [CryptographicException: 密钥集不存在。] System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) +450 System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) +158 System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() +231 System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() +537 System.ServiceModel.Security.SecurityUtils.EnsureCertificateCanDoKeyExchange(X509Certificate2 certificate) +78[ArgumentException: 可能证书“CN=GAServer1”没有能够进行密钥交换的私钥,或者进程可能没有访问私钥的权限。有关详细信息,请参见内部异常。]
分析错误提示,应该是没有权限呀,我们打开”MMC” 打到我的们 My --证书中的 JiangServer 设置权限。
添加Everyone --读取
再次运行wcf,成功了!
现在服务端已经 Deployment!再创建客户端,引用wcf服务。引用wcf服务成功后,我要再次要Deployment “App.config”文件,添加验证信息。
启动客户端,调用成功!
注意:如果调用wcf失败,几个错误信息
1> : 无法使用以下搜索标准找到 X.509 证书: StoreName“My”、StoreLocation“LocalMachine”、FindType“FindBySubjectName”、FindValue“JiangClient1”。
解决办法:导入证书(JiangClient1)或创建此证书,注意报的错误信息中的证书所储存位置
2 > : 未提供客户端证书。请在 ClientCredential 中指定一个客户端证书。
解决办法: 因为服务端使用了证书验证,所以要在客户端配置证书。
再次调用成功!以上就是我在设置X509证书时出现在问题。
再次用HttpAnalyzerStdV5查看是否已经加密。如下,已经加密了