को अनदेखा कर रहा है। मैं अपनी परियोजना के लिए डब्ल्यूसीएफ सुरक्षा काम करने की कोशिश कर रहा हूं, और मुझे बहुत कम भाग्य मिला है। मैं एक ऐसी सेवा बनाने की कोशिश कर रहा हूं जो बाध्यकारी के रूप में net.tcp का उपयोग करता है, और संदेश और परिवहन दोनों सुरक्षा करता है। उपयोगकर्ता नाम और पासवर्ड का उपयोग करके संदेश सुरक्षा की जाती है और सर्टिफिकेट का उपयोग करके परिवहन सुरक्षा (माना जाता है!) किया जाता है।सर्टिफिकेट का उपयोग कर डब्ल्यूसीएफ ट्रांसपोर्ट सिक्योरिटी चेन ट्रस्ट
मेरे विकास परीक्षण के लिए, मैंने अपना प्रमाण पत्र प्राधिकरण बनाया और इस प्रमाणपत्र को अपने कंप्यूटर के विश्वसनीय स्टोर (LocalMachine) में रखा। इसके बाद मैंने दो प्रमाण पत्र बनाए, प्रत्येक मेरे प्रमाण पत्र प्राधिकरण द्वारा हस्ताक्षरित, एक सेवा के लिए एक, और क्लाइंट ऐप का उपयोग करने के लिए एक। मैंने इन दोनों को निजी स्टोर (माई) में स्थानीयमाचिन में रखा है। फिर, परीक्षण के लिए मैंने एक यादृच्छिक प्रमाणपत्र बनाया जो मेरे प्रमाणपत्र प्राधिकरण द्वारा हस्ताक्षरित नहीं किया गया था (और इसलिए अविश्वसनीय है) और इसे स्थानीय स्टोर में लोकलमाचिन में रखा गया है। मैंने इन प्रमाणपत्रों को बनाने के लिए मेकर्ट का इस्तेमाल किया।
तब मैंने क्लाइंट ऐप को कॉन्फ़िगर किया जो अमान्य अविश्वसनीय प्रमाणपत्र का उपयोग अपने क्लाइंट प्रमाणपत्र के रूप में करने के लिए सेवा से कनेक्ट करता है। सेवा चेन ट्रस्ट का उपयोग कर क्लाइंट प्रमाणपत्रों की जांच करने के लिए (माना जाता है) सेट है। हालांकि, यह ग्राहक कनेक्ट करने और सेवा से सफलतापूर्वक बात करने में सक्षम है! इसे खारिज किया जाना चाहिए, क्योंकि इसका प्रमाणपत्र अविश्वसनीय है!
मुझे नहीं पता कि यह व्यवहार क्या कर रहा है, इसलिए मैं आपको यह देखने के लिए समस्या देता हूं कि आप इसे क्या बनाते हैं। यहाँ मेरी WCF विन्यास हैं:
सेवा conf:
<system.serviceModel>
<services>
<service behaviorConfiguration="DHTestBehaviour" name="DigitallyCreated.DHTest.Business.DHTestBusinessService">
<endpoint address="" binding="netTcpBinding" contract="DigitallyCreated.DHTest.Business.IDHTestBusinessService" bindingConfiguration="DHTestNetTcpBinding" bindingNamespace="http://www.digitallycreated.net/DHTest/v1" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8090/"/>
<add baseAddress="http://localhost:8091/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DHTestBehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="DHTestMembershipProvider"/>
<serviceCertificate storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectDistinguishedName" findValue="CN=business.dhtestDHTest.com" />
<clientCertificate>
<authentication certificateValidationMode="ChainTrust" trustedStoreLocation="LocalMachine" revocationMode="NoCheck" />
</clientCertificate>
</serviceCredentials>
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="DHTestRoleProvider" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<netTcpBinding>
<binding name="DHTestNetTcpBinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
<transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign"/>
</security>
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
ग्राहक सम्मेलन:
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="NetTcpBinding_IDHTestBusinessService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10" maxBufferPoolSize="524288"
maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" protectionLevel="EncryptAndSign" />
<message clientCredentialType="UserName" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="DHTestBusinessServiceEndpointConf">
<clientCredentials>
<clientCertificate storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectDistinguishedName" findValue="CN=invalid"/>
<serviceCertificate>
<authentication revocationMode="NoCheck" trustedStoreLocation="LocalMachine"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="net.tcp://phoenix-iv:8090/" binding="netTcpBinding"
behaviorConfiguration="DHTestBusinessServiceEndpointConf"
bindingConfiguration="NetTcpBinding_IDHTestBusinessService"
contract="DHTest.NetTcp.Business.IDHTestBusinessService"
name="NetTcpBinding_IDHTestBusinessService">
<identity>
<dns value="business.dhtest.com" />
</identity>
</endpoint>
</client>
</system.serviceModel>
ग्राहक उपयोगकर्ता नाम/पासवर्ड प्राधिकरण कोड:
DHTestBusinessServiceClient client = new DHTestBusinessServiceClient();
client.ClientCredentials.UserName.UserName = "ratfink";
client.ClientCredentials.UserName.Password = "testpassword";
धन्यवाद y अग्रिम में आपकी मदद के लिए कहां।
संपादित करें (2009/06/01):
मेरे दोस्तों में से एक ने मुझे a blog कि ऐसा क्यों हो रहा है के रूप में सवाल का जवाब की ओर इशारा किया। जाहिर है, जब आप TransportWithMessageCredential निर्दिष्ट करते हैं तो इसका अर्थ है बिल्कुल कि: संदेश प्रमाण पत्र केवल के साथ परिवहन। यही कारण है कि मेरे प्रमाण पत्र परिवहन स्तर पर नजरअंदाज कर रहे हैं।
हालांकि, मैं इस मुद्दे को पूर्ण और बंद नहीं मानता, क्योंकि मैं अभी भी ऐसा करना चाहता हूं। :) मैं कस्टम प्रमाणपत्र सत्यापनकर्ताओं को देखने जा रहा हूं जो मुझे लगता है कि मैं प्लग इन कर सकता हूं और देख सकता हूं कि यह काम करता है या नहीं। मैं परिणामों के साथ आप सभी को वापस मिल जाएगा।
संपादित करें (2009/06/08):
नहीं, कस्टम प्रमाणपत्र प्रमाणकों या तो काम नहीं करते। डब्ल्यूसीएफ बस उन्हें फोन नहीं करता है।
+1 मैं जानता हूँ कि यह पुरानी लेकिन अच्छी तरह से किया है, यह मेरे समाधान की तुलना में बेहतर लग रहा है (या मैं इसे हैक बुलाना चाहिए) यहाँ: http://stackoverflow.com/questions/9111361/wcf-service-with-wshttpbinding-manipulating-http-request-headers –