<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5308519492620460793</id><updated>2011-12-31T00:37:11.566-08:00</updated><category term='jboss world'/><category term='ovf soa virtualization software appliance virtual appliance intel soa expressway'/><category term='ibm datapower ssl vulnerability'/><category term='ssl renegotiation'/><category term='client authentication'/><category term='xml gateway'/><category term='microsoft teched'/><category term='separation of concerns'/><category term='ssl tls vulnerability'/><category term='ssl handshake'/><category term='threat prevention'/><category term='service gateway'/><category term='marsh ray'/><category term='security model'/><title type='text'>Truth in SOA</title><subtitle type='html'>"Cut the hype, will you?" - This blog is dedicated to a critical examination of SOA from a real-word perspective</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Blake Dournaee</name><uri>http://www.blogger.com/profile/11796210780072721843</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_PVnFLGUy17Q/TGSbJyb1BjI/AAAAAAAAAAU/W9udy7GgqEw/S220/head-shot-blake.PNG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-1953593125760203772</id><published>2010-07-08T12:08:00.000-07:00</published><updated>2010-07-08T12:55:37.737-07:00</updated><title type='text'>Oops... Missed One: From XML Gateways to Service Gateways</title><content type='html'>I recently noticed this &lt;a href="http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci1445628,00.html?asrc=SS_CLA_298902&amp;amp;psrc=CLT_26"&gt;great article&lt;/a&gt; on XML appliances published in March 2010. The thing is, I didn't see any mention of &lt;a href="http://www.dynamicperimeter.com/"&gt;Intel(R) SOA Expressway&lt;/a&gt;, which is the modern incarnation of the hardware XML gateway brought to market by Sarvega as early as 2000. At Intel, we call this product a &lt;i&gt;service gateway&lt;/i&gt;, which can be thought of as a higher-performing, more flexible gateway that more closely matches current performance, extensibility, and data-center trends compared to its earlier hardware only cousins.&lt;br /&gt;&lt;br /&gt;I think the author did a great job of mentioning some of the salient points regarding XML gateways, such as the need to push policy enforcement to the edge to simplify coded-in security (decoupling) and the need to provide XML acceleration for complex XML tasks such as transformation, validation, and XML security. He also alluded to some current limitations found in the IBM DataPower appliances:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;But as powerful as IBM's XML appliance is, there is always room for  improvement. One area where Iocola said the devices have trouble is  handling large messages. To remain efficient, he said, the appliances  need to offload messages approaching 2 GB to other components.&lt;/i&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;I also like the author's distinction between an ESB and an XML gateway, as this is often a point of confusion. Specifically, the author mentions that a gateway "doesn't host services", and this is true for traditional gateways such as IBM DataPower, but it doesn't have to be the case with a service gateway like Intel(R) SOA Expressway. I would also add that a big distinction between an ESB and gateway is that the ESB doesn't provide edge security protection or high-performance XML processing. For instance, ESBs typically don't have denial of service protection, content scanning, or message throttling. These tasks are more closely aligned with an edge security product such as an XML gateway.&lt;br /&gt;&lt;br /&gt;So, what is the difference between a traditional XML gateway and a service gateway? Let's summarize a few points as follows:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It &lt;i&gt;must&lt;/i&gt; support a high performance virtual form factor. This means that performance of the XML gateway cannot require any customized hardware, such as special XML boards or chips.&lt;/li&gt;&lt;li&gt;It &lt;i&gt;must&lt;/i&gt; be extensible for new business logic and security processing. Enterprises cannot wait for hardware refresh for the vendor to add custom processing&lt;/li&gt;&lt;li&gt;It &lt;i&gt;must&lt;/i&gt; support all styles of &lt;i&gt;services&lt;/i&gt;, whether based on REST, SOAP or even custom proprietary services based on custom protocols.&lt;/li&gt;&lt;li&gt;It &lt;i&gt;must&lt;/i&gt; scale XML processing on cheap commodity hardware. In this case, Intel(R) Multi-Core servers come to mind but AMD is also an option&lt;/li&gt;&lt;li&gt; It &lt;i&gt;must&lt;/i&gt; not require any specialized coding knowledge, such as deep XSL knowledge, extension functions or an army of developers. After all, if it did you would just invest in writing more code&lt;/li&gt;&lt;li&gt;It &lt;i&gt;must&lt;/i&gt; support non-XML data. While we can all hope that all companies will move their data-sets to 100% XML, it's just not a reality we can count on.&lt;/li&gt;&lt;li&gt;It &lt;i&gt;must&lt;/i&gt; support a wide ecosystem of middleware and security vendors for interoperability and integration allowing for a best-of-breed application.&lt;/li&gt;&lt;li&gt;It &lt;i&gt;must&lt;/i&gt; offer a physically secure form factor running on a well-known operating system with audit able patch levels rather than a custom appliance O/S subject to security by obscurity &lt;/li&gt;&lt;/ul&gt;Another way to think about a service gateway is that the product category is trying to bring more value to the security architect and developer in the data-center. If you are currently using an XML gateway and notice that many of these requirements aren't being met, maybe it's time to look at a service gateway such as &lt;a href="http://www.intel.com/software/soae"&gt;Intel(R) SOA Expressway?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-1953593125760203772?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/1953593125760203772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=1953593125760203772' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1953593125760203772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1953593125760203772'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2010/07/oops-missed-one-from-xml-gateways-to.html' title='Oops... Missed One: From XML Gateways to Service Gateways'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-7995958321440908977</id><published>2010-06-25T10:46:00.000-07:00</published><updated>2010-06-25T10:50:25.799-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='service gateway'/><category scheme='http://www.blogger.com/atom/ns#' term='xml gateway'/><category scheme='http://www.blogger.com/atom/ns#' term='threat prevention'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft teched'/><category scheme='http://www.blogger.com/atom/ns#' term='separation of concerns'/><category scheme='http://www.blogger.com/atom/ns#' term='security model'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss world'/><title type='text'>Separation of Concerns: Why Service Gateways are even better than they appear</title><content type='html'>I've spent the last two weeks traveling around to two interesting conferences. One was Microsoft TechEd, where I gave an interactive session on &lt;a href="http://www.dynamicperimeter.com/"&gt;Intel(R) SOA Expressway&lt;/a&gt; and the other was JBoss World, where I got a chance to expose the product to a number of JBoss developers and system administrators.&lt;br /&gt;&lt;br /&gt;At each of these conferences, I expected to see more of a homogeneous crowd. That is, one would expect a mostly .NET crowd at the Microsoft conference and mostly an open-source or Java crowd at the JBoss conference, and while this is generally the case, developers and architects seem to have grown a much higher tolerance for alternative languages and technology stacks. Issues of “religion” toward a single vendor or technology appear to be fading somewhat. I think this is partly due to the amount of inorganic growth that companies are experiencing, mostly from buying up other companies and having to integrate their middleware stacks.&lt;br /&gt;&lt;br /&gt;In these inorganic growth scenarios we have a security architect or developer faced with multiple applications written with products from many different vendors. Most of the time this is a security nightmare scenario: You may have a development team well-versed in coding in security for one language, say Java, and now have to replicate that effort on a completely different middleware stack, say C# or PHP. Worse, as inorganic growth continues, it’s like rolling the “middleware dice” to find out what new technology stack will appear on the scene. In this scenario, you can only scale the security of your application as fast as you can train your security architect to be adept in the “in’s and “out’s” of the particularities of each vendor product – and this is not a risk adverse strategy for any company.&lt;br /&gt;&lt;br /&gt;If we step back and look at the problem, the XML gateway such as Intel® SOA Expressway offers an elegant solution. It is the only conceptual model whose success turns on simplifying the security infrastructure by removing coded-in security. What? Yes, that is correct. To use the proxy model for security successfully you have do one thing: turn off the security processing in your middleware stack and force your developers to become application developers and not security architects. &lt;br /&gt;&lt;br /&gt;Does this sound backwards? Coded in security is hard to manage, maintain, monitor, audit and change. You are tightly coupled to the subject-matter expert that wrote the code and that person may have left the team after the “inorganic growth” event that caused you to have to deal with this new application. Do you want to find out which version of WS-Security you are really using? Check the code. Want to find out if you are processing X.509 certificates with CRL processing turned on? Check the code. Are we accepting signed requests? Check the code. Are we protecting against SQL injection attacks or performing type validation on the inputs to the application? Check the code…&lt;br /&gt;&lt;br /&gt;As you can see, this strategy is painful, increases the complexity of the overall system, and makes security a hard problem. The truth is, the proxy model for web services, SOA and XML processing has been around now for about 10 years and its value has increased as companies have multiplied the complexity of their applications. The basic idea is to centralize generic policy enforcement in a single place, for both threat protection and trust enablement. The model works beautifully – developers write pure services, devoid of any security logic, and a single policy is pushed to the gateway where it can be easily maintained, monitored, audited and changed using configuration, not coding. This means that in practice, there is a trust relation between each of the services and the gateway and the one-time effort on the back-end applications or services is to go through the code once and remove security checks. Your developers can be free again to focus on business logic and the security architect can focus their attention on the gateway itself.&lt;br /&gt;&lt;br /&gt;Here is a picture of the conceptual architecture:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_SJ6nC6z2T4U/TCTqTYi6A9I/AAAAAAAABVg/n8vHLO_FIvo/s1600/gateway-model.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" ru="true" src="http://2.bp.blogspot.com/_SJ6nC6z2T4U/TCTqTYi6A9I/AAAAAAAABVg/n8vHLO_FIvo/s400/gateway-model.PNG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here we have the gateway acting as a policy enforcement point. The key idea here is that all security processing can be centralized. Threats are stopped at the edge, trust is maintained through a combination of message level security (encryption and digital signatures), session security (such as SSL), and authentication, authorization and auditing, which is done by calling out to existing identity management investments, such as CA Siteminder, Oracle Access Manager, IBM Tivoli Access Manager, LDAP, Active Directory, ADFSv2 and others. Once a trust relationship is established between the service endpoints and the gateway, the &lt;i&gt;services themselves&lt;/i&gt; can be as pure as possible - devoid of security processing other than identity context, which can be provided by the gateway. Developers can finally be free of having to worry about security.&lt;br /&gt;&lt;br /&gt;For those of us who have been in this space for awhile, this picture may elicit an obvious "so what" response, but I think it is a very powerful model for security. In fact, enterprises can approach this model without an actual gateway if they can manage to centralize security processing for a class of services. The real beauty of a model like this is that it specifically &lt;i&gt;requires&lt;/i&gt; the simplification of coded-in security. How many other security models can make this claim?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-7995958321440908977?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/7995958321440908977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=7995958321440908977' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/7995958321440908977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/7995958321440908977'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2010/06/separation-of-concerns-why-service.html' title='Separation of Concerns: Why Service Gateways are even better than they appear'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_SJ6nC6z2T4U/TCTqTYi6A9I/AAAAAAAABVg/n8vHLO_FIvo/s72-c/gateway-model.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-2425846646692635821</id><published>2010-05-13T17:04:00.000-07:00</published><updated>2010-05-13T17:04:27.362-07:00</updated><title type='text'>Active Directory Federation Services v2.0 - A Good Start</title><content type='html'>It looks like Microsoft &lt;a href="http://redmondmag.com/articles/2010/05/06/microsoft-releases-adfs-2-0.aspx"&gt;has released&lt;/a&gt; their long-awaited Active Directory Federation Services v2.0 ('ADFS v2.0') component for Active Directory.&lt;br /&gt;&lt;br /&gt;Simultaneously with this release, Microsoft is pushing the concept of "claims based identity" as the new thought "superstructure" that according to Microsoft, is a seminal event in the history of thought for identity management. &lt;br /&gt;&lt;br /&gt;Here is my favorite quote from Microsoft's book "A Guide to Claims-based identity management".&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"The claims-based model embraces and subsumes the capabilities&lt;br /&gt;of all the systems that have existed to date, but it also allows&lt;br /&gt;many new things to be accomplished."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I must say &lt;b&gt;this&lt;/b&gt; is quite a claim.&lt;br /&gt;&lt;br /&gt;Let's step back and take a look at what ADFSv2 is actually doing on the wire, which is where the truth ultimately lies.&lt;br /&gt;&lt;br /&gt;The model proposed by Microsoft equivalent to the assertion model of identity. In all cases, whether it is a web service, web site or SaaS application, the user authenticates himself or herself to ADFSv2 &lt;strong&gt;for a specific application&lt;/strong&gt; and then receives a SAML assertion &lt;strong&gt;for that specific application&lt;/strong&gt; which they then take to the target application in a browser or "smart client" (web service).&lt;br /&gt;&lt;br /&gt;Microsoft is trying to elevate it's technology to greater philosophical importance by using the word "claim" in place of "attribute" or "role" or "property" of a user. This makes for some good marketing, but the SAML assertion that comes from ADFSv2 will have very specific attributes in it targeted for very specific target application. This is an important point because it means you can't simply take the SAML assertion and "federate it" anywhere as it will have "claims" (e.g. attributes) designed for a specific application, some of which might be quite sensitive.&lt;br /&gt;&lt;br /&gt;For instance, a claim for an expense reporting application might have an employee's cost center as an attribute in the SAML assertion. This is great for federating the assertion to the expense reporting application, but not so great when federating the assertion to other applications, such as a partner website.&lt;br /&gt;&lt;br /&gt;I looked around for a sample SAML assertion generated by ADFSv2 with some sample claims to dig in to the details, but they are hard to come by. I wonder why...&lt;br /&gt;&lt;br /&gt;Notwithstanding my criticism, the model is a good one because moves the authentication and authorization logic further away from applications and into a centralized, trusted assertion. This is a step in the right direction and follows the trend of &lt;i&gt;security decoupling&lt;/i&gt; that has proven to be useful for other technologies such as SSL and web services security in the past.&lt;br /&gt;&lt;br /&gt;To conclude this post, I am leaving two unanswered thought provoking questions:&lt;br /&gt;&lt;br /&gt;#1: What is the difference between a claim and an attribute? (Credit for the seed of this idea goes to Dr. Babak Sadighi of Axiomatics during a conversation we had at the &lt;a href="http://www.id-conf.com/sessions/721"&gt;recent&lt;/a&gt; Kuppinger show)&lt;br /&gt;&lt;br /&gt;#2: Is there a need for "claims filtering/protection" - e.g. on-the-wire gateway functionality that can obfuscate, encrypt or delete sensitive claims in ADFSv2 issued SAML assertions when these assertions leave the Enterprise perimeter?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-2425846646692635821?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/2425846646692635821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=2425846646692635821' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/2425846646692635821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/2425846646692635821'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2010/05/active-directory-federation-services.html' title='Active Directory Federation Services v2.0 - A Good Start'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-4575372873177543657</id><published>2010-05-05T09:11:00.000-07:00</published><updated>2010-05-05T09:11:12.095-07:00</updated><title type='text'>Truth Denied?</title><content type='html'>A colleague forwarded me &lt;a href="http://www.lustratusrepama.com/competitive/new-report-from-lustratus-research-a-competitive-review-of-soa-devices/"&gt;this link&lt;/a&gt; from Lustratus Research. Incredibly, the analyst makes the following claim:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;"I say “appliances” in inverted commas because Intel’s product is wonderfully described as a software “appliance”. Surely the award for the most spin in a product category goes to Intel."&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;I was a bit taken aback by this. I hope the analyst was being provocative on purpose. I wrote the following reply (which was subsequently deleted), as a clarification:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Hello There – It seems that this is a very provocative report, especially with respect to the statements made regarding the Intel product. &lt;br /&gt;First, off I have to say that I am from Intel, so as you must, please take my comment with a grain of salt.&lt;br /&gt;&lt;br /&gt;I hope, however, that the analyst does not confuse and equivocate a nuanced product available in multiple form factors for different usage models with “marketing spin.” The facts speak differently in this case.&lt;br /&gt;&lt;br /&gt;In fact, the Intel(R) SOA Expressway product (like some of its competitors) is available in three form factors (hardware, software and virtual image) – each of which can be properly called an appliance. &lt;br /&gt;&lt;br /&gt;“Appliance” here does not necessarily reflect a strict category of hardware only, but instead set of management and monitoring capabilities such as a real-time dashboard, self-healing capabilities, alarms, alerts, management clustering, and high availability with a familiar web-based interface and easy management. &lt;br /&gt;&lt;br /&gt;It is these capabilities that primarily characterize a software appliance. In this case we can think of a hardware appliance and then subtract out the physical security features. It is only natural that we can take this same form factor and package it for a virtual machine and we will arrive a similar form factor designed for a virtual private cloud. Incidentally, this is something especially difficult for a product only available as a pure hardware appliance.&lt;br /&gt;&lt;br /&gt;Finally, because the Intel product relies primarily on a software layer that performs machine language processing of XML, the addition of hardware adds only physical security prowess, and is not a necessary form factor for a high performance deployment. All in all, the product is truly available in all three form factors – no spin required. Perhaps some of these facts can “spin” the customer closer to the truth about this particular product.&lt;br /&gt;&lt;br /&gt;Blake Dournaee"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Is truth denied? I just wanted to make sure that our customers know that our appliance form factors (software, hardware and vm) are not elements of spin!&lt;br /&gt;&lt;br /&gt;Blake&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-4575372873177543657?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/4575372873177543657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=4575372873177543657' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/4575372873177543657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/4575372873177543657'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2010/05/truth-denied.html' title='Truth Denied?'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-1685183308341543566</id><published>2009-12-04T11:43:00.001-08:00</published><updated>2010-01-12T17:13:37.132-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssl renegotiation'/><category scheme='http://www.blogger.com/atom/ns#' term='ssl tls vulnerability'/><category scheme='http://www.blogger.com/atom/ns#' term='ssl handshake'/><category scheme='http://www.blogger.com/atom/ns#' term='marsh ray'/><category scheme='http://www.blogger.com/atom/ns#' term='client authentication'/><title type='text'>Really Understanding the SSL/TLS Vulnerability (Part 1)</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;em&gt;This is a two part blog post. In the first part I will try to explain the vulnerability so we can get a better handle on it, and in the second part we'll examine possible countermeasures and mitigation strategies.&lt;/em&gt;&lt;span style='font-size:12pt'&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;There was some big news in the security world on November 4, 2009 when Marsh Ray released details about a newly published SSL/TLS vulnerability. Of course, selling security is all about creating Fear, Uncertainty and Doubt (FUD) and as such a number of websites and blogs also picked up the story. Most notably:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href='http://extendedsubset.com/?p=8'&gt;&lt;span style='font-family:Trebuchet MS'&gt;Renegotiating TLS&lt;/span&gt;&lt;/a&gt;&lt;span style='font-family:Trebuchet MS'&gt;, Marsh Ray's original research on the subject&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.h-online.com/open/news/item/Vulnerability-in-SSL-TLS-protocol-851478.html'&gt;&lt;span style='font-family:Trebuchet MS'&gt;Vulnerability in SSL/TLS protocol&lt;/span&gt;&lt;/a&gt;&lt;span style='font-family:Trebuchet MS'&gt; (from &lt;a href='http://www.h-online.com/'&gt;www.h-online.com&lt;/a&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.links.org/?p=780'&gt;&lt;span style='font-family:Trebuchet MS'&gt;Another Protocol Bites the Dust&lt;/span&gt;&lt;/a&gt;&lt;span style='font-family:Trebuchet MS'&gt;, by Ben Laurie of Google &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.ietf.org/mail-archive/web/tls/current/msg03928.html'&gt;&lt;span style='font-family:Trebuchet MS'&gt;MITM attack on delayed TLS-client auth through renegotiation&lt;/span&gt;&lt;/a&gt;&lt;span style='font-family:Trebuchet MS'&gt;, from Martin Rex of SAP&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.phonefactor.com/sslgap/'&gt;&lt;span style='font-family:Trebuchet MS'&gt;SSL/TLS Authentication Gap (SSL Gap)&lt;/span&gt;&lt;/a&gt;&lt;span style='font-family:Trebuchet MS'&gt;, from Phonefactor.com&lt;span style='color:blue'&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href='http://www.linuxtoday.com/news_story.php3?ltsn=2009-11-06-008-35-NW-DV-NT'&gt;&lt;span style='font-family:Trebuchet MS'&gt;Vulnerability in SSL/TLS protocol&lt;/span&gt;&lt;/a&gt;&lt;span style='font-family:Trebuchet MS'&gt;, from Linux Today&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;The real question is whether you should be worried or not. I think that in order to answer this question we need to really dig into the details of how the attack works and then analyze the risk and potential mitigation factors from there. This particular attack is called a chosen plaintext attack. A successful attack will allow the attacker to do two things:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='margin-left: 36pt'&gt;&lt;span style='font-family:Trebuchet MS'&gt;(1)&lt;span style='font-size:7pt'&gt;   &lt;/span&gt;Execute a chosen HTTP transaction on the server. This could be any HTTP request that eventually does something important on the server side. For instance, a bank account transfer comes to mind as well as single message transactions such data insertion, but it could be &lt;em&gt;any&lt;/em&gt; server-side action triggered by a specifically chosen HTTP request.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style='margin-left: 36pt'&gt;&lt;span style='font-family:Trebuchet MS'&gt;(2)&lt;span style='font-size:7pt'&gt;   &lt;/span&gt;Gain information regarding the shared symmetric key used in an SSL session. (for a limited time). If the attacker knows a specific HTTP transaction produces a given plaintext, or plaintext sequence, he or she might be able to &lt;em&gt;choose&lt;/em&gt; which plaintext blocks to encrypt and obtain the matching results. This may yield some information about the key. In this case, the attacker might accumulate many examples of the plaintext and matching cipher-text. As we will see, a sophisticated &lt;br /&gt;attacker acting as a man-in-the-middle (MITM) will be able to inject plaintext and then have access to the corresponding ciphertext, and if he or she knows any information about the generated response, there may be a stretch of time (before the next renegotiation) where a chosen-plaintext attack is feasible.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;In order to understand how this man in the middle attack (MITM) works, we have to first understand what happens inside an SSL handshake. SSL works in two broad phases: First, the handshake phase, and second, the application data phase. The handshake phase is where the shared, symmetric key is computed which is subsequently used in the application data phase of the protocol to encrypt application data traffic. The goal of SSL is to provide secure socket communication between two endpoints. In this respect, SSL is really a layer 4 protocol as it is communicating over standard sockets. I think we take SSL for granted due to its ubiquity, but the handshake is actually performing a cryptographic feat:  a shared symmetric key is securely generated between two parties that have never met before.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;The protocol itself requires no initial shared secret information, only a set of trusted certificate-authority (CA) certificates on the client side (at a minimum). We also take these for granted because the certificate-authority vendors have placed "trusted" CA certificates in our browsers. As an exercise you can check your browser to see who you implicitly trust. In Firexfox 3.5.x this is under Tools &amp;gt; Options &amp;gt; Advanced &amp;gt; Encryption tab &amp;gt; View Certificates. In the latest Firefox I count 70 CA certificates (roughly).  Moreover, the protocol supports &lt;em&gt;client authentication &lt;/em&gt;as well, which requires CA certificates be provisioned on the server similar to what we see in the browser.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;Certificates are important in two respects for SSL. First and foremost they contain the public key used by the client to encrypt the pre-master secret during the handshake, and second, they are used to validate one or both sides of the communication using X.509 certificate path validation. Certificate path validation is the process of validating the trust on a certificate by checking that you trust the issuer of the certificate. This is done by looking at the issuer's issuer and so on, up the chain until you reach an implicitly trust CA certificate, called a root CA. &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;The limitation that Marsh Ray uncovered has to do with renegotiation of the shared secret, which I will call the renegotiation gap. SSL allows for either side to renegotiate the master secret at any time by sending an appropriate message, either from the client or server. Renegotiation can be done for any number of reasons – to refresh the shared secret, to change the cipher, or to change the mode of the protocol to a different form. It can also be done for no good specific reason, simply by having the client send a new client hello. Usually, however, renegotiation is a move from one-way SSL (server authentication) to two-way SSL (client authentication).&lt;/span&gt;&lt;span style='font-family:Trebuchet MS'&gt;The first thing we will do in order to understand the renegotiation gap is dig into the handshake.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style='font-family:Trebuchet MS'&gt;The SSL Handshake&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;To see the problem, you have to put yourself in the mind of the attacker and treat the handshake like an information game with state changes along the way. The goal of the game depends on the mode of the protocol, and for SSL this will either be a shared secret with server-side authentication, or a shared secret with both client and server authentication. In the case of server side authentication, the end goal is to generate a shared secret key where the &lt;em&gt;client &lt;/em&gt;knows the identity of the server based on the limitations of PKI technology (certificate validation). In the case of client authentication, the goal of the game is to generate a shared secret where both sides know the identity of each other, again based on the limitations of PKI technology. Once you understand the additional information state at each stage of the handshake, it becomes trivial to see how a man-in-the-middle attack can work, and further, how the renegotiation gap changes the rules of the game.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;First, let's lay out the handshake in 13 possible steps as follows. The table below is meant to be read from left to right and the "&amp;gt;" arrow denotes a message flowing from the client to the server. Similarly, the "&amp;lt;" indicator denotes a message from the server to the client. Once the handshake is finished, the game is over with one of two "normal" outcomes: (1) A shared secret was generated and the server was authenticated or (2) The shared secret was generated and both sides were authenticated. A critical point here is that &lt;em&gt;a man in the middle of the SSL handshake changes the rules of the game and the information state. &lt;/em&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;In the table below note that "*" is used to denote optional messages in the SSL handshake, used in the case of client authentication. This implies that the shortest possible handshake (for server side authentication) is an exchange of 8 messages and the full handshake is 12 messages. It should be noted for completeness that the Server Key Exchange is only used when the certificate doesn't contain a public key, such as in the case of DSA. Also, for completeness, there is a mode for SSL called "anonymous Diffie-Hellman" which requires neither side authenticate, but we won't cover it since it is infrequently used.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Handshake Phase&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:57px'/&gt;&lt;col style='width:152px'/&gt;&lt;col style='width:167px'/&gt;&lt;col style='width:172px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt; &lt;span style='font-size:8pt'&gt;Step&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Server Message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Information State&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Hello &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; The first handshake message that contains the protocol version, random bytes, a session ID (or null), supported cipher-suites, and optional supported compression methods&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; The second message contains a selected cipher-suite, the highest mode of SSL supported by the server, session ID and compression methods&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Certificate&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; ASN.1 encoded certificate or certificate chain goes back to the client.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Key Exchange*&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; (Skipped for this discussion but included for completeness)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Certificate Request*&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Contains acceptable certificate types and list of acceptable CAs&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello Done&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Indicates the server is finished with its side of the handshake&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Certificate* &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; The client sends its certificate or certificate chain&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Key Exchange &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; The pre-master secret is encrypted for the server using the public key in the server's certificate&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;9&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Certificate Verify* &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Client-generated signature over the master  previous handshake messages&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;10&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Change Cipher Spec &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Signal message with version and a single byte&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;11&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Finished &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Two hashes of the handshake messages, master secret, identifier and padding&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;12&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Change Cipher Spec&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Signal message with a version and a single byte&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;13&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Finished&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Two hashes of the handshake messages, master secret, identifier and padding&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;  &lt;br /&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; There is no significant shared information state yet. The client has asked to start a new SSL session with some basic parameters. One important point here is that if the client wishes to resume a session, it must include the session ID.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; There is still no significant shared state – the server responds with a chosen cipher-suite, but the client still has not authenticated the server&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; The server sends its certificate or certificate chain to the client. It might be tempting to think that at this point the client can authenticate the server, but this is simply not the case. The reason why is because certificates are public by design, so thinking like an attacker here means that the server could (at this point) have &lt;em&gt;any&lt;/em&gt; X.509 certificate. The only thing that guarantees authentication in the PKI model is the existence of the private key, which the server doesn't actually prove until it sends its finished message in step 13. In other words, the client can perform certificate path validation on this certificate and achieve a valid result, but has no guarantee that the server owns the private key corresponding to this certificate. One possible (non-cryptographic) way of adding some measure of authentication here is to verify the hostname against any hostname declared in the certificate's common name, but this is a de-facto practice and not part of the actual protocol specification. It also doesn't work if the man in the middle is actively installed below layer 4 in the network infrastructure.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; We will skip for our purposes here as it pertains to certificates that do not contain a usable public key&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; The server optionally requests the client's certificate. This message contains the acceptable certificate types and Certificate Authority Certificates (CAs), which are trusted, root certificates.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 6&lt;/strong&gt;: The server indicates that it is finished with its side of the handshake. Even if the client verifies the server's certificate, it still does not have any guarantee that the server is who it says it is.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 7:&lt;/strong&gt; Even if we assume the client has sent its certificate, from an information state point of view, the server has no guarantee yet that the client is authenticated, even by validating the certificate. The reason is the same as in step 3 or 6 for the server; the client has not yet demonstrated proof of possession of the private key that matches the certificate.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 8:&lt;/strong&gt; The client generates a 48-byte pre-master secret.  This value is encrypted using the server's public key and sent to the server.  The pre-master secret is a two byte client protocol version and 46 bytes of random data.  The client version helps prevent version roll-back attacks. It should be emphasized that &lt;em&gt;until the server proves it can decrypt the secret there is no evidence that the server is authenticated&lt;/em&gt;. So even after step 8, the server has proven nothing to the client from a cryptographic standpoint.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 9&lt;/strong&gt;: The client finally generates proof of possession of the private key. It does this by digitally signing a hash of previous handshake messages. This further implies that in terms of the information game, in the case of two-way SSL, the server is the first to know the true identity of the client.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Steps 10 and 11:&lt;/strong&gt; The change cipher spec message is sent as a signal that we are about to begin the application data phase. Immediately following this the client sends its finished message, which contains two hashes (MD5 and SHA-1) of the master secret, handshake messages, string identifier and padding. From an information state perspective, the server is &lt;em&gt;still not authenticated&lt;/em&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Steps 11 and 12:&lt;/strong&gt; The server is finally forced to prove that it can decrypt the encrypted secret sent in step 8. Here the server must be able to compute a signature over the secret and the client must verify that this is the case.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;With this background, we can now insert the attacker into the flow to see how the attack works. It is easy to think of SSL as an "encrypted" channel safe from an intruder, but if there is a man in the middle actively intercepting packets from the inception of the protocol, he or she can exploit the renegotiation gap.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt; The Man-in-the Middle is actively waiting between the client and server under the following preconditions:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;The MITM is waiting from the inception of the handshake phase and assumes that the SSL protocol begins with server-side only authentication&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;The MITM waits for a client hello that he or she knows will trigger server-side authentication&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;The MITM goes through the full handshake with the server and because the server is not authenticating the client, the server does not know it is talking to a man-in-the-middle&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;Eventually, some trigger occurs that causes the server to ask for a client certificate. I will call this the renegotiation trigger message (RTM). This trigger can be a renegotiation of the SSL handshake, triggered by either the client or the server, for any reason. I received a blog comment regarding this point (thanks Steve) and one point made here is that the renegotiation may be triggered simply by sending a new client hello at any time. This is a critical point - the SSL specification allows for a client hello to be sent &lt;em&gt; at any time &lt;/em&gt; and doing so will trigger negotiation. This means that the RTM can just be a client hello with no change to the cipher-suite or strenght of the SSL/TLS session&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;The MITM is &lt;em&gt;not&lt;/em&gt; passing through each message as they flow, but collecting and saving up the messages he or she wants&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt; &lt;br /&gt;Let's look at how the man in the middle can intercept messages during the handshake. In the following table I've highlighted certain portions of the handshake important to making the attack to work.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt; &lt;strong&gt;Handshake Phase with Man-In-The-Middle (MITM)&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:64px'/&gt;&lt;col style='width:153px'/&gt;&lt;col style='width:168px'/&gt;&lt;col style='width:178px'/&gt;&lt;col style='width:179px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt; &lt;span style='font-size:8pt'&gt;Step&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Man in the Middle&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Server Message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  solid 1.0pt; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Information State&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px; background: yellow'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;1&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Hello &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Hello &amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;The server receives a client hello as normal; the MITM caches the initial client hello and starts a new session with the server, sending a new client hello &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;2&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;MITM caches the server hello without passing it on.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; The server responds with a server hello. The client is still waiting for this message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;3&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; MITM caches the server certificate.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Certificate&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; The client is still waiting for a server certificate&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;4&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Key Exchange *&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; (Skipped) – Does not affect this case&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;5&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Certificate Request *&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; (Skipped) – The MITM must start with a handshake that does not trigger a certificate request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;6&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello Done&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Server sends the server hello done. &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;7&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Certificate* &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;(Skipped) – The MITM has chosen a handshake with no client certificate request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;8&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Key Exchange &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;The pre-master secret is encrypted for the server using the public key in the server's certificate&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;9&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Certificate Verify* &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;(Skipped) – The MITM has chosen a handshake with no client certificate request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;10&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Change Cipher Spec &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Signal message with version and a single byte&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;11&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Finished &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Two hashes of the handshake messages, master secret, identifier and padding (MITM)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;12&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Change Cipher Spec&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Signal message with version and a single byte&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;13&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Finished&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Two hashes of the handshake messages, master secret, identifier and padding (Server)&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px; background: yellow'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt; background-color:yellow'&gt;14&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt; background-color:yellow'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt; background-color:yellow'&gt;&lt;strong&gt;Renegotiation Trigger Message (RTM)  &amp;gt; (This can be as simple as a new client hello)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt; background-color:yellow'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt; background-color:yellow'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;15&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Hello Request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;The server sends a hello request based on the trigger message (RTM), which starts a new handshake&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;17&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Replayed Client Hello from Step 1 &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px; background: yellow'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;18&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;The server responds with a certificate. This matches the response the client expects after Step 1.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;19&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Certificate&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Certificate&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;The server responds with its certificate which is passed on by the MITM&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;20&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Certificate Request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Certificate Request&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;The server requests the client certificate – the RTM in this case triggers a stronger form of SSL&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;21&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello Done&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Server Hello Done&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Server sends the server hello done which is passed through to the client&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px; background: yellow'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;23&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Certificate &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Client Certificate &amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; The client sends its certificate &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px; background: yellow'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;24&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Client Key Exchange &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Client Key Exchange &amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;MITM passes along the client key exchange containing encrypted the shared secret&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px; background: yellow'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;25&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Certificate Verify &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Certificate Verify &amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;MITM passes along the client's proof of possession message&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;26&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Change Cipher Spec &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Change Cipher Spec &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Signal message with version and a single byte&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;27&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;Finished &amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Finished &amp;gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; MITM passes along the finished message from the client&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;28&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &amp;lt; Change Cipher Spec&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Change Cipher Spec&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; Signal message with version and a single byte&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;29&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; &amp;lt; Finished&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&amp;lt; Finished&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt; MITM passes along the finished message from the server&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='height: 17px; background: yellow'&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  solid 1.0pt; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;30&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;br /&gt;&lt;p&gt;&lt;!-- &lt;span style='font-family:Trebuchet MS; font-size:8pt; backgroundcolor:red'&gt; &lt;/span&gt; --&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&lt;strong&gt;&amp;lt; HTTP Response&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;&lt;strong&gt;&amp;lt; HTTP Response &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 7px; padding-right: 7px; border-top:  none; border-left:  none; border-bottom:  solid 1.0pt; border-right:  solid 1.0pt' vAlign='bottom'&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS; font-size:8pt'&gt;The server retroactively applies the authentication to the message sent in step 14, allowing the transaction through&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;h4&gt;&lt;span style='font-family:Trebuchet MS'&gt;The MITM – Handshake Explanation&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;The Man-in-the-Middle (MITM) is present from the inception of the first client hello and acts in such a way as to make both the client and server believe the handshake is legitimate, while at the same time executing a &lt;em&gt;chosen plaintext attack&lt;/em&gt;. I have highlighted the important parts of the attack in the previous table.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; The client sends its initial client hello and all it eventually sees is a server hello in step 18. The MITM works the attack between Step 1 and Step 18, acting as if he is the client.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 14:&lt;/strong&gt; This is where the MITM must choose an appropriate renegotiation trigger message (RTM). This message must be a legitimate HTTP request that triggers the server side to start a new SSL session. Two ways of doing this are to choose an HTTP request that triggers either a stronger cipher-suite or a client certificate. In the example here, we assume the RTM triggers a renegotiation for a client certificate. In practice this would be done using an HTTP request to a "protected" or "higher security' URL location on the server. It should be noted that the attack can also be made to work if the &lt;em&gt;client&lt;/em&gt; triggers a renegotiation, though this isn't shown here.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 18:&lt;/strong&gt; Once the server hello is passed back to the client, the attack is nearly complete. From here on out the server will look to the authenticity of the true client, with the MITM as a silent go-between. The server will retroactively allow the message in Step 14 based on the future authentication state from the true client. It is &lt;em&gt;this specific behavior &lt;/em&gt;that results in the compromise. &lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Steps 23-25:&lt;/strong&gt; The client sends its valid certificate along with the encrypted master secret and proof of possession of the private key. It should be noted that the MITM &lt;em&gt;cannot &lt;/em&gt;snoop on the communication at this point, but will have access to the encrypted response and knows at least part of the matching plaintext, which was part of the message in step 14. This is the second weakness that may result in information that allows the MITM to derive the key, but this is still quite difficult.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Step 30:&lt;/strong&gt; This is the confirmation of the content of the renegotiation trigger message (RTM) in step 14. The MITM has successfully executed a one-way HTTP transaction using the authenticity of the client. I say this is one-way because they cannot read the actual response.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt; Another way of seeing how the attack can work is consider the behavior from the client &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Client's Perspective:&lt;/strong&gt; The client starts an SSL session by making an HTTP request to a web server and is prompted for a client certificate. The client presents their certificate. They notice that the first HTTP response (web server communication) they get back doesn't match their initial request. They shrug it off and send the request again, this time getting a valid result. They may also be surprised to find that they are asked for a client certificate when in the past they weren't, but it doesn't matter as the client would just assume security policies have increased on the server side. The client may notice the handshake took a little longer.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style='font-family:Trebuchet MS'&gt;&lt;strong&gt;Server's Perspective:&lt;/strong&gt; The server receives a request for a new SSL session from a particular client IP address. The server processes the handshake normally, authenticating itself. The client subsequently asks for a URL that is protected with a higher level of security. The server caches the HTTP request for this protected URL and renegotiates the SSL session with the client, this time asking for the client to authenticate itself. The client authenticates itself and the server sends the resulting URL location (or response) back to the client.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;span style='font-family:Trebuchet MS'&gt;Conclusion&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style='font-family:Trebuchet MS'&gt;As you can see, there is very little to indicate a compromise on either the client or server side. The key weakness is the SSL renegotiation, which can be triggered by the client or server. Worse, renegotiation is valid at any point during the protocol communication and may be done simply for the purposes of refreshing the key. In principle the weakness can be exploited anywhere the renegotiation occurs assuming the MITM is watching for this state from the inception of the handshake. In the next blog post we will look at the current and proposed mitigation strategies for this attack.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3&gt;&lt;span style='font-family:Trebuchet MS'&gt; &lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-1685183308341543566?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/1685183308341543566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=1685183308341543566' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1685183308341543566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1685183308341543566'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/12/really-understanding-ssltls.html' title='Really Understanding the SSL/TLS Vulnerability (Part 1)'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-2546739516315102573</id><published>2009-10-07T18:13:00.001-07:00</published><updated>2009-10-07T18:19:59.263-07:00</updated><title type='text'>Intel and Oracle at Oracle Open World 2009</title><content type='html'>Hello All -&lt;br /&gt;&lt;br /&gt;I just wanted to send out a little note that I'll be at Oracle Open World next week at Moscone Center in San Francisco on October 12th, 13th and 14th.&lt;br /&gt;&lt;br /&gt;We've got a demonstration setup that uses Oracle(R) SOA Suite 11G and Intel(R) SOA Expressway. The demo shows how you can deploy SOA Expressway as an edge security gateway to offload security processing and provide threat protection for application level attacks. We'll have SOA Expressway and Oracle SOA Suite running side-by-side on some monster laptops running on 64-bit Linux. We also plan to have a demo of Oracle Entitlements Server (OES) to demonstrate how authorization decisions can be pushed to the network edge.&lt;br /&gt;&lt;br /&gt;You can visit the &lt;a href="http://www.intel.com/cd/software/products/asmo-na/eng/373233.htm"&gt;Intel software&lt;/a&gt; website for more information on Intel(R) SOA Expressway and &lt;a href="http://www.oracle.com/technologies/soa/soa-suite.html"&gt;Oracle's website&lt;/a&gt; for more information Oracle(R) SOA Suite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-2546739516315102573?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/2546739516315102573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=2546739516315102573' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/2546739516315102573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/2546739516315102573'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/10/intel-and-oracle-at-oracle-open-world.html' title='Intel and Oracle at Oracle Open World 2009'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-379619978259182826</id><published>2009-08-06T08:20:00.000-07:00</published><updated>2009-08-06T09:05:47.346-07:00</updated><title type='text'>Stating the obvious on XML Attacks</title><content type='html'>It looks like everything old is new again with XML Attacks...&lt;br /&gt;&lt;br /&gt;I came across this &lt;a href="http://voices.washingtonpost.com/securityfix/2009/08/researchers_xml_security_flaw.html"&gt;article&lt;/a&gt; in the Washington Post. They use the term "XML fuzzing" to describe really just 50% of the XML threat equation - something I have always called coercive parsing, which is the manipulation of the XML document &lt;em&gt;structure&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;This, however, is only half of the battle. XML threats can also be &lt;em&gt;semantic&lt;/em&gt; meaning the attack is modifying the structure of the XML document to force a down-stream system to execute a particular function. This is the other element of XML threats that is left out of the discussion. Semantic threats cover areas where the XML document is executed in some way, such as SQL injection, embedded JavaScript, or other embedded languages like XPath.&lt;br /&gt;&lt;br /&gt;All in all, it is a cat and mouse game where the most important feature is extensibility and the ability to deploy new yet unnamed threats in real-time using a generalized mechanism such as regular expressions. All of these features, protection from structural threats, semantics threats, and threat extensibility can be found in &lt;a href="www.intel.com/software/soae"&gt;Intel's SOA Expressway.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-379619978259182826?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/379619978259182826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=379619978259182826' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/379619978259182826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/379619978259182826'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/08/stating-obvious-on-xml-attacks.html' title='Stating the obvious on XML Attacks'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-1022894929705542636</id><published>2009-06-26T13:37:00.001-07:00</published><updated>2009-06-26T13:55:23.440-07:00</updated><title type='text'>Where art thou, OAuth? Really now...</title><content type='html'>I've been digging into &lt;a href="http://oauth.net/core/1.0/"&gt;OAuth&lt;/a&gt; lately, which is a protocol for delegated authentication and authorization. It seems to be useful for cases where the end user is authorizing an intermediary (called a consumer) to access a specific resource for one-time access. This means that the end user is the policy decision point, rather than a centralized PDP.&lt;br /&gt;&lt;br /&gt;The protocol certainly looks interesting, but I've got a problem with it. My problem is that for browser interactions, the user is not given the equivalent of an SSL "lock" or other indicator that this is truly an OAuth protected interaction. This means that OAuth alone is not enough to reduce phishing attempts as described &lt;a href="http://www.slideshare.net/lhalff/wherefore-art-thou-oauth-presentation"&gt;here&lt;/a&gt;. A rogue website can just tell the user to sign in and then claim its only accessing data one time - there is no way for the user to verify this fact. Further, we know from the days of X.509 certificates that users can't possibly understand a basic trust relation, so having them understand a three-legged protocol with a shared secret is a stretch. Worse, the presentation argues that OAuth helps reduce the password anti-pattern, but a username and password is obviously required by the user - most users won't know the difference. Once more people move to OAuth, phishing sites will just make it appear &lt;i&gt;as if&lt;/i&gt; they are doing OAuth - it will be a zero-sum game. We need the equivalent of an "OAuth lock" in the browser for this protocol to be used for high-value transactions.&lt;br /&gt;&lt;br /&gt;Given that users must trust the website they are interacting with in the end, the simpler approach is to have websites publish a privacy and security policy that clearly says that access to service provider websites will be done with user credentials, but that the credentials will only be used once and not saved. Doesn't this achieve the same result with less code to write and less complexity? Is it more prudent for me to trust the website I am at or trust that the website has successfully implemented a complex, multi-hop security protocol?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-1022894929705542636?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/1022894929705542636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=1022894929705542636' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1022894929705542636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1022894929705542636'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/06/where-art-thou-oauth-really-now.html' title='Where art thou, OAuth? Really now...'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-1792322975650967305</id><published>2009-06-01T17:15:00.001-07:00</published><updated>2009-06-01T17:21:40.159-07:00</updated><title type='text'>Intel(R) SOA Expressway Demo at JavaOne</title><content type='html'>JavaOne is this week at &lt;a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fwww.moscone.com%2F&amp;ei=enAkSo2WIoaitgPd2_meBg&amp;usg=AFQjCNFKnqOVQ2SX6Z66S-iCrEiPL4c2iA"&gt; Moscone center&lt;/a&gt; in San Francisco and I've been putting together a live demo of &lt;a href="http://www.intel.com/software/soae"&gt;Intel(R) SOA Expressway&lt;/a&gt;. The plan is to show some perimeter defense, delegated authentication and message throttling functions. The scenario has three threads running, good requests, bad requests (auth faults) and bad requests (XML attacks). This set up is perfect for getting all of the pretty colors to show on the Intel(R) SOA Expressway dashboard!&lt;br /&gt;&lt;br /&gt;I've got SOA Expressway running on an old IBM t43p (single core) laptop on 32-bit Red Hat AS4. This is really for convenience since the laptop is small and easy to lug around. What's interesting is that even on this ancient machine Intel(R) SOA Expressway is extremely reliable - I had it going all weekend and it converged to about 8000 messages per hour, which actually limited by the client I'm using, which is SOAP UI.&lt;br /&gt;&lt;br /&gt;If anyone is around this week, please come by come check out the demo.&lt;br /&gt;&lt;br /&gt;Blake&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-1792322975650967305?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/1792322975650967305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=1792322975650967305' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1792322975650967305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1792322975650967305'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/06/intelr-soa-expressway-demo-at-javaone.html' title='Intel(R) SOA Expressway Demo at JavaOne'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-4038153977619152045</id><published>2009-05-21T12:15:00.000-07:00</published><updated>2009-05-21T12:21:48.225-07:00</updated><title type='text'>Get your head out of the cloud....</title><content type='html'>My mantra for the day is simply this: Paradigms are seldom total.&lt;br /&gt;&lt;br /&gt;Instead, the real world makes things complex, and this is a boon to the service oriented view of the world, whether it is under the moniker of "SOA" or "services."&lt;br /&gt;&lt;br /&gt;The cloud craze, aside from infecting every blog out there is really a new requirement for service mediation between on-premise Enterprise applications and off-premise services. Will the cloud paradigm become total? Maybe for the consumer, but I think we have a long way to go for the Enterprise.&lt;br /&gt;&lt;br /&gt;With its combination of security functions, virtualization support and mediation capabilities, &lt;a href="http:///www.intel.com/software/soae"&gt;Intel(R) SOA Expressway&lt;/a&gt; is in the right place a the right time to take advantage of hybrid cloud architectures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-4038153977619152045?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/4038153977619152045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=4038153977619152045' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/4038153977619152045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/4038153977619152045'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/05/get-your-head-out-of-cloud.html' title='Get your head out of the cloud....'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-4487951619331082333</id><published>2009-03-31T17:46:00.000-07:00</published><updated>2009-03-31T17:58:03.709-07:00</updated><title type='text'>IBM DataPower XI50 - More security problems</title><content type='html'>A colleague forwarded me &lt;a href="http://www.ibm.com/developerworks/forums/thread.jspa?threadID=257125&amp;tstart=0"&gt;this link&lt;/a&gt; which highlights what appears to be a severe memory limitation with the IBM DataPower XI50. It appears that the device is having trouble applying an XML digital signature to a 100MB XML file.&lt;br /&gt;&lt;br /&gt;This brings back the issue of using knowledge of the complexities involved in XML digital signatures to execute a Denial of Service (DoS) attack. Using this information an attacker could search for a DataPower device currently performing XML signatures on much smaller documents and take down the box with a single large document. I guess you might say this post highlights not one, but two problems with IBM DataPower: (a) The fact that it can't handle digital signatures on large XML, and (b) The fact that &lt;i&gt;this fact&lt;/i&gt; results in a potential DoS vulernability.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-4487951619331082333?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/4487951619331082333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=4487951619331082333' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/4487951619331082333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/4487951619331082333'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/03/ibm-datapower-xi50-more-security.html' title='IBM DataPower XI50 - More security problems'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-2461879796142098899</id><published>2009-03-25T08:42:00.000-07:00</published><updated>2009-03-25T09:07:23.016-07:00</updated><title type='text'>SQL Injection in USA Today</title><content type='html'>I was recently on a business trip last week and somehow I picked up a copy of "USA Today." This newspaper tends to find me rather than the other way around. Normally I try to avoid it, but am always drawn to it even if its just to see what the average American is supposed to care about.&lt;br /&gt;&lt;br /&gt;I was looking through the business section and I was shocked to see a story on the front page on SQL Injection attacks! &lt;br /&gt;&lt;br /&gt;I was surprised for a number of reasons. First off, SQL injection, or the attempt to insert SQL queries to return database information or spoof a login, is a very specific type of attack, but the USA Today story makes it seem like the average user should be "worried" about this type of attack, which is a little funny. It also claims that SQL injection turns your computer into a bot I think that attacks like &lt;a href="http://en.wikipedia.org/wiki/CSRF"&gt;cross-site request forgery&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;cross-site scripting&lt;/a&gt; have a much higher impact on the average Joe. XSS and CSRF can affect casual browsing if a user simply browses the wrong section of a website (such as the 'forums') where someone has managed to inject a &amp;lt;script&amp;rt; tag.&lt;br /&gt;&lt;br /&gt;Upon careful dissection, this article seems instead to be a sort of advertising placement for IBM:&lt;br /&gt;&lt;br /&gt;"For the first five months of 2008 IBM ISS helped large corporations block about 5,000 SQL attacks a day. By mid-June, daily attacks spiked to 25,000;"&lt;br /&gt;&lt;br /&gt;This is a bit ironic compared to the news that came out earlier in the year regarding the &lt;a href="http://www.derkeiler.com/Mailing-Lists/securityfocus/bugtraq/2009-01/msg00044.html"&gt;DoS attack against IBM DataPower&lt;/a&gt; or the problems the device has with &lt;a href="http://www.ibm.com/developerworks/forums/thread.jspa?threadID=254532&amp;tstart=0"&gt;persistent connections&lt;/a&gt;. I sure hope IBM ISS isn't recommending the DataPower device as an application firewall to protect against SQL injection!&lt;br /&gt;&lt;br /&gt;As for content threats themselves, this is a very interesting area that I am sure will experience more growth in both the types of threats devised as well as the protection mechanisms. What is needed is a high-performance content processor that can at a minimum scan for different types of attacks within the application payload but also must be &lt;a href="http://www3.intel.com/cd/software/products/asmo-na/eng/373233.htm"&gt;extensible&lt;/a&gt; as attacks are always changing and evolving. &lt;br /&gt;&lt;br /&gt;What worries me the most here are cases of an attack that rely on an application firewall to keep state between HTTP requests. That is, rather than the attack being defined as a single SQL injection, or script injection it may be defined across a set of messages. In other words, the attack can't be detected by looking at a single message, but by a pattern of messages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-2461879796142098899?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/2461879796142098899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=2461879796142098899' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/2461879796142098899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/2461879796142098899'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/03/sql-injection-in-usa-today.html' title='SQL Injection in USA Today'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-6198879975502591124</id><published>2009-02-24T13:16:00.001-08:00</published><updated>2009-02-24T13:22:06.246-08:00</updated><title type='text'>High Performance Software for Services Mediation</title><content type='html'>A hot issue in the context of SOA is how does one effectively mediate between services that may reside in different domains across an organization, and further, how does one accomplish data sharing amongst services without breaking the bank.&lt;br /&gt;&lt;br /&gt;Traditionally, organizations have deployed hardware appliances to solve this problem, but Intel has a new solution called SOA Expressway, which is essentially an optimized software runtime that accomplishes the same mediation as a hardware appliance but with higher performance that is more closely aligned with cost-reduction trends in the datacenter such as virtualization and liquid computing.&lt;br /&gt;&lt;br /&gt;Recently I gave a joint &lt;a href="https://event.on24.com/event/13/40/15/rt/index.html?&amp;eventid=134015&amp;sessionid=1&amp;key=82B7B721CA67E81DF665AFC912F5A18C&amp;partnerref=intel&amp;sourcepage=register"&gt;webinar&lt;/a&gt; with Burton on the software service mediation solution. Most surprising is how much faster the software is compared to a purpose-built XML appliance. In fact, the testing shows that for real-world (non-synthetic tests) scenarios, software on Intel(R) Multi-Core is at least 2 and at most 8 times faster than the ASIC for XML processing - quite suprising, oh and its cheaper too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-6198879975502591124?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/6198879975502591124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=6198879975502591124' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/6198879975502591124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/6198879975502591124'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/02/high-performance-software-for-services.html' title='High Performance Software for Services Mediation'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-1068842835979718633</id><published>2009-01-14T10:10:00.000-08:00</published><updated>2009-01-14T10:23:57.203-08:00</updated><title type='text'>Intel Product Presentation Video at SOA World 2008</title><content type='html'>&lt;a href="http://webcast.sys-con.com/"&gt;Sys-Con&lt;/a&gt; has just put up a &lt;a href="http://www2.sys-con.com/webinararchive.cfm?pid=wc_cc8w_d1_s4_t3_intel2 "&gt;link&lt;/a&gt; to &lt;a href="http://software.intel.com/en-us/blogs/author/joshua-painter/"&gt;Joshua Painter's&lt;/a&gt; presentation on Enterprise SOA and governance that was given at SOA World 2008. &lt;br /&gt;&lt;br /&gt;The video is interesting in that it highlights Intel's SOA Expressway product in terms of the Enterprise Service Router concept, which tries to consolidate islands of integration with scalable software rather than a plethora of non-interoperable ESBs and custom built hardware appliances. The software scales on Intel Multi-Core such as the &lt;a href="http://en.wikipedia.org/wiki/Intel_Core_3"&gt;new i7 platform&lt;/a&gt; and uses standard servers rather than custom chips for XML message acceleration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-1068842835979718633?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/1068842835979718633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=1068842835979718633' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1068842835979718633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1068842835979718633'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/01/intel-product-presentation-video-at-soa.html' title='Intel Product Presentation Video at SOA World 2008'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-1741927644375300274</id><published>2009-01-13T15:30:00.001-08:00</published><updated>2009-01-13T15:53:25.663-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ibm datapower ssl vulnerability'/><title type='text'>IBM DataPower: Denial Of Service Vulernability</title><content type='html'>A friend of mine forwarded me this &lt;a href="http://seclists.org/bugtraq/2009/Jan/0045.html"&gt;DoS attack&lt;/a&gt; against the IBM DataPower XS40 SOA Security Appliance using only the standard &lt;a href="http://www.openssl.org"&gt;OpenSSL command line client&lt;/a&gt;. Apparently you can cause the box to reboot by sending a random string over an SSL-enabled socket connection.&lt;br /&gt;&lt;br /&gt;I got in touch with a friend with access to an IBM DataPower XI50 and they were unable to reproduce the issue on the integration device, but that doesn't mean similar issues like this one aren't going to crop up, especially in a closed-off hardended device like this. I also wonder if this attack was an accident or if it was the result of a concentrated security analysis on the device itself.&lt;br /&gt;&lt;br /&gt;I think this is where it makes sense to reexamine closed-off products in light of well known design principles like &lt;a href="http://en.wikipedia.org/wiki/Security_through_obscurity"&gt;security through obscurity&lt;/a&gt; and ask if it makes sense to protect enterprise and SaaS applications with this type of device as contrasted with a &lt;a href="http://www.intel.com/software/soae/"&gt;software solution&lt;/a&gt; that runs on an open-source with a known risk profile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-1741927644375300274?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/1741927644375300274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=1741927644375300274' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1741927644375300274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/1741927644375300274'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/01/ibm-datapower-denial-of-service.html' title='IBM DataPower: Denial Of Service Vulernability'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-6582551609979393375</id><published>2009-01-07T14:49:00.000-08:00</published><updated>2009-01-07T14:54:51.082-08:00</updated><title type='text'>SAML v2.0 SimpleSign</title><content type='html'>It looks like a new binding for SAML v2.0 is soon to be ratified, the &lt;a href="http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-binding-simplesign-cd-04.html"&gt;HTTP POST "SimpleSign" Binding &lt;/a&gt;. The "SimpleSign" binding was originally crafted by &lt;a href="http://identitymeme.org/archives/2006/09/08/samlv2-http-post-simplesign-binding/"&gt;Jeff Hodges&lt;/a&gt; and Scott Cantor relaxes the XML Signature requirements on the SAML Protocol, making it easier for scripting environments to send signed SAML requests and verify signed SAML responses. The main problem with XML Signature is performance - very few people know that the cryptography involved in XML Signature is often dwarfed many times over by the extensive XML processing requirements including parsing, transformation and XML canonicalization (e.g. c14n). &lt;br /&gt;&lt;br /&gt;The situation only gets worse as the size of the XML document increases or the number of references to be signed increases. This profile takes a less sophisticated approach and interprets the XML content of the SAML request or response as an octet stream and then represents the signature as a base-64 encoded blob. While I think that this type of profile will do wonders to help scripting environments support signed SAML requests, this specification does not replace the signature on the actual SAML assertion - it just applies to the &lt;SAMLRequest&gt; and &lt;SAMLResponse&gt; messages. &lt;br /&gt;&lt;br /&gt;This means that for persistent message level security on SAML assertions, XML Signature is still required. Other solutions to this problem are to decouple the XML signature processing from the scripting environment and moves it to the network with a &lt;a href="http://www3.intel.com/cd/software/products/asmo-na/eng/373233.htm"&gt;SOA software appliance&lt;/a&gt;. This approach uses the original XML Signature as specified in the original spec (you will likely have to use it anyway if you want signed SAML assertions) and avoids having to implement and test a new profile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-6582551609979393375?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/6582551609979393375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=6582551609979393375' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/6582551609979393375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/6582551609979393375'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2009/01/saml-v20-simplesign.html' title='SAML v2.0 SimpleSign'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-6439896952766768608</id><published>2008-11-20T10:49:00.000-08:00</published><updated>2008-11-20T11:03:16.366-08:00</updated><title type='text'>SOAWorld 2008</title><content type='html'>I was at SOAWorld 2008 yesterday and had the pleasure of hearing &lt;a href="http://weblog.infoworld.com/realworldsoa/"&gt;David Linthicum's&lt;/a&gt; keynote presentation entitled "SOA by the Numbers". &lt;br /&gt;&lt;br /&gt;One of the powerful messages he made was that the era of "management by magazine" is over and the fact that there are less SOA projects starting implies not that SOA adoption is waning, but that more projects are in-flight. This will inevitably lead to a scaling problem as SOA scales from micro-domains (also called the "little-bus") to macro-domains (also called the "big-bus") where the benefits of SOA are amplified for the business. Currently, other than &lt;a href="http://www.intel.com/software/soae"&gt;Intel&lt;/a&gt; and and few other players, most vendors have been focused on the micro-domain with the proliferation of ESBs.&lt;br /&gt;&lt;br /&gt;While I agreed for the most part with David's point about having a true services strategy and the right people for the job, these are truisms - the fact remains that SOA is steeped in technology right now. The line-of-business doesn't care so much about implementing SOA for its own sake, they are thinking in business terms where SOA is of instrumental or utilitarian value - a means to compete and not an end in itself; I think this is part of the adoption challenge as SOA is driven internally at the micro-domain level by software architects and engineers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-6439896952766768608?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/6439896952766768608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=6439896952766768608' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/6439896952766768608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/6439896952766768608'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2008/11/soaworld-2008.html' title='SOAWorld 2008'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-7615421355528796809</id><published>2008-10-10T11:46:00.000-07:00</published><updated>2008-10-10T12:46:08.056-07:00</updated><title type='text'>Hardware Appliances: Anathema to SOA?</title><content type='html'>SOA promises to bring increased agility to business, but it seems that there is a philosophical conflict between purpose-built hardware appliances and the design principles around SOA. Typically, hardware appliances have been used as XML Firewalls or Web Services Security gateways to provide trust enablement, authentication, perimeter defense, and XML acceleration functions to a partner B2B scenario. The problem here is that providing this in a "mysterious black box" seems odd to me. &lt;br /&gt;&lt;br /&gt;In particular, we can break down the concept of SOA Agility into four components: &lt;span style="font-style:italic;"&gt;Network Performance Agility&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;Business Processing Agility&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;Development Agility&lt;/span&gt;, and &lt;span style="font-style:italic;"&gt;Security Agility&lt;/span&gt;. &lt;br /&gt;&lt;br /&gt;Network performance agility is the ability of the network infrastructure to closely match the necessary architecture for the deployed services. Business processing agility is the capability of the services to match the business mediation or required business processes. Development agility is the capability of the SOA infrastructure to support a distributed development team across geographic boundaries (typical of modern enterprises), and finally, security agility is the capability of the infrastructure to support changing security standards, evolving threats, and an "open" process for security analysis.&lt;br /&gt;&lt;br /&gt;It seems that purpose built appliances from companies like &lt;a href="http://www.vordel.com"&gt;Vordel&lt;/a&gt; or &lt;a href="http://www.datapower.com"&gt;IBM DataPower&lt;/a&gt; represent an opposing force for each one of these SOA Agility areas. We can summarize SOA Agility, its aspects, and how hardware appliances seem opposed to SOA Agility in the following table:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Requirement&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Hardware Appliance&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Explanation&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Network Performance Agility&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;&lt;b&gt;Fixed NIC ports&lt;/b&gt; - supporting larger networks means buying more proprietary appliances. &lt;b&gt;High Data center Costs&lt;/b&gt; - High TPS/Watt Usage over general purpose servers. &lt;b&gt;Low Reusability Potential&lt;/b&gt; - Old appliances must be discarded or returned to the vendor, unlike general purpose servers which can be reused. &lt;b&gt;Lack of Virtualization&lt;/b&gt; - Appliances have no capability to take part in data center efficiencies achieved through virtualization.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Business Processing Agility&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;&lt;b&gt;Non-extensible&lt;/b&gt; - Impossible to add custom business processing on the appliance without a new feature request or vendor upgrade (possible hardware upgrade). &lt;b&gt;Lagging Standards Support&lt;/b&gt; - Keeping up with all of the latest standards requires a full-cycle hardware upgrade&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Development Agility&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt;&lt;b&gt;High Development Costs&lt;/b&gt; - Distributed development teams require additional high cost (generally $50K - $60K) appliances just for application development. The cost of the appliance approximates the cost for the developer! &lt;b&gt;Serialized Development&lt;/b&gt; - Due to their high cost, development teams must often share a small number of appliances, cutting down efficiencies for business agility&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Security Agility&lt;/td&gt;&lt;td&gt;X&lt;/td&gt;&lt;td&gt; &lt;b&gt;Guaranteed Standards Lag&lt;/b&gt; - Latest security standards on hardware must wait for a full-cycle upgrade. &lt;b&gt;Guaranteed O/S Security Lag&lt;/b&gt; - New security vulnerabilities in the underlying O/S actually running the appliance mean the customer must rely on the vendor for a patch. &lt;b&gt;Inflexible Security Model&lt;/b&gt; - Additional monitoring, security and maangement software can't be added to the hardware appliance due to its "closed" nature. &lt;b&gt;Security by Obscurity&lt;/b&gt; - Because appliances are proprietary black boxes its often not clear how security policies such as key management or user accounts are really handled. Did the vendor put in a back-door for management or support purposes? Who knows?&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Rather than a hardware appliance, why not just achieve the same thing with &lt;a href="http://www.intel.com/software/soae"&gt;specially optimized software&lt;/a&gt; that supports SOA agility?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-7615421355528796809?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/7615421355528796809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=7615421355528796809' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/7615421355528796809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/7615421355528796809'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2008/10/hardware-appliances-anathema-to-soa.html' title='Hardware Appliances: Anathema to SOA?'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-5563906982093087205</id><published>2008-08-21T11:01:00.000-07:00</published><updated>2008-08-21T11:34:32.404-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ovf soa virtualization software appliance virtual appliance intel soa expressway'/><title type='text'>OVF and SOA</title><content type='html'>I was perusing the &lt;a href="http://www.vmware.com/pdf/ovf_spec_draft.pdf"&gt;Open Virtual Machine Format Specification&lt;/a&gt; and I was a bit surprised to see that they reference SOA in the third paragraph of the executive summary of the OVF Whitepaper. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Whereas current virtual appliances contain a single VM only, modern enterprise applications model service oriented architectures (SOA) with multiple tiers..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of the benefits of OVF is that it can represent and package multiple virtual machines in a single package, which is great for modern, multi-tier distributed applications. If enough vendors jump on board this might help simplify what I see as one of the great barriers to SOA adoption: The huge crowded and confused market of non-interoperable SOA products from large vendors (including open-source). My favorite example of this is the proliferation of SOA suites. For example Sun JCAPS requires &lt;a href="http://developers.sun.com/docs/javacaps/installing/jcapsinstall.jcapsinstall.html"&gt;13 components for installation&lt;/a&gt;. Is this all necessary?&lt;br /&gt;&lt;br /&gt;Anyhow, one other thing I noticed about OVF is that it doesn't use &lt;a href="http://www.w3.org/TR/xmldsig-core/"&gt;W3C XML Digital Signature&lt;/a&gt; for its integrity checking scheme, but instead packages the signature and public key in a file in Base-64 encoded format (as a side note, I hope the reference to SHA1 on line 264 is a typo, it should really be a signature algorithm, e.g. RSA-SHA1), otherwise they'll have a tough time verifying it. I don't think this is necessarily a bad thing to not use W3C XML Digital Signature, but it does seem a bit inconsistent given that OVF is an XML-based specification.&lt;br /&gt;&lt;br /&gt;Perhaps they are worried about the notorious poor performance for XML Signature processing on standard (un-accelerated) software offerings? Even in this case, if OVF went with XML Signature, the performance impact should still be minimal because the signature is over a list of 20 byte hashes, not an entire virtual machine instance, and even if it were, it wouldn't be an XML representation so there should be no canonicalization applied to it. In fact, XML Signature can replace the .mf, .ovf, AND .cert files. XML Signature already models the signature targets as a list of hashes and has a mechanism for including an X.509 certificate. &lt;span style="font-weight:bold;"&gt;Again, simplicity rules&lt;/span&gt; - why use three non-standard files when you can use 1 file that is an approved W3C standard?&lt;br /&gt;&lt;br /&gt;As a side note, Intel's &lt;a href="www.intel.com/software/soae"&gt;SOA Expressway Product&lt;/a&gt; solves the performance issues with XML Security processing with special Intel Multi-Core optimized software that is simply ideal for this type of virtual appliance model. I think OVF and software appliances might be a real boon to solving the SOA complexity problem.&lt;br /&gt;&lt;br /&gt;Blake&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-5563906982093087205?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/5563906982093087205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=5563906982093087205' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/5563906982093087205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/5563906982093087205'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2008/08/ovf-and-soa.html' title='OVF and SOA'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5308519492620460793.post-5348796605083134557</id><published>2008-08-14T15:37:00.000-07:00</published><updated>2008-08-15T11:28:12.035-07:00</updated><title type='text'>The Inagural Post</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;And so it begins...&lt;br /&gt;&lt;br /&gt;The goal of this blog is to be a sounding board for topics that lie at the intersection of SOA security, and business, with a particular focus on cutting through the insidious "hype" that surrounds many of the topics related to Services Oriented Architecture.&lt;br /&gt;&lt;br /&gt;Stay tuned...&lt;br /&gt;&lt;br /&gt;P.S. I am an employee of Intel Corporation and these opinions are mine and not those of my employer. Also, I may make some references to Joe Natoli's &lt;a href="http://softwareblogs.intel.com/author/joseph-natoli/"&gt;blog&lt;/a&gt; at blogs.intel.com as he talks about Intel(R) SOA Expressway.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Blake&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5308519492620460793-5348796605083134557?l=soatruth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://soatruth.blogspot.com/feeds/5348796605083134557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5308519492620460793&amp;postID=5348796605083134557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/5348796605083134557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5308519492620460793/posts/default/5348796605083134557'/><link rel='alternate' type='text/html' href='http://soatruth.blogspot.com/2008/08/inagural-post.html' title='The Inagural Post'/><author><name>Blake Dournaee</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='25' src='http://3.bp.blogspot.com/_SJ6nC6z2T4U/S7ziRu7uZRI/AAAAAAAABTg/RtVVbuw6-x4/S220/head-shot-blake.PNG'/></author><thr:total>0</thr:total></entry></feed>
