In closing, we leave you with a checklist to consider when implementing Java-based Web services:
Implement trust relationships wherever possible. Both the client and server portions of a Web service should be accountable to each other.
Prefer the use of secure transports wherever possible. SSL or similar protocols can help prevent transaction snooping and are one step toward better security for your application. Client-side certificates with SSL provide encryption and additional security features over the wire, because each side certifies the keys used to encrypt the message.
Develop secure components. One of the major techniques attackers use is buffer overflow. Make sure your component can handle a message correctly, even when the data is in an unrecognized format, and return an error response to the caller. A user of your Web service who realizes it is secure will most likely move to a new target.
Consider your encryption, digital signature, and nonrepudiation requirements and take the appropriate steps early to select the right algorithms and approaches that will keep messages secure.
Use appropriate configuration management practices. There are many great books on this topic. Learn from them and incorporate them into your application lifecycle. Managing configuration information becomes important if your Web service is registered with a public UDDI repository. Make sure appropriate steps have been taken to prevent attackers from changing the public data for your service, because this could also compromise the integrity of other services that rely on it. It could result in lost revenue if an attacker decides to raise your price, so that a competitor looks better. Also, make sure that only services you intend to be publicly accessible are configured in the repository.
Use Web service proxy capabilities in your firewall. If you are using a robust, corporate-grade firewall, from vendors such as Cisco or Checkpoint, consider also using HTTP proxies with XML parsing capabilities. A proxy with parsing capability can validate each request to your Web service and drop messages that do not conform to the published Web services description.
Conduct a business exercise on your service availability requirements and let the findings drive your architecture.
Figure out whether you will charge for your service offerings in advance and establish the appropriate enabling services.