<?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:blogger='http://schemas.google.com/blogger/2008' 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-4878357546277600287</id><updated>2024-10-02T08:24:27.431-07:00</updated><category term="TLS"/><category term="JSSE"/><category term="Cipher Suite"/><category term="Preference"/><category term="Java SE 7"/><category term="PKI"/><category term="Code Conversions"/><category term="Crypto"/><category term="FIPS"/><category term="Java SE"/><category term="Security"/><category term="Vulnerability"/><category term="X.509"/><category term="AES"/><category term="BEAST"/><category term="Browser"/><category term="Coding"/><category term="Firefox"/><category term="Google Chrome"/><category term="Internet Explorer"/><category term="Java"/><category term="Java 7"/><category term="Java Security"/><category term="KeyManagerFactory"/><category term="MD5"/><category term="NIO.2"/><category term="NIST"/><category term="OCSP"/><category term="OCSP Stapling"/><category term="Opera"/><category term="PKCS11 SlotInfo"/><category term="RSA"/><category term="SSL"/><category term="Safari"/><category term="SubjectPublicKeyInfo"/><category term="hash policy"/><title type='text'>Xuelei Fan&#39;s Blog</title><subtitle type='html'>Talk the Walk of Java Security Technologies.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://simsmi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>44</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-8206294773368122177</id><published>2014-02-24T22:04:00.001-08:00</published><updated>2014-05-23T04:55:12.675-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code Conversions"/><title type='text'>Use Braces Even For Single Line Statement</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTGPsZ3r-QeazRQ4F0ikZhs8sM8z5KWXEhi7VutOLaKKHjSDsOWCV9UJfygWRTQS14znP_6wao1Ip08cT_JNkYvg2v4sCxx0JuumrTpayEOXDEeG5KIBD0qQjPl1XJcoILlRjJevogLRM/s1600/img_1404.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTGPsZ3r-QeazRQ4F0ikZhs8sM8z5KWXEhi7VutOLaKKHjSDsOWCV9UJfygWRTQS14znP_6wao1Ip08cT_JNkYvg2v4sCxx0JuumrTpayEOXDEeG5KIBD0qQjPl1XJcoILlRjJevogLRM/s1600/img_1404.jpg&quot; height=&quot;436&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
On Feb. 21, 2014, Apple released &lt;a href=&quot;http://support.apple.com/kb/HT6147&quot;&gt;security update&lt;/a&gt; for iOS&amp;nbsp;that affected SSL/TLS connections. The impact is described as &quot;An attacker with a privileged network position may capture or modify data in sessions protected by SSL/TLS.&quot;  And the &lt;a href=&quot;http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-1266&quot;&gt;CVSS v2 Base Score&lt;/a&gt; is 6.8(AV:N/AC:M/Au:N/C:P/I:P/A:P).  What&#39;s the problem with it?&lt;br /&gt;
&lt;br /&gt;
Here is the &lt;a href=&quot;http://opensource.apple.com/source/Security/Security-55471/libsecurity_ssl/lib/sslKeyExchange.c&quot;&gt;Apple code&lt;/a&gt;:&lt;br /&gt;
&lt;pre&gt;static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
                                 uint8_t *signature, UInt16 signatureLen)
{
    ...

    if ((err = ReadyHash(&amp;amp;SSLHashSHA1, &amp;amp;hashCtx)) != 0)
        goto fail;
    if ((err = SSLHashSHA1.update(&amp;amp;hashCtx, &amp;amp;clientRandom)) != 0)
        goto fail;
    if ((err = SSLHashSHA1.update(&amp;amp;hashCtx, &amp;amp;serverRandom)) != 0)
        goto fail;
    if ((err = SSLHashSHA1.update(&amp;amp;hashCtx, &amp;amp;signedParams)) != 0)
        goto fail;
        goto fail;
    if ((err = SSLHashSHA1.final(&amp;amp;hashCtx, &amp;amp;hashOut)) != 0)
        goto fail;

    err = sslRawVerify(ctx,
                       ctx-&amp;gt;peerPubKey,
                       dataToSign,    /* plaintext */
                       dataToSignLen,   /* plaintext length */
                       signature,
                       signatureLen);
    if(err) {
        sslErrorLog(&quot;SSLDecodeSignedServerKeyExchange: sslRawVerify &quot;
                    &quot;returned %d\n&quot;, (int)err);
        goto fail;
    }

fail:
    SSLFreeBuffer(&amp;amp;signedHashes);
    SSLFreeBuffer(&amp;amp;hashCtx);
    return err;

}
&lt;/pre&gt;
&lt;br /&gt;
Did you note these lines?&lt;br /&gt;
&lt;pre&gt;    if ((err = SSLHashSHA1.update(&amp;amp;hashCtx, &amp;amp;signedParams)) != 0)
        goto fail;
        goto fail;
&lt;/pre&gt;
&lt;br /&gt;
There are two &quot;goto fail;&quot; lines. The second one will always be executed and jump to &quot;fail&quot; marked block. Therefore, there is no chance to execute the sslRawVerify() method, which is essential to establish a safe SSL connection. &amp;nbsp;Here comes the security issue.  Read &lt;a href=&quot;https://www.imperialviolet.org/2014/02/22/applebug.html&quot;&gt;here&lt;/a&gt; if you want to learn more detailed analysis of the issue.&lt;br /&gt;
&lt;br /&gt;
The lesson I learned:&lt;br /&gt;
1. Be patient during code review. Even a minor typo can result in serious security issues.&lt;br /&gt;
2. Follow good code conversions. People make fewer mistakes in consistent environments.&lt;br /&gt;
&lt;br /&gt;
Java &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-142311.html#449&quot;&gt;suggests&lt;/a&gt; to always to use braces for &quot;if&quot; statements. C and C++ also have similar conversions, for example the brace policy in &lt;a href=&quot;http://users.ece.cmu.edu/~eno/coding/CCodingStandard.html#brace&quot;&gt;C&lt;/a&gt; and &lt;a href=&quot;http://www.possibility.com/Cpp/CppCodingStandard.html&quot;&gt;C++&lt;/a&gt;.&lt;br /&gt;
&lt;pre&gt;Note: if statements always use braces, {}. Avoid the following error-prone form:

if (condition) //AVOID! THIS OMITS THE BRACES {}!
    statement;
&lt;/pre&gt;
Rewrite the Apple code with the braces policy:
&lt;br /&gt;
&lt;pre&gt;    if ((err = SSLHashSHA1.update(&amp;amp;hashCtx, &amp;amp;signedParams)) != 0) {
        goto fail;
    }
    goto fail;
&lt;/pre&gt;
With this reorg, it is easier to find the problem during code review. Or
&lt;br /&gt;
&lt;pre&gt;    if ((err = SSLHashSHA1.update(&amp;amp;hashCtx, &amp;amp;signedParams)) != 0) {
        goto fail;
        goto fail;
    }
&lt;/pre&gt;
With this reorg, the problem disappears.

&lt;br /&gt;
&lt;br /&gt;
Good code conversions make a lot of fun!&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/8206294773368122177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/8206294773368122177'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2014/02/love-to-use-braces-even-for-single-line.html' title='Use Braces Even For Single Line Statement'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTGPsZ3r-QeazRQ4F0ikZhs8sM8z5KWXEhi7VutOLaKKHjSDsOWCV9UJfygWRTQS14znP_6wao1Ip08cT_JNkYvg2v4sCxx0JuumrTpayEOXDEeG5KIBD0qQjPl1XJcoILlRjJevogLRM/s72-c/img_1404.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-27373965470847473</id><published>2014-01-19T06:22:00.000-08:00</published><updated>2017-04-15T15:01:45.526-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>JEP 115: AES-GCM CipherSuites in JDK 8</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: right; margin-left: 1em; text-align: right;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7Dd0VoMaddV4jX3eda5BknSLPaP61SqIyOCIZRvXfeIRczW6mXCagWgeAvzxJ-k4wWauHu2NGNXb3SmjtyjgSFqzXdB_lxNUpYkCfFEgfxJO40kv8ldEoLNmAC2jVsSH3IOaSq4dqJY4/s1600/IMG_3673.JPG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7Dd0VoMaddV4jX3eda5BknSLPaP61SqIyOCIZRvXfeIRczW6mXCagWgeAvzxJ-k4wWauHu2NGNXb3SmjtyjgSFqzXdB_lxNUpYkCfFEgfxJO40kv8ldEoLNmAC2jVsSH3IOaSq4dqJY4/s400/IMG_3673.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Chengdu, China&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;a href=&quot;http://www.ietf.org/rfc/rfc5288.txt&quot;&gt;RFC 5288&lt;/a&gt; describes the use of AES in Galois Counter Mode (&lt;a href=&quot;http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf&quot;&gt;GCM&lt;/a&gt;) (AES-GCM) with various key exchange mechanisms as a cipher suite for TLS.  AES-GCM is an authenticated encryption with associated data (AEAD) cipher (as defined in &lt;a href=&quot;http://www.ietf.org/rfc/rfc5246.txt&quot;&gt;TLS 1.2&lt;/a&gt;) providing both confidentiality and data origin authentication.  
&lt;br /&gt;
&lt;br /&gt;
Java SE had already defined the AES-GCM interfaces in &lt;a href=&quot;http://download.oracle.com/javase/7/docs/&quot;&gt;Java SE 7&lt;/a&gt;. &amp;nbsp;In the coming Java SE 8, as an implementation of &lt;a href=&quot;http://openjdk.java.net/jeps/115&quot;&gt;JEP 115&lt;/a&gt;, AES-GCM algorithms is implemented in SunJCE provider, and AES-GCM cipher suites are implemented in SunJSSE provider.&lt;br /&gt;
&lt;br /&gt;
The following SSL/TLS AEAD/GCM cipher suites, in preference order, are enabled by default in SunJSSE provider for TLS version 1.2:&lt;br /&gt;
&lt;pre&gt;    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (RFC 5289)
    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (RFC 5289)
 
    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (RFC 5289)
    TLS_RSA_WITH_AES_256_GCM_SHA384 (RFC 5288)
    TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 (RFC 5289)
    TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 (RFC 5289)
    TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (RFC 5288)
    TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 (RFC 5288)
 
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (RFC 5289)
    TLS_RSA_WITH_AES_128_GCM_SHA256 (RFC 5288)
    TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 (RFC 5289)
    TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 (RFC 5289)
    TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (RFC 5288)
    TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 (RFC 5288)
&lt;/pre&gt;
&lt;br /&gt;
The following SSL/TLS AEAD/GCM cipher suites are supported but not enabled by default in SunJSSE provider for TLS version 1.2:
&lt;br /&gt;
&lt;pre&gt;    TLS_DH_anon_WITH_AES_256_GCM_SHA384 (RFC 5288)
    TLS_DH_anon_WITH_AES_128_GCM_SHA256 (RFC 5288)
&lt;/pre&gt;
&lt;br /&gt;
The following SSL/TLS AEAD/GCM cipher suites are defined, but not implemented or supported by SunJSSE provider:&lt;br /&gt;
&lt;pre&gt;    TLS_DH_RSA_WITH_AES_128_GCM_SHA256 (RFC 5288)
    TLS_DH_RSA_WITH_AES_256_GCM_SHA384 (RFC 5288)
 
    TLS_DH_DSS_WITH_AES_128_GCM_SHA256 (RFC 5288)
    TLS_DH_DSS_WITH_AES_256_GCM_SHA384 (RFC 5288)
&lt;/pre&gt;
&lt;br /&gt;
For better compatibility and interoperability, in JDK 8, it is decided to decrease the preference priority of cipher suites in GCM mode for a while before GCM technologies mature in the industry.  New developments in TLS security have occurred recently, the industry is moving towards TLS 1.1/1.2 and the use of GCM-based cipher suites.  The preference priority of GCM-based cipher suites by default may be increased in JDK 9, or a JDK 8 update release in the future.
&lt;br /&gt;
&lt;br /&gt;
Enojoy this new feature!&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/27373965470847473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/27373965470847473'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2014/01/jep-115-aes-gcm-ciphersuites-in-jdk-8.html' title='JEP 115: AES-GCM CipherSuites in JDK 8'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7Dd0VoMaddV4jX3eda5BknSLPaP61SqIyOCIZRvXfeIRczW6mXCagWgeAvzxJ-k4wWauHu2NGNXb3SmjtyjgSFqzXdB_lxNUpYkCfFEgfxJO40kv8ldEoLNmAC2jVsSH3IOaSq4dqJY4/s72-c/IMG_3673.JPG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-2343273439919346509</id><published>2014-01-02T22:20:00.004-08:00</published><updated>2014-03-22T17:26:00.504-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>JEP 114: TLS SNI Extension - Virtual Servers Dispatcher</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRA7ANmxPQaAndTuXJwXhfF79Y8WbpvdzVvPwtUcxMBe70RFgpQ55B5PZ_M0B1Engqju0yPwQe44YCqXB3dzXlD_3Fw_bdt3ODrDACWcC3dKOjjBEy7RBtqPwtP6qETnsnGVtj2Ymn5hk/s1600/8c60a28054636f9f50eef16ef11335e5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRA7ANmxPQaAndTuXJwXhfF79Y8WbpvdzVvPwtUcxMBe70RFgpQ55B5PZ_M0B1Engqju0yPwQe44YCqXB3dzXlD_3Fw_bdt3ODrDACWcC3dKOjjBEy7RBtqPwtP6qETnsnGVtj2Ymn5hk/s1600/8c60a28054636f9f50eef16ef11335e5.jpg&quot; height=&quot;400&quot; width=&quot;285&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The implementation of&amp;nbsp;&lt;a href=&quot;http://openjdk.java.net/jeps/114&quot;&gt;JEP 114&lt;/a&gt;&amp;nbsp;(TLS Server Name Indication (SNI) Extension) had&lt;a href=&quot;http://hg.openjdk.java.net/jdk8/jdk8/jdk/rev/3f62cfc4e83d&quot;&gt;&amp;nbsp;integrated into JDK 8&lt;/a&gt;&amp;nbsp;at October, 2012. In&amp;nbsp;&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse.html&quot;&gt;the previous blog entries&lt;/a&gt;, we talked about the behavior changes in JSSE, and &lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-typical-user.html&quot;&gt;a few typical user cases&lt;/a&gt;. Let&#39;s look at a special user case, how to design a virtual server dispatcher in Java. Please refer to javax.net.ssl package of&amp;nbsp;&lt;a href=&quot;http://download.java.net/jdk8/docs/api/&quot;&gt;JDK 8 APIs&lt;/a&gt;&amp;nbsp;for the detailed specification.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Prepare the ClientHello Parser&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;
Applications need to implementation their own APIs to parser the client hello message from a plaintext socket. Suppose that an application design the following API to do the work, SSLCapabilities and SSLExplorer.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
SSLCapabilities is defined to show the SSL/TLS security capabilities during handshaking, SSLCapabilities can be retrieved by exploring the network data of an SSL/TLS connection via SSLExplorer.explore(ByteBuffer).&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;/**
 * Encapsulates the security capabilities
 * of an SSL/TLS connection.
 * 
 * The security capabilities are the list
 * ciphersuites to be accepted in an SSL/TLS
 * handshake, the record version, the hello
 * version, and server name indication, etc.,
 * of an SSL/TLS connection.
 * 
 * {@code SSLCapabilities} can be retrieved by exploring the network
 * data of an SSL/TLS connection via {@link SSLExplorer#explore(ByteBuffer)}
 * or {@link SSLExplorer#explore(byte[], int, int)}.
 *
 * @see SSLExplorer
 */
public abstract class SSLCapabilities {

    /**
     * Returns the record version of an SSL/TLS connection
     *
     * @return a non-null record version
     */
    public abstract String getRecordVersion();

    /**
     * Returns the hello version of an SSL/TLS connection
     *
     * @return a non-null hello version
     */
    public abstract String getHelloVersion();

    /**
     * Returns a {@code List} containing all
     * {@link SNIServerName}s of the server name indication.
     *
     * @return a non-null immutable list of {@link SNIServerName}s
     *         of the server name indication parameter, may be empty
     *         if no server name indication.
     *
     * @see SNIServerName
     */
    public abstract List&amp;lt;SNIServerName&amp;gt; getServerNames();
}&lt;span style=&quot;font-family: Times New Roman;&quot;&gt;&lt;span style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
SSLExplorer is defined to explore the initial ClientHello message from TLS Client. But it does not kick off handshaking, or consume network data. The SSLExplorer.explore() method parses the ClientHello message, and retrieve the security parameters from ClientHello message into SSLCapabilities.&lt;br /&gt;
&lt;br /&gt;
This method must be called before handshaking occurs on any TLS connections.&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;/**
 * Instances of this class acts as an explorer of the network data of an
 * SSL/TLS connection.
 */
public final class SSLExplorer {

    /**
     * The header size of TLS/SSL records.
     * &amp;lt;P&amp;gt;
     * The value of this constant is {@value}.
     */
    public final static int RECORD_HEADER_SIZE = 0x05;

    /**
     * Returns the required size in byte from byte buffer to explore an
     * SSL/TLS connection.
     * &amp;lt;P&amp;gt;
     * This method tries to parse as few bytes as possible from
     * {@code source} byte buffer to get the length of an
     * SSL/TLS record.
     *
     * @param  source
     *         a {@code ByteBuffer} containing
     *         inbound or outbound network data for an SSL/TLS connection.
     *
     * @throws BufferUnderflowException if less than {@code RECORD_HEADER_SIZE}
     *         bytes remaining in {@code source}
     */
    public final static int getRequiredSize(ByteBuffer source);

    /**
     * Returns the required size in byte from byte array to explore an
     * SSL/TLS connection.
     * &amp;lt;P&amp;gt;
     * This method tries to parse as few bytes as possible from
     * {@code source} byte array to get the length of an
     * SSL/TLS record.
     *
     * @param  source
     *         a byte array containing inbound or outbound network data for
     *         an SSL/TLS connection.
     * @param  offset
     *         the start offset in array {@code source} at which the
     *         network data is read from.
     * @param  length
     *         the maximum number of bytes to read.
     *
     * @throws BufferUnderflowException if less than {@code RECORD_HEADER_SIZE}
     *         bytes remaining in {@code source}
     */
    public final static int getRequiredSize(byte[] source,
            int offset, int lenght) throws IOException;

    /**
     * Launch and explore the security capabilities from byte buffer.
     * &amp;lt;P&amp;gt;
     * This method tries to parse as few records as possible from
     * {@code source} byte buffer to get the {@code SSLCapabilities}
     * of an SSL/TLS connection.
     * &amp;lt;P&amp;gt;
     * Please NOTE that this method must be called before any handshaking
     * occurs.  The behavior of this method is not defined in this release
     * if the handshake has begun, or has completed.
     * &amp;lt;P&amp;gt;
     * This method accesses the {@code source} parameter in read-only
     * mode, and does not update the buffer&#39;s properties such as capacity,
     * limit, position, and mark values.
     *
     * @param  source
     *         a {@code ByteBuffer} containing
     *         inbound or outbound network data for an SSL/TLS connection.
     *
     * @throws IOException on network data error
     * @throws BufferUnderflowException if no enough source bytes available
     *         to make a complete exploration.
     *
     * @return the explored {@code SSLCapabilities} of the SSL/TLS
     *         connection
     */
    public final static SSLCapabilities explore(ByteBuffer source)
            throws IOException;

    /**
     * Launch and explore the security capabilities from byte array.
     * &amp;lt;P&amp;gt;
     * Please NOTE that this method must be called before any handshaking
     * occurs.  The behavior of this method is not defined in this release
     * if the handshake has begun, or has completed.
     * &amp;lt;P&amp;gt;
     * Please NOTE that this method must be called before any handshaking
     * occurs.  Once handshake has begun, or has completed, the security
     * capabilities can not and should not be launched with this method.
     *
     * @param  source
     *         a byte array containing inbound or outbound network data for
     *         an SSL/TLS connection.
     * @param  offset
     *         the start offset in array {@code source} at which the
     *         network data is read from.
     * @param  length
     *         the maximum number of bytes to read.
     *
     * @throws IOException on network data error
     * @throws BufferUnderflowException if no enough source bytes available
     *         to make a complete exploration.
     * @return the explored {@code SSLCapabilities} of the SSL/TLS
     *         connection
     *
     * @see #explore(ByteBuffer)
     */
    public final static SSLCapabilities explore(byte[] source,
            int offset, int length) throws IOException;
}
&lt;/pre&gt;
&lt;br /&gt;&lt;/blockquote&gt;
Please note that the above two classes is not part of JDK. It is used to illustrate how to use JSSE specification of server name indication.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Socket Based Scenarios of a virtual servers dispatcher&lt;/h3&gt;
&lt;div&gt;
&lt;b&gt;Step 1: register server name handler in the dispatcher server&lt;/b&gt;&lt;br /&gt;
At the step, the application may create different SSLContext for different server name indication, or link a certain server name indication to a specified virtual machine or distributed system.
&lt;br /&gt;
&lt;br /&gt;
For example, for server name of &quot;www.example.com&quot;, the registered server name handler may be for a local virtual hosting web service. The local virtual hosting web service will use a specified SSL context. For server name of &quot;www.invalid.com&quot;, the registered server name handler may be for a virtual machine hosting on &quot;10.0.0.36&quot;. The handler may map proxy this connection to the virtual machine.
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Step 2: create a server socket, and accept a new connection&lt;/b&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;    ServerSocket serverSocket = new ServerSocket(serverPort);
    Socket socket = serverSocket.accept();
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Step 3: read and buffer bytes from the socket input stream, and explore the buffered bytes&lt;/b&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;    InputStream ins = socket.getInputStream();

    byte[] buffer = new byte[0xFF];
    int position = 0;
    SSLCapabilities capabilities = null;

    // Read the header of TLS record
    while (position &amp;lt; SSLExplorer.RECORD_HEADER_SIZE) {
        int count = SSLExplorer.RECORD_HEADER_SIZE - position;
        int n = ins.read(buffer, position, count);
        if (n &amp;lt; 0) {
            throw new Exception(&quot;unexpected end of stream!&quot;);
        }
        position += n;
    }

    // Get the required size to exlpore the SSL capabilities
    int recordLength = SSLExplorer.getRequiredSize(buffer, 0, position);
    if (buffer.length &amp;lt; recordLength) {
        buffer = Arrays.copyOf(buffer, recordLength);
    }

    while (position &amp;lt; recordLength) {
        int count = recordLength - position;
        int n = ins.read(buffer, position, count);
        if (n &amp;lt; 0) {
            throw new Exception(&quot;unexpected end of stream!&quot;);
        }
        position += n;
    }

    // Explore
    capabilities = SSLExplorer.explore(buffer, 0, recordLength);;
    if (capabilities != null) {
        System.out.println(&quot;Record version: &quot; +
                capabilities.getRecordVersion());
        System.out.println(&quot;Hello version: &quot; +
                capabilities.getHelloVersion());
    }
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Step 4: get the requested server name from the SSLCapabilities&lt;/b&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;    List&amp;lt;SNIServerName&amp;gt; serverNames = capabilities.getServerNames();
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Step 5: looking for the registered server name handler for this server name indication&lt;/b&gt;
&lt;br /&gt;
Typically, there are two types of handler. The first one is that the service of the hostname is resident in a virtual machine or another distributed separated box. In this case, the application need to forward the connection to the destination. The application requires to read and write the raw internet data, rather than the SSL application from the socket stream.
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;    Socket destinationSocket = new Socket(serverName, 443);

    // forward buffered bytes and network data from the current socket to
    // destinationSocket, proxy-like coding
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
The 2nd one is that the service of the server name is resident in the same process. And the service is able to use the socket directly. In this case, the application will simply set the SSLSocket instance to the server.
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;    SSLContext serviceContext = ...
                    // get service context from registered handler
                    // or create the context on the fly
    SSLSocketFactory serviceSocketFac =
                    serviceContext.getSSLSocketFactory();

    ByteArrayInputStream bais =
        new ByteArrayInputStream(buffer, 0, position);
                           // wrap the buffered bytes
    SSLSocket serviceSocket =
        (SSLSocket)serviceSocketFac.createSocket(socket, bais, true);

    // Now the service can use the serviceSocket as normal.
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
SSLEngine Based Scenarios of a virtual servers dispatcher&lt;/h3&gt;
&lt;br /&gt;
Similar to the socket based scenatios. There is a little different in
the 2nd case in step 5.
&lt;br /&gt;
The 2nd case is that the service of the hostname is resident in the same process. And hostname service is able to use the engine directly. In this case, the application will simply feed the net data to the new engine.
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;    SSLContext serviceContext =
                    // get service context from registered handler
                    // or create the context on the fly
    SSLEngine serviceEngine = serviceContext.createSSLEngine();

    // Now the service can use the buffered bytes and other byte
    // buffer as normal.
&lt;/pre&gt;
&lt;/blockquote&gt;
The scenarios for the cases that bridge SSLSocket source to SSLEngine destination, or SSLEngine source to SSLSocket destination are pretty similar to the above two scenarios.
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
No server name indication extension&lt;/h3&gt;
&lt;br /&gt;
It&#39;s often that there is no server name indication extension in a ClientHello message. There is no way to select a proper service according to server name indication.
&lt;br /&gt;
&lt;br /&gt;
For such cases, the application may want to specify a default service. When there is no server name indication extension, the connection will be delegated to the default service.
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Failover&lt;/h3&gt;
&lt;br /&gt;
Please NOTE that the explore of the security capabilities should neither consume nor produce network or application data. So what about if the explore fails?
&lt;br /&gt;
&lt;br /&gt;
SSLExploree.explore() should not checking the validity of SSL/TLS contents. However, it requires that the record format complies to SSL/TLS specification, and handshaking has not started. SSLExploree.explore() may throw IOException for such bad cases.
&lt;br /&gt;
&lt;br /&gt;
SSLExploree.explore() cannot produce network data. And SSL/TLS protocols requires to reply with proper alert messages. It is not recommended to close the raw socket out of band of SSL/TLS protocols. Failover is recommended to handle exception thrown by SSLExplorer.explore().
&lt;br /&gt;
&lt;br /&gt;
The application need to define a failover SSLContext, it is not used to negotiate any real SSL/TLS connection. Instead, it is used to close the SSL/TLS connection with proper alert message. So the initialization of the context can be very basic.
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&lt;pre&gt;    byte[] buffer = ...       // buffered network data
    boolean failed = true;    // SSLExploree.explore() throws an exception

    // off course, the above explore failed. Faile to failure handler
    SSLContext context = SSLContext.getInstance(&quot;TLS&quot;);
                                        // the failover SSLContext
    context.init(null, null, null);
    SSLSocketFactory sslsf = context.getSocketFactory();
    ByteArrayInputStream bais =
            new ByteArrayInputStream(buffer, 0, position);
    SSLSocket sslSocket = (SSLSocket)sslsf.createSocket(socket, bais, true);

    SNIMatcher matcher = new DenialSNIMatcher(); // see case 2.2.1
    Collection&amp;lt;SNIMatcher&amp;gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
    matchers.add(matcher);
    SSLParameters params = sslSocket.getSSLParameters();
    params.setSNIMatchers(matchers);    // no recognizable server name
    sslSocket.setSSLParameters(params);

    try {
        InputStream sslIS = sslSocket.getInputStream();
        sslIS.read();
    } catch (Exception e) {
        System.out.println(&quot;server exception &quot; + e);
    } finally {
        sslSocket.close();
    }
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
To put it together, as SSLExplore.explore() may fail with exception, the application MUST handle the exception with a failover solution, such as failover SSLContext. An application may also need to handle ClientHello message without server name indication extension, the application MUST specify a default service for non-server-name-indication handshaking. And an application may be expected to handle server name indication properly, the application MUST specify the target service for a particular server name indication.
&lt;br /&gt;
&lt;br /&gt;
Hope it helps!
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
More blog entries about TLS Server Name Indication (SNI) Extension:&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2013/12/tls-server-name-indication-extension.html&quot; style=&quot;line-height: 18px;&quot;&gt;TLS Server Name Indication Extension and Unrecognized_name&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse.html&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse_2.html&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes (Continue)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-typical-user.html&quot;&gt;JEP 114: TLS SNI Extension - Typical User Cases&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/2343273439919346509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/2343273439919346509'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2014/01/jep-114-tls-sni-extension-virtual.html' title='JEP 114: TLS SNI Extension - Virtual Servers Dispatcher'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRA7ANmxPQaAndTuXJwXhfF79Y8WbpvdzVvPwtUcxMBe70RFgpQ55B5PZ_M0B1Engqju0yPwQe44YCqXB3dzXlD_3Fw_bdt3ODrDACWcC3dKOjjBEy7RBtqPwtP6qETnsnGVtj2Ymn5hk/s72-c/8c60a28054636f9f50eef16ef11335e5.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-5510926225638816930</id><published>2014-01-02T21:12:00.001-08:00</published><updated>2014-03-22T17:26:49.250-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>JEP 114: TLS SNI Extension - Typical User Cases</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk4O6Hwm8jUeKDm7bmlw9v-TUOT6vwSBc_DE0okzOR5BV-SGlMJloqtnXl-HuxlAnF5ilYjV4KwDxRM4QH0LW67h4BNfLYvoGXyezUlUwVlqslwUd3CGeOJmM2b5gHTPsmvdad1FNMhlc/s1600/01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk4O6Hwm8jUeKDm7bmlw9v-TUOT6vwSBc_DE0okzOR5BV-SGlMJloqtnXl-HuxlAnF5ilYjV4KwDxRM4QH0LW67h4BNfLYvoGXyezUlUwVlqslwUd3CGeOJmM2b5gHTPsmvdad1FNMhlc/s1600/01.jpg&quot; height=&quot;320&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
The implementation of&amp;nbsp;&lt;a href=&quot;http://openjdk.java.net/jeps/114&quot;&gt;JEP 114&lt;/a&gt;&amp;nbsp;(TLS Server Name Indication (SNI) Extension) had&lt;a href=&quot;http://hg.openjdk.java.net/jdk8/jdk8/jdk/rev/3f62cfc4e83d&quot;&gt;&amp;nbsp;integrated into JDK 8&lt;/a&gt;&amp;nbsp;at October, 2012. In&amp;nbsp;&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse.html&quot;&gt;the previous two blog entries&lt;/a&gt;, we talked about the behavior changes in JSSE. Let&#39;s look at a few typical user cases. Please refer to javax.net.ssl package of&amp;nbsp;&lt;a href=&quot;http://download.java.net/jdk8/docs/api/&quot;&gt;JDK 8 APIs&lt;/a&gt;&amp;nbsp;for the detailed specification.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Client side user cases&lt;/h3&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Case C-1: I want to access &quot;www.example.com&quot;&lt;/b&gt;&lt;/div&gt;
Set the host name explicit.
&lt;br /&gt;
&lt;pre&gt;    SNIHostName serverName = new SNIHostName(&quot;www.example.com&quot;);
    List&amp;lt;SNIServerName&amp;gt; serverNames = new ArrayList&amp;lt;&amp;gt;(1);
    serverNames.add(serverName);
    sslParameters.setServerNames(serverNames);&lt;/pre&gt;
It is recommend that the client always specify the host name.

&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Case C-2:&amp;nbsp;I don&#39;t want to use server name indication&lt;/b&gt;&lt;/div&gt;
The server side terminates the transaction if server name indication is presented. I cannot use server name indication because of the compatibility issues in server side.&lt;br /&gt;
&lt;br /&gt;
Disable the server name indication with empty server name list: &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&lt;pre&gt;    List&amp;lt;SNIServerName&amp;gt; serverNames = new ArrayList&amp;lt;&amp;gt;(1);
    sslParameters.setServerNames(serverNames);
&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Case C-3:&amp;nbsp;I want to access URL, &quot;https://www.example.com&quot;&lt;/b&gt;&lt;/div&gt;
Doing nothing in SunJSSE, the provider default behaviors will set the hostname for me. I don&#39;t have to care about what&#39;s the real server name indication.&lt;br /&gt;
&lt;br /&gt;
But third parties&#39; providers may not support default server name indication. It is recommended to use Case C-1 to be provider independent.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Case C-4:&amp;nbsp;I want to switch a socket from server mode to client mode&lt;/b&gt;&lt;/div&gt;
The socket was in server mode, but I need it work in client mode. Firstly, need to switch the mode:Set the host name explicit.&lt;br /&gt;
&lt;pre&gt;    sslSocket.setUseClientMode(true);&lt;/pre&gt;
Secondly, need to reset the server name indication parameters in server mode, &amp;nbsp;see case S-1~S-5 for different purposes.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;h3&gt;
Server side user cases&lt;/h3&gt;
&lt;div&gt;
&lt;b&gt;Case S-1:&amp;nbsp;I want to accept all kind of server name indication&lt;/b&gt;&lt;/div&gt;
Doing nothing, the server will ignore the server name indication.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;Case S-2:&amp;nbsp;I want to deny all server name indication of type host_name&lt;/b&gt;&lt;/div&gt;
Set an invalid server name pattern for host_name:&lt;br /&gt;
&lt;pre&gt;    SNIMatcher matcher = SNIHostName.createSNIMatcher(&quot;&quot;);
    Collection&amp;lt;SNIMatcher&amp;gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
    matchers.add(matcher);
    sslParameters.setSNIMatchers(matchers);&lt;/pre&gt;
Or define a new SNIMatcher extension, which the matches() method always returns false.&lt;/div&gt;
&lt;div&gt;
&lt;pre&gt;    class DenialSNIMatcher extends SNIMatcher {
        DenialSNIMatcher() {
            super(StandardConstants.SNI_HOST_NAME);
        }

        @Override
        public boolean matches(SNIServerName serverName) {
            return false;
        }
    }

    SNIMatcher matcher = new DenialSNIMatcher();
    Collection&amp;lt;SNIMatcher&amp;gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
    matchers.add(matcher);

    sslParameters.setSNIMatchers(matchers);&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Case S-3:&amp;nbsp;I want to be accessed as &quot;www.example.com&quot;&lt;/b&gt;&lt;/div&gt;
Set the recognizable server name for &quot;host_name&quot; as &quot;www.example.com&quot;:&lt;br /&gt;
&lt;pre&gt;    SNIMatcher matcher =
        SNIHostName.createSNIMatcher(&quot;www\\.example\\.com&quot;);
    Collection&amp;lt;SNIMatcher&amp;gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
    matchers.add(matcher);
    sslParameters.setSNIMatchers(matchers);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Case S-4:&amp;nbsp;I want to be accessed as &quot;www.example.com&quot; or &quot;www.example.net&quot;&lt;/b&gt;&lt;/div&gt;
Set the recognizable server name for &quot;host_name&quot; as &quot;www.example.com&quot; &amp;nbsp;or &quot;www.example.net&quot;:&lt;br /&gt;
&lt;pre&gt;    SNIMatcher matcher =
        SNIHostName.createSNIMatcher(&quot;www\\.example\\.(com|net)&quot;);
    Collection&amp;lt;SNIMatcher&amp;gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
    matchers.add(matcher);
    sslParameters.setSNIMatchers(matchers);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;Case S-5:&amp;nbsp;I want to be accessed as any hostname in the example.com domain&lt;/b&gt;&lt;/div&gt;
Set the recognizable server name for &quot;host_name&quot; as &quot;*.example.com&quot;:&lt;br /&gt;
&lt;pre&gt;    SNIMatcher matcher =
        SNIHostName.createSNIMatcher(&quot;(.*\\.)*example\\.com&quot;);
    Collection&amp;lt;SNIMatcher&amp;gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
    matchers.add(matcher);
    sslParameters.setSNIMatchers(matchers);&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b&gt;Case S-6:&amp;nbsp;I want to switch a socket from client mode to server mode&lt;/b&gt;&lt;/div&gt;
The socket was in client mode, but I need it work in server mode. &amp;nbsp;Firstly, need to switch the mode:&lt;br /&gt;
&lt;pre&gt;    sslSocket.setUseClientMode(true);&lt;/pre&gt;
Secondly, need to reset the server name indication in client mode, see case C-1-C-3 for different purpose.
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More blog entries about TLS Server Name Indication (SNI) Extension:&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2013/12/tls-server-name-indication-extension.html&quot; style=&quot;line-height: 18px;&quot;&gt;TLS Server Name Indication Extension and Unrecognized_name&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse.html&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse_2.html&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes (Continue)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-virtual.html&quot;&gt;JEP 114: TLS SNI Extension - Virtual Servers Dispatcher&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/5510926225638816930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/5510926225638816930'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2014/01/jep-114-tls-sni-extension-typical-user.html' title='JEP 114: TLS SNI Extension - Typical User Cases'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk4O6Hwm8jUeKDm7bmlw9v-TUOT6vwSBc_DE0okzOR5BV-SGlMJloqtnXl-HuxlAnF5ilYjV4KwDxRM4QH0LW67h4BNfLYvoGXyezUlUwVlqslwUd3CGeOJmM2b5gHTPsmvdad1FNMhlc/s72-c/01.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-6850343503219864745</id><published>2014-01-02T02:01:00.003-08:00</published><updated>2014-03-22T17:27:32.494-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>JEP 114: TLS SNI Extension - SunJSSE Behavior Changes (Continue)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE73tGr_5t9N4LkC3dRA4s5dYTgLD5W0B9jAp63CC7gwvD7UNXV8VXYSYzVWnXKMK4aod8r97PeHWOvrsJehJ21_seLh_M0sqC0XrCW8N_2h6ziF8eIsIU_AuVMQeyF4xUh1PK8Xh-EeA/s1600/002.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE73tGr_5t9N4LkC3dRA4s5dYTgLD5W0B9jAp63CC7gwvD7UNXV8VXYSYzVWnXKMK4aod8r97PeHWOvrsJehJ21_seLh_M0sqC0XrCW8N_2h6ziF8eIsIU_AuVMQeyF4xUh1PK8Xh-EeA/s1600/002.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Students Apartment,&amp;nbsp;Harbin Institute of Technology (HIT), China&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
The implementation of &lt;a href=&quot;http://openjdk.java.net/jeps/114&quot;&gt;JEP 114&lt;/a&gt; (TLS Server Name Indication (SNI) Extension) had&lt;a href=&quot;http://hg.openjdk.java.net/jdk8/jdk8/jdk/rev/3f62cfc4e83d&quot;&gt; integrated into JDK 8&lt;/a&gt;&amp;nbsp;at October, 2012. In &lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse.html&quot;&gt;the previous blog entry&lt;/a&gt;, we talked about the behavior changes in client and server mode. This blog entry will continue to talk about behavior changes in key manager and trust manager of JSSE. Please refer to javax.net.ssl package of&amp;nbsp;&lt;a href=&quot;http://download.java.net/jdk8/docs/api/&quot;&gt;JDK 8 APIs&lt;/a&gt; for the detailed specification.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Server Name Indication (SNI) sensitive KeyManager&lt;/h3&gt;
&lt;br /&gt;
In JDK 7 and previous releases, the KeyManager of server is not server
name indication sensitive. The KeyManager of SunJSSE provider does not
check the server name indication in order to get the proper key and
certificate.
&lt;br /&gt;
&lt;br /&gt;
In JDK 8, the KeyManager of server of SunJSSE provider will try check the server name indication in extension and select the appropriate keys according to requested server name indication.
&lt;br /&gt;
&lt;br /&gt;
For example, supposed that there are three key/cert entries in server key store. The subject of the certs are &quot;cn=www.example.com&quot;, &quot;cn=www.invalid.com&quot; and &quot;cn=www.example.net&quot;. When the client requested server name indication is &quot;www.example.net&quot;, the server should be able to select the cert with subject &quot;cn=www.example.net&quot;, rather than the other two certs.
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Server name indication sensitive TrustManager&lt;/h3&gt;
&lt;br /&gt;
Endpoint identification can be based on IP address or literal hostname.
&lt;br /&gt;
&lt;br /&gt;
In JDK 7, if a SSL/TSL connection specified the literal hostname of the server, the hostname will be used to make the endpoint identification against the peer&#39;s identity presented in the end-entity X.509 certificate.
&lt;br /&gt;
&lt;br /&gt;
For example:
&lt;br /&gt;
&lt;pre&gt; 
        SSLSocketFactory factory = ...
        SSLSocket sslSocket = factory.createSocket(&quot;www.example.com&quot;, 443);
&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
the hostname, &quot;www.example.com&quot; will be used to make the endpoint identification.
&lt;br /&gt;
&lt;br /&gt;
While for&lt;br /&gt;
&lt;pre&gt;        SSLSocketFactory factory = ...
        SSLSocket sslSocket = factory.createSocket(&quot;172.16.10.6&quot;, 443);
&lt;/pre&gt;
&lt;pre&gt;&lt;/pre&gt;
as the hostname is an IP address, the endpoint identification cannot be used for literal hostname.
&lt;br /&gt;
&lt;br /&gt;
In JDK 8, developers have a chance to explicitly set the server name indication with SSLParameters.setServerNames(List&amp;lt;SNIServerName&amp;gt; serverNames). The server name indication in client mode also has impact on endpoint identification.
&lt;br /&gt;
&lt;br /&gt;
In SunJSSE provider, in client mode, the endpoint identification in the implementation of X509ExtendedTrustManager will make use of the server name indication, retrieved by ExtendedSSLSession.getRequestedServerNames().
&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;pre&gt;        SSLSocketFactory factory = ...
        SSLSocket sslSocket = factory.createSocket(&quot;172.16.10.6&quot;, 443);
        // SSLEngine sslEngine = sslContext.createSSLEngine(&quot;172.16.10.6&quot;, 443);
 
        SNIHostName serverName = new SNIHostName(&quot;www.example.com&quot;);
        List&amp;lt;SNIServerName&amp;gt; serverNames = new ArrayList&amp;lt;&amp;gt;(1);
        serverNames.add(serverName);
 
        SSLParameters params = sslSocket.getSSLParameters();
        params.setServerNames(serverNames);
        sslSocket.setSSLParameters(params);
        // sslEngine.setSSLParameters(params);
&lt;/pre&gt;
the hostname in server name indication, &quot;www.example.com&quot;, will be used to make endpoint identification against the peer&#39;s identity presented in the end-entity X.509 certificate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More blog entries about TLS Server Name Indication (SNI) Extension:&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2013/12/tls-server-name-indication-extension.html&quot; style=&quot;line-height: 18px;&quot;&gt;TLS Server Name Indication Extension and Unrecognized_name&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse.html&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-typical-user.html&quot;&gt;JEP 114: TLS SNI Extension - Typical User Cases&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-virtual.html&quot;&gt;JEP 114: TLS SNI Extension - Virtual Servers Dispatcher&lt;/a&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/6850343503219864745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/6850343503219864745'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2014/01/jep-114-tls-sni-extension-sunjsse_2.html' title='JEP 114: TLS SNI Extension - SunJSSE Behavior Changes (Continue)'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE73tGr_5t9N4LkC3dRA4s5dYTgLD5W0B9jAp63CC7gwvD7UNXV8VXYSYzVWnXKMK4aod8r97PeHWOvrsJehJ21_seLh_M0sqC0XrCW8N_2h6ziF8eIsIU_AuVMQeyF4xUh1PK8Xh-EeA/s72-c/002.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-7664311452175150930</id><published>2014-01-02T01:46:00.000-08:00</published><updated>2014-03-22T17:27:56.718-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>JEP 114: TLS SNI Extension - SunJSSE Behavior Changes</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5YWm4CpBIjwKbhcHc13sKUyqshe_CxPg5rhtbJD3QxutqlbDD7kcfzASOcx0oiwenm_PNI_TmVVC30dUKQ3ZtuCggeneoqQBRKOksYuwoOemhyTDgosif3gtPaZu5-AnXBRurny0bj8/s1600/001.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5YWm4CpBIjwKbhcHc13sKUyqshe_CxPg5rhtbJD3QxutqlbDD7kcfzASOcx0oiwenm_PNI_TmVVC30dUKQ3ZtuCggeneoqQBRKOksYuwoOemhyTDgosif3gtPaZu5-AnXBRurny0bj8/s1600/001.jpg&quot; height=&quot;400&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Silver Cave, Guilin, China&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
The implementation of &lt;a href=&quot;http://openjdk.java.net/jeps/114&quot;&gt;JEP 114&lt;/a&gt; (TLS Server Name Indication (SNI) Extension) had&lt;a href=&quot;http://hg.openjdk.java.net/jdk8/jdk8/jdk/rev/3f62cfc4e83d&quot;&gt; integrated into JDK 8&lt;/a&gt;&amp;nbsp;at October, 2012. This blog entry will talk about some useful behavior changes and user cases that make use of SNI extenstion. &amp;nbsp;Please refer to javax.net.ssl package of&amp;nbsp;&lt;a href=&quot;http://download.java.net/jdk8/docs/api/&quot;&gt;JDK 8 APIs&lt;/a&gt; for the detailed specification.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
The SNI extension in client mode&lt;/h3&gt;
&lt;br /&gt;
In JDK 7, if a SSL/TSL connection specified hostname of the server, and when the hostname is fully qualified domain name (FQDN), the hostname will be used as the default server name indication in ClientHello message, implicitly.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;pre&gt;&amp;nbsp; &amp;nbsp; SSLSocketFactory factory = ...
&amp;nbsp; &amp;nbsp; SSLSocket sslSocket = factory.createSocket(&quot;www.example.com&quot;, 443);
&lt;/pre&gt;
&lt;br /&gt;
the hostname, &quot;www.example.com&quot; will appear in the server name indication extension in ClientHello message.&lt;br /&gt;
&lt;br /&gt;
While for&lt;br /&gt;
&lt;pre&gt;&amp;nbsp; &amp;nbsp; SSLSocketFactory factory = ...
&amp;nbsp; &amp;nbsp; SSLSocket sslSocket = factory.createSocket(&quot;172.16.10.6&quot;, 443);&lt;/pre&gt;
&lt;br /&gt;
as the hostname is an IP address, No server name indication extension will appear in ClientHello message.&lt;br /&gt;
&lt;br /&gt;
And for&lt;br /&gt;
&lt;pre&gt;&amp;nbsp; &amp;nbsp; SSLSocketFactory factory = ...
&amp;nbsp; &amp;nbsp; SSLSocket sslSocket = factory.createSocket(&quot;docs&quot;, 443);
&lt;/pre&gt;
&lt;br /&gt;
although the real hostname may be docs.example.com, but as &quot;docs&quot; is not a fully qualified domain name, No server name indication extension will appear in ClientHello message.&lt;br /&gt;
&lt;br /&gt;
For&lt;br /&gt;
&lt;pre&gt;&amp;nbsp; &amp;nbsp; SSLSocketFactory factory = ...
&amp;nbsp; &amp;nbsp; SSLSocket sslSocket = factory.createSocket(&quot;docs.example&quot;, 443);
&lt;/pre&gt;
&lt;br /&gt;
the real hostname may be docs.example.com, although &quot;docs.example&quot; is not a fully qualified domain name, but the computer cannot tell this point. &quot;docs.example&quot; will be regarded as a fully qualified domain name, and server name indication extension will appear in ClientHello message. It is ambiguous!&lt;br /&gt;
&lt;br /&gt;
In JDK 8, developers have a chance to explicitly set the server name indication. It is SSLParameters.setServerNames(List&lt;sniservername&gt; serverNames).&lt;/sniservername&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;nbsp; &amp;nbsp; SSLSocketFactory factory = ...
&amp;nbsp; &amp;nbsp; SSLSocket sslSocket = factory.createSocket(&quot;172.16.10.6&quot;, 443);
&amp;nbsp; &amp;nbsp; // SSLEngine sslEngine = sslContext.createSSLEngine(&quot;172.16.10.6&quot;, 443);

&amp;nbsp; &amp;nbsp; SNIHostName serverName = new SNIHostName(&quot;www.example.com&quot;);
&amp;nbsp; &amp;nbsp; List&lt;sniservername&gt; serverNames = new ArrayList&amp;lt;&amp;gt;(1);&lt;/sniservername&gt;
&amp;nbsp; &amp;nbsp; serverNames.add(serverName);

&amp;nbsp; &amp;nbsp; SSLParameters params = sslSocket.getSSLParameters();
&amp;nbsp; &amp;nbsp; params.setServerNames(serverNames);

&amp;nbsp; &amp;nbsp; sslSocket.setSSLParameters(params);
&amp;nbsp; &amp;nbsp; // sslEngine.setSSLParameters(params);&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;
The SNI extension in server mode&lt;/h3&gt;
&lt;br /&gt;
In JDK 7, server will ignore all server name indication extension.
&lt;br /&gt;
&lt;br /&gt;
In JDK 8, by default, server reserves the behaviors of JDK 7. &amp;nbsp;For better interoperability, providers generally will not define default matchers so that by default servers will ignore the SNI extension and continue the handshake.
However, in JDK 8, server can use SNIMatcher to decide how to recognize server name indication.
&lt;br /&gt;
&lt;pre&gt;        SSLSocket sslSocket = sslServerSocket.accept();
 
        SNIMatcher matcher = SNIHostName.createSNIMatcher(
                                        &quot;www\\.example\\.(com|org)&quot;);
        Collection&lt;snimatcher&gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
        matchers.add(matcher);
 
        SSLParameters params = sslSocket.getSSLParameters();
        params.setSNIMatchers(matchers);
        sslSocket.setSSLParameters(params);
&lt;/snimatcher&gt;&lt;/pre&gt;
Or&lt;br /&gt;
&lt;pre&gt;        SSLServerSocket sslServerSocket = ...;
 
        SNIMatcher matcher = SNIHostName.createSNIMatcher(
                                        &quot;www\\.example\\.(com|org)&quot;);
        Collection&lt;snimatcher&gt; matchers = new ArrayList&amp;lt;&amp;gt;(1);
        matchers.add(matcher);
 
        SSLParameters params = sslServerSocket.getSSLParameters();
        params.setSNIMatchers(matchers);
        sslServerSocket.setSSLParameters(params);
 
        SSLSocket sslSocket = sslServerSocket.accept();
&lt;/snimatcher&gt;&lt;/pre&gt;
&lt;br /&gt;
If server does not configure the server name matchers, the behavior is
the same as JDK 7.
&lt;br /&gt;
The following table shows the interaction behaviors between server SNI
configuration and client request SNI in ClientHello message.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;  Server configured matcher           client requested SNI
                             www.example.com    www.invalid.com    empty
 
        www\\.example\\.com       +                    x             v
        www\\.invalid\\.com       x                    +             v
        no matcher                v                    v             v
 
v: accepted server name indication, but no server name confirmation in
   server hello message.
+: accepted server name indication, response with recognized server name
   confirmation in server hello message
x: rejected with unrecognized_name fatal error
&lt;/pre&gt;
&lt;br /&gt;
For example, if the server name in SNI extension of ClientHello message is &quot;www.example.com&quot;, and the server is configured to support &quot;www.example.com&quot;, the server will accept the SNI extension, and reply a confirmation in server hello message. However, if the server is configurated to support &quot;www.invalid.com&quot;, but not &quot;www.example.com&quot;, the server will deny the SNI extension, and response with a unrecognized_name fatal error.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More blog entries about TLS Server Name Indication (SNI) Extension:&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2013/12/tls-server-name-indication-extension.html&quot; style=&quot;line-height: 18px;&quot;&gt;TLS Server Name Indication Extension and Unrecognized_name&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse_2.html&quot; style=&quot;line-height: 18px;&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes (Continue)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-typical-user.html&quot;&gt;JEP 114: TLS SNI Extension - Typical User Cases&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-virtual.html&quot;&gt;JEP 114: TLS SNI Extension - Virtual Servers Dispatcher&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/7664311452175150930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/7664311452175150930'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2014/01/jep-114-tls-sni-extension-sunjsse.html' title='JEP 114: TLS SNI Extension - SunJSSE Behavior Changes'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc5YWm4CpBIjwKbhcHc13sKUyqshe_CxPg5rhtbJD3QxutqlbDD7kcfzASOcx0oiwenm_PNI_TmVVC30dUKQ3ZtuCggeneoqQBRKOksYuwoOemhyTDgosif3gtPaZu5-AnXBRurny0bj8/s72-c/001.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-460059351163763271</id><published>2013-12-03T20:45:00.001-08:00</published><updated>2017-03-19T09:55:18.015-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>TLS Server Name Indication Extension and Unrecognized_name</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPqrTy0fg91gz5oMuycoJsMYykHGX1tMtkGAOb9veBMmgUDeilE31KFFc34eLdhjtN0pnvdfaUHU2Ot3_dquL-bzXFRciaQNbdaFs0PMVoi8Vr-RbjjqufM2L6NM5NXysM_2MyFqKDIds/s1600/01.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPqrTy0fg91gz5oMuycoJsMYykHGX1tMtkGAOb9veBMmgUDeilE31KFFc34eLdhjtN0pnvdfaUHU2Ot3_dquL-bzXFRciaQNbdaFs0PMVoi8Vr-RbjjqufM2L6NM5NXysM_2MyFqKDIds/s1600/01.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Heavy Pond,&amp;nbsp;Jianfengling National Forest Park, Ledong, Hainan, China&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
It&#39;s getting hot that some TLS/HTTPS server failed with &quot;unrecognized_name&quot;. For example, &lt;a href=&quot;http://forums.adobe.com/thread/913234&quot; target=&quot;_blank&quot;&gt;the Adobe AIR 3 Code Signing Certificate Problem&lt;/a&gt;, &lt;a href=&quot;https://groups.google.com/forum/?fromgroups#%21topic/air-tight/F8041xo4VYc&quot; target=&quot;_blank&quot;&gt;the ADT handshake alert&lt;/a&gt;, and &lt;a href=&quot;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7127374&quot; target=&quot;_blank&quot;&gt;the jarsigner issue with timestamp.geotrust.com&lt;/a&gt;, etc. This entry will discussion some background of the &quot;unrecognized_name&quot; alert, and the TLS Server Name Indication (SNI) extension.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Background&lt;/h3&gt;
&lt;br /&gt;
&quot;Unrecognized_name&quot; is an error alert, define by &lt;a href=&quot;http://www.ietf.org/rfc/rfc4366.txt&quot; target=&quot;_blank&quot;&gt;RFC4366&lt;/a&gt;. &amp;nbsp;In section 4 of &lt;a href=&quot;http://www.ietf.org/rfc/rfc4366.txt&quot; target=&quot;_blank&quot;&gt;RFC4366&lt;/a&gt;:
&lt;br /&gt;
&lt;pre&gt;- &quot;unrecognized_name&quot;: this alert is sent by servers that receive a server_name extension request, but do not recognize the server name.  This message MAY be fatal.
&lt;/pre&gt;
And in section 3.1 of of &lt;a href=&quot;http://www.ietf.org/rfc/rfc4366.txt&quot; target=&quot;_blank&quot;&gt;RFC4366&lt;/a&gt;:
&lt;br /&gt;
&lt;pre&gt;If the server understood the client hello extension but does not recognize the server name, it SHOULD send an &quot;unrecognized_name&quot; alert (which MAY be fatal).&lt;/pre&gt;
&lt;br /&gt;
From above sections, we see that &quot;unrecognized_name&quot; is related to &quot;the server name&quot; or &quot;server_name&quot; extension. What is the &quot;server name&quot;? In section 3.1 of &lt;a href=&quot;http://www.ietf.org/rfc/rfc4366.txt&quot; target=&quot;_blank&quot;&gt;RFC4366&lt;/a&gt;:
&lt;br /&gt;
&lt;pre&gt;3.1. Server Name Indication&amp;nbsp;

TLS does not provide a mechanism for a client to tell a server the name of the server it is contacting. &amp;nbsp;It may be desirable for clients to provide this information to facilitate secure connections to servers that host multiple &#39;virtual&#39; servers at a single underlying network address.
&lt;/pre&gt;
&lt;br /&gt;
In order to provide the server name, clients MAY include an extension of type &quot;server_name&quot; in the (extended) client hello.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Let&#39;s Look Into a Case&lt;/h3&gt;
&lt;br /&gt;
There is a lot of discussion about the timestamp service from timestamp.EXAMPLE.com. The service is hosted as &quot;https://timestamp.EXAMPLE.com/tsa&quot;. Let&#39;s look at the scenarios of the access:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Client want to negotiate a TLS connection with timestamp.EXAMPLE.com. By default, the server name indication extension will be included in the client hello. The server name is &quot;timestamp.EXAMPLE.com&quot;. &amp;nbsp;It is expected that:&lt;/li&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;The server does not understand the server name indication extension. No problem, the server will ignore the extension, will continue the negotiation. &amp;nbsp;No impact on the TLS negotiation/handshaking.&lt;/li&gt;
&lt;li&gt;The server understands the server name indication extension, but does not recognize the server &amp;nbsp;name. In this case, that&#39;s to say, the server does not think that the server name in the request, &quot;timestamp.EXAMPLE.com&quot;, is its supported/recognized server name.&lt;/li&gt;
&lt;li&gt;The server is able to recognize the server name in the request. The handshaking will go on.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;li&gt;&amp;nbsp;The server response with a &quot;unexpected_message&quot; fatal alert. As means that the server understand the server name indication extension, but it does not recognize the server name. It looks a little weird in this case in that the server is &quot;timestamp.EXAMPLE.com&quot;, but it does not admit that it is &quot;timestamp.EXAMPLE.com&quot;.&lt;/li&gt;
&lt;li&gt;The client have to terminate the negotiation because the server has denied to continue.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&amp;nbsp;It is strange, is it? The server, &quot;timestamp.EXAMPLE.com&quot;, said it is not &quot;&quot;timestamp.EXAMPLE.com&quot;.&lt;br /&gt;
&lt;br /&gt;
Know nothing about the details in TSA server, timestamp.EXAMPLE.com, it looks more like a configuration problem in the server side.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Workaround&lt;/h3&gt;
&lt;br /&gt;
It would be nice if the timestamp.EXAMPLE.com server would like to correct the behaviors in server side. &amp;nbsp;But before the correction, many applications may need to work day to day. As a workaround, the client can disable the server name indication in client hello.&lt;br /&gt;
&lt;br /&gt;
Java platform starts to support server name indication extension from JDK 7. &amp;nbsp;However, considering the compatibility issues, a system property, &quot;&lt;a href=&quot;http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Customization&quot;&gt;jsse.enableSNIExtension&lt;/a&gt;&quot;, is defined to disable the extension in TLS handshaking:
&lt;br /&gt;
&lt;pre&gt;jsse.enableSNIExtension system property.

Server Name Indication (SNI) is a TLS extension, defined in RFC4366.It enables TLS connections to virtual servers, in which multiple servers for different network names are hosted at a single underlying network address.

Some very old SSL/TLS vendors may not be able handle SSL/TLS extensions. In this case, set this property to false to disable the SNI extension.
&lt;/pre&gt;
&lt;br /&gt;
OK, let looks at an example in jarsigner in JDK 7. &amp;nbsp;The 2nd one uses the system property, &lt;a href=&quot;http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Customization&quot;&gt;jsse.enableSNIExtension&lt;/a&gt;, to disable the server name indication extension in client.
&lt;br /&gt;
&lt;pre&gt;$ jarsigner -keystore myKeyStore -tsa https://timestamp.EXAMPLE.com/tsa \
      -signedjar signedjar.jar toBeSigned.jar myKeyAliasInKeyStore

jarsigner: unable to sign jar: javax.net.ssl.SSLProtocolException: \
      handshake alert: &amp;nbsp;unrecognized_name

$ jarsigner -J-Djsse.enableSNIExtension=false \
      -keystore myKeyStore -tsa https://timestamp.EXAMPLE.com/tsa \
      -signedjar signedjar.jar toBeSigned.jar myKeyAliasInKeyStore

&lt;/pre&gt;
&lt;br /&gt;
Hope it helps!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More blog entries about TLS Server Name Indication (SNI) Extension:&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse.html&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-sunjsse_2.html&quot;&gt;JEP 114: TLS SNI Extension - SunJSSE Behavior Changes (Continue)&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-typical-user.html&quot;&gt;JEP 114: TLS SNI Extension - Typical User Cases&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://sim.ivi.co/2014/01/jep-114-tls-sni-extension-virtual.html&quot;&gt;JEP 114: TLS SNI Extension - Virtual Servers Dispatcher&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/460059351163763271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/460059351163763271'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2013/12/tls-server-name-indication-extension.html' title='TLS Server Name Indication Extension and Unrecognized_name'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPqrTy0fg91gz5oMuycoJsMYykHGX1tMtkGAOb9veBMmgUDeilE31KFFc34eLdhjtN0pnvdfaUHU2Ot3_dquL-bzXFRciaQNbdaFs0PMVoi8Vr-RbjjqufM2L6NM5NXysM_2MyFqKDIds/s72-c/01.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-5984619360299886264</id><published>2013-11-12T23:33:00.000-08:00</published><updated>2014-03-22T17:29:02.553-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="OCSP Stapling"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Understanding of OCSP Stapling</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLzDal-Mo79Q2nC7b885MlseMJHrGYXZs6b5Os9r7DAbO5DwbaAj9OHwbrLqTVRwhOolP_8dZ8u92eQER60p3X_6Ulr0WzUW8GWMSDhMx6cexE_5uEoffaQF2OAhhWL4n7L56Xu5OMb4/s1600/2013-10-31+183622.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Sun and Moon Pagodas&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLzDal-Mo79Q2nC7b885MlseMJHrGYXZs6b5Os9r7DAbO5DwbaAj9OHwbrLqTVRwhOolP_8dZ8u92eQER60p3X_6Ulr0WzUW8GWMSDhMx6cexE_5uEoffaQF2OAhhWL4n7L56Xu5OMb4/s1600/2013-10-31+183622.jpg&quot; height=&quot;300&quot; title=&quot;Sun and Moon Pagodas, Shanhu Lake, Guilin, China&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Sun and Moon Pagodas, Shanhu Lake, Guilin, China&lt;/td&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
What&#39;s OCSP Stapling?&lt;/h3&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
OCSP 
stapling, also known as the TLS Certificate Status Request extension, is
 an alternative approach to the Online Certificate Status Protocol 
(OCSP) for checking the revocation status of X.509 digital certificates.
 It allows the presenter of a certificate to bear the resource cost 
involved in providing OCSP responses, instead of the issuing Certificate
 Authority (CA). [&lt;a href=&quot;http://en.wikipedia.org/wiki/OCSP_stapling&quot;&gt;WIKI&lt;/a&gt;]&lt;br /&gt;
&lt;br /&gt;
With
 OCSP stapling, it is the responsibility of the web site to get the OCSP
 response and send OCSP response to clients/browsers in SSL/TLS 
handshaking. &lt;br /&gt;
&lt;br /&gt;
OCSP stapling is defined as TLS Certificate Status Request extension in section 8 of &lt;a href=&quot;http://www.ietf.org/rfc/rfc6066.txt&quot;&gt;RFC 6066&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
The Benefits of OCSP Stapling&lt;/h3&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;The performance bottleneck of OCSP server&lt;br /&gt;If client checks the 
certificate status directly from OCSP server, for each client with a 
given certificate, the OCSP server has to response with a particular 
certificate status. For high traffic web site, OCSP server is likely to 
be the performance bottleneck.&amp;nbsp; The client side also need more 
cycles (DNS, networking, CPU etc.) to communicate with OCSP server.&lt;br /&gt;
&lt;br /&gt;
OCSP stapling can save OCSP query cost of both OCSP server and clients.&amp;nbsp;
 The certificate holder (the server), rather than the client, queries 
the certificate status from OCSP server in a regular interval.&amp;nbsp; And the 
OCSP response can be used directly by client side in a &quot;stapled&quot; 
approach.&amp;nbsp; Note that the server performance impact is pretty limited as 
the OCSP response (valid from hours to days) can be cached and used 
repeatedly in the valid period.&lt;br /&gt;
&lt;br /&gt;
The performance impact has very bad side effect that browsers/clients 
may choose to disable certificate status checking or continue the TLS 
handshaking if the OCSP server is not accessible (for example, &lt;a href=&quot;https://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/&quot;&gt;Firefox will continue the connection&lt;/a&gt; if it cannot connect to the CA, and the same for &lt;a href=&quot;http://blogs.msdn.com/b/ieinternals/archive/2011/04/07/enabling-certificate-revocation-check-failure-warnings-in-internet-explorer.aspx&quot;&gt;IE&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
According to &lt;a href=&quot;http://blog.cloudflare.com/ocsp-stapling-how-cloudflare-just-made-ssl-30&quot;&gt;a report from CloudFlare&lt;/a&gt;, OCSP stapling can make SSL 30% faster.
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;The potential privacy impairment of OCSP request&lt;br /&gt; In normal OCSP 
scenarios, when client requests a OCSP service, it exposes both the 
server (via server certificate entry) and itself (via IP address at 
least) to OCSP server, and hence disclose the browser behaviors.&amp;nbsp; A way 
to verify validity without disclosing browsing behavior would be 
desirable for some groups of users.&lt;br /&gt;&lt;br /&gt;OCSP stapling solved this 
issue because client won&#39;t need to query OCSP server any more, while 
server queries of OCSP status won&#39;t disclose any client information at 
all.
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;The limitation of the Captive Portal technique

&lt;br /&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Captive_portal&quot;&gt;The captive portal technique&lt;/a&gt;
 forces an HTTP client on a network to see a special web page (usually 
for authentication purposes) before using the Internet normally.&amp;nbsp;&amp;nbsp; In 
such environments,&amp;nbsp; clients are not able to check OCSP status of the 
SSL/TLS certificate since all Internet access is blocked until 
authentication is successful.&lt;br /&gt;
&lt;br /&gt;
There is no such limitation with OCSP stapling as OCSP status is stapled within the target SSL handing processes.&amp;nbsp; &lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
The deployment of OCSP Stapling&lt;/h3&gt;
&lt;br /&gt;
In Server side,&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Apache HTTP Server supports OCSP stapling since version 2.3.3, with &lt;a href=&quot;https://httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslusestapling&quot;&gt;SSLUseStapling Directive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nginx web server supports OCSP stapling since version 1.3.7/1.4.0, with &lt;a href=&quot;http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_stapling&quot;&gt;ssl_stapling directive&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Microsoft IIS web server supports OCSP stapling since version 7. The feature is enabled by default. It is also &lt;a href=&quot;http://technet.microsoft.com/en-us/library/hh826044%28v=ws.10%29.aspx&quot;&gt;enabled in Kerberos PKINIT&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
In client side,&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Beginning with Windows Server 2008,&lt;a href=&quot;http://technet.microsoft.com/en-us/library/hh826044%28v=ws.10%29.aspx&quot;&gt; Kerberos clients will request OCSP stapling when using PKINIT by default&lt;/a&gt;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Firefox,&amp;nbsp; since &lt;a href=&quot;http://www.ghacks.net/2013/08/01/firefox-25-gets-ocsp-stapling-which-improves-privacy/&quot;&gt;version 25&lt;/a&gt; (and this &lt;a href=&quot;https://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/&quot;&gt;link&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;IE
 (it is said OCSP stapling is supported since Vista, but I did not get 
the declare yet.&amp;nbsp; IE 10 does support OSCP stapling according to my 
test.)&lt;/li&gt;
&lt;li&gt;Google Chrome browser (no data so far when it get supported.&amp;nbsp; Chrom version 30 does support it according to my test)&lt;/li&gt;
&lt;li&gt;Opera browser (no date so far when it get supported. Opera 12.11 does support it according to my test)&lt;/li&gt;
&lt;/ul&gt;
TLS Vendors,&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;The OpenSSL project included support in their 0.9.8h since 2008, please also take care of &lt;a href=&quot;http://www.openssl.org/news/secadv_20110208.txt&quot;&gt;the OCSP stapling vulnerability in OpenSSL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Microsoft IIS/Schennel &lt;a href=&quot;http://technet.microsoft.com/en-us/library/ee619754%28WS.10%29.aspx&quot;&gt;support OCSP stapling&lt;/a&gt; since version 7.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/NSS/NSS_3.15_release_notes&quot;&gt;NSS supports OCSP stapling since version 3.15.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Why a SSL/TLS vendor need this feature&lt;/h3&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Because of performance, we cannot enable OCSP checking on TLS client side by default.&amp;nbsp; Chrome had &lt;a href=&quot;https://www.imperialviolet.org/2012/02/05/crlsets.html&quot;&gt;decide to disable OCSP checking&lt;/a&gt;
 because of performance.&amp;nbsp; However, if check certificate status cannot be checked,
 there is a security issue if certificate has been revoked.&lt;/li&gt;
&lt;li&gt;Support OCSP stapling in server side boost the performance and improve security of client sides who supports OCSP stapling. &lt;/li&gt;
&lt;li&gt;OCSP based certificate status checking of TLS cannot work in a certain environment, for example in Captive Porta environment. &lt;/li&gt;
&lt;li&gt;It&#39;s required to check certificate status for EV certificate.&lt;/li&gt;
&lt;li&gt;Generally, Java
 based SSL web server, for example Tomcat/Glassfish,&amp;nbsp; may also want to 
support OCSP stapling to better service its customers and compete with other platform, for example Apachs HTTP server, Nginx and 
Microsoft IIS. &lt;/li&gt;
&lt;li&gt;OCSP stapling has been widely supported in the industry in both client and server.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/5984619360299886264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/5984619360299886264'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2013/11/understanding-of-ocsp-stapling.html' title='Understanding of OCSP Stapling'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLzDal-Mo79Q2nC7b885MlseMJHrGYXZs6b5Os9r7DAbO5DwbaAj9OHwbrLqTVRwhOolP_8dZ8u92eQER60p3X_6Ulr0WzUW8GWMSDhMx6cexE_5uEoffaQF2OAhhWL4n7L56Xu5OMb4/s72-c/2013-10-31+183622.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-3227123130416166210</id><published>2013-11-08T04:51:00.000-08:00</published><updated>2014-03-22T17:29:22.979-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="RSA"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Harness SSL and JSSE: Key Size Control</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCOKNoZevyqM3aSK_ATRakbqbz00uG7cWQd3aFHuAIUBoLOGJqmQnDVrImLGTFlR_IQ92hUbQ5gsOOwGHJn7CpXmT43Ty3aLOprzSvFi55pjWKS7GPzi4szT_pZGFk8yGQZb4r8th97qg/s1600/2013-11-03+092536.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img alt=&quot;Aged Bridge, Yulong River, Yangshuo, China&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCOKNoZevyqM3aSK_ATRakbqbz00uG7cWQd3aFHuAIUBoLOGJqmQnDVrImLGTFlR_IQ92hUbQ5gsOOwGHJn7CpXmT43Ty3aLOprzSvFi55pjWKS7GPzi4szT_pZGFk8yGQZb4r8th97qg/s400/2013-11-03+092536.jpg&quot; height=&quot;300&quot; title=&quot;Aged Bridge, Yulong River, Yangshuo, China&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Aged Bridge, Yulong River, Yangshuo, China&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Why Key Size Concerns&lt;/span&gt;&lt;/h3&gt;
&lt;br /&gt;
The
 key size is an important security parameter to determine the strength 
of cryptography algorithms. For example, RSA keys with fewer than 1024 
bits are considered forgeable.&amp;nbsp; If RSA keys less than 1024 bits are used
 in X.509 certificates, the private keys used in these certificates can 
be derived and could allow an attacker to duplicate the certificates and
 use them fraudulently to spoof content, perform phishing attacks, or 
perform man-in-the-middle attacks.&lt;br /&gt;
&lt;br /&gt;
On August 14, 2012, 
Microsoft offered an update to Windows that restricts the use of 
certificates with RSA keys less than 1024 bits in length.&amp;nbsp; As of October
 9, 2012, the update is delivered via automatic update through the 
Microsoft update service.&amp;nbsp; Microsoft recommends that customers apply the
 update at the earliest opportunity.&lt;br /&gt;
&lt;br /&gt;
Since JDK 7u12,&amp;nbsp; 
RSA keys less than 1024 bits in X.509 certificates are disabled.&amp;nbsp; This 
is in line with the NIST recommendations to move to a minimum of 
2048-bit keys by January 1, 2014.&amp;nbsp; With this key size restriction, those
 who use X.509 certificates based on RSA keys less than 1024 bits will 
encounter compatibility issues with certification path building and 
validation.&amp;nbsp; This key size restriction also impacts components that 
based on X.509 certificates, for example signed JAR verification, 
SSL/TLS transportation, HTTPS connections, etc.&lt;br /&gt;
&lt;br /&gt;
According to &lt;a href=&quot;https://www.trustworthyinternet.org/ssl-pulse/&quot;&gt;the SSL surveys&lt;/a&gt; on &lt;span class=&quot;date&quot;&gt;November 03, 2013&lt;/span&gt;,
 none out of around 200,000 SSL-enabled web sites based on Alexa&#39;s list 
of most popular sites are using keys below 1024 bits.&amp;nbsp; And according to &lt;a href=&quot;https://factorable.net/weakkeys12.extended.pdf&quot;&gt;another research &lt;/a&gt;targeted
 more wild scope, 0.96% (123,038) of 12,828,613 public live SSL hosts 
and 0.08%&amp;nbsp; (8,459)of&amp;nbsp; 10,216,363 live SSH hosts in the world are using a
 key size of 512 bits.&amp;nbsp; In order to avoid any compatibility issue, 
applications are strongly recommended to renew their certificates with 
stronger keys. Or on your own risks, adjust the key size restriction 
property (jdk.certpath.disabledAlgorithms) to permit the smaller key 
sizes in case of any compatibility issue.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;The impact on JSSE&lt;/span&gt;&lt;/h3&gt;
&lt;br /&gt;
Since 
JDK 7u12,&amp;nbsp; RSA keys less than 1024 bits in X.509 certificates are 
disabled. &amp;nbsp; This improvement directly impacts the behaviors of SunJSSE 
(Oracle JSSE provider) if certificate based authentication is used and 
the certification path contains RSA keys less than 1024 bits. &lt;br /&gt;
&lt;br /&gt;
This restriction is limited via security property, &quot;jdk.certpath.disabledAlgorithms&quot; (See more &quot;&lt;a href=&quot;http://sim.ivi.co/2011/07/java-se-7-release-security-enhancements.html&quot;&gt;Java™ SE 7 Release Security Enhancements - Weak Cryptography Control&lt;/a&gt;&quot; about this property). &lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;pre&gt;jdk.certpath.disabledAlgorithms=MD2, RSA keySize &amp;lt; 1024
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
This security property was introduced since 
JDK 7.&amp;nbsp; There is no such handy approach in JDK 6 and 5.0 as the author 
wrote this blog.&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Workarounds&lt;/span&gt;&lt;/h3&gt;
&lt;br /&gt;
If RSA keys 
less than 1024 bits in X.509 certificates have to be used in a certain 
circumstance, it is likely to run into compatibility because of this key
 size restriction.&amp;nbsp; Please adjust the key size restriction property 
(jdk.certpath.disabledAlgorithms) to permit small key sizes.&amp;nbsp; For 
example:&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;pre&gt;-    jdk.certpath.disabledAlgorithms=MD2, RSA keySize &amp;lt; 1024
+    jdk.certpath.disabledAlgorithms=MD2, RSA keySize &amp;lt; 512
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
Note that it is really risky.&amp;nbsp; One must 
understand and control the potential risks in the application runtime 
environment before enforcing this workaround.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Best Practices&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Put more weak key size restrictions.&amp;nbsp; Of course, please consider the
 potential compatibility issues.&amp;nbsp; For example, EC keys less than 160 
bits and DSA keys less than 1024 bits may be also considered too weak to
 be acceptable.&lt;pre&gt;   jdk.certpath.disabledAlgorithms=MD2, RSA keySize &amp;lt; 1024, \
                EC keySize &amp;lt; 160, DSA keySize &amp;lt; 1024&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Upgrade your X.509 certificate to use strong keys. At present, the 
preferable security strength is 128-bits (128 bits AES/3072 bits RSA/256
 bits ECC/3072 bits DSA keys). 2048 bits RSA/DSA keys is also acceptable
 according to NIST recommendations (See also a summary of the time 
frame, &lt;a href=&quot;http://sim.ivi.co/2012/04/nist-security-strength-time-frames.html&quot;&gt;NIST Security Strength Time Frames&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Moving forward to use EC keys, which is more performance friendly.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Encourage to enforce more flexible algorithm (and key size) constraints in JSSE with &lt;a href=&quot;http://download.java.net/jdk8/docs/api/javax/net/ssl/SSLParameters.html#setAlgorithmConstraints-java.security.AlgorithmConstraints-&quot;&gt;javax.net.ssl.SSLParameters.setAlgorithmConstraints(AlgorithmConstraints&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Looking forward …&lt;/span&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Enforce and improve algorithm and key constraints in more components other than PKI and JSSE.&lt;br /&gt;            &lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;In a long run, enforce more strict, wide and fine key size 
restriction by default, for example RSA and DSA keys must be great than 
1024 bits when apply to data, and EC keys cannot be less than 224 bits.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3227123130416166210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3227123130416166210'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2013/11/harness-ssl-and-jsse-key-size-control.html' title='Harness SSL and JSSE: Key Size Control'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCOKNoZevyqM3aSK_ATRakbqbz00uG7cWQd3aFHuAIUBoLOGJqmQnDVrImLGTFlR_IQ92hUbQ5gsOOwGHJn7CpXmT43Ty3aLOprzSvFi55pjWKS7GPzi4szT_pZGFk8yGQZb4r8th97qg/s72-c/2013-11-03+092536.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-3414045861903059114</id><published>2012-04-24T06:36:00.000-07:00</published><updated>2014-03-22T17:30:00.951-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Crypto"/><title type='text'>NIST Security Strength Time Frames</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table align=&quot;center&quot; border=&quot;1&quot;&gt;
&lt;caption&gt;Security Strength Time Frames of &lt;a href=&quot;http://csrc.nist.gov/groups/ST/toolkit/key_management.html&quot;&gt;NIST&lt;/a&gt; &lt;a href=&quot;http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57_part1_rev3_general.pdf&quot;&gt;SP 800-57 Part 1&lt;/a&gt;&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th rowspan=&quot;2&quot;&gt;Security Strength&lt;/th&gt;&lt;th colspan=&quot;2&quot;&gt;80&lt;/th&gt;&lt;th colspan=&quot;2&quot;&gt;112&lt;/th&gt;&lt;th rowspan=&quot;2&quot;&gt;128&lt;/th&gt;&lt;th rowspan=&quot;2&quot;&gt;192&lt;/th&gt;&lt;th rowspan=&quot;2&quot;&gt;256&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;applying&lt;/th&gt;
&lt;th&gt;processing&lt;/th&gt;
&lt;th&gt;applying&lt;/th&gt;
&lt;th&gt;processing&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot; style=&quot;background-color: #d0e4fe;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;through 2010&lt;/th&gt;
&lt;td&gt;acceptable&lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;2011 through2013&lt;/th&gt;
&lt;td&gt;deprecated &lt;/td&gt;
&lt;td&gt;legacy use &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;2014 through 2030 &lt;/th&gt;
&lt;td&gt;disallowed &lt;/td&gt;
&lt;td&gt;legacy use &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;2031 and Beyond&lt;/th&gt;
&lt;td&gt;disallowed &lt;/td&gt;
&lt;td&gt;legacy use &lt;/td&gt;
&lt;td&gt;disallowed &lt;/td&gt;
&lt;td&gt;legacy use &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;td&gt;acceptable &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;8&quot; style=&quot;background-color: #d0e4fe;&quot;&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Symmetric Algorithms&lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;2TDEA&lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;3TDEA&lt;/td&gt;
&lt;td&gt;AES-128 &lt;/td&gt;
&lt;td&gt;AES-192 &lt;/td&gt;
&lt;td&gt;AES-256 &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;FFC (e.g., DSA, D-H) &lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;L = 1024&lt;br /&gt;
N = 160 &lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;L = 2048&lt;br /&gt;
N = 224  &lt;/td&gt;
&lt;td&gt;L = 3072&lt;br /&gt;
N = 256 &lt;/td&gt;
&lt;td&gt;L = 7680&lt;br /&gt;
N = 384  &lt;/td&gt;
&lt;td&gt;L = 15360&lt;br /&gt;
N = 512  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;IFC (e.g., RSA)&lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;k = 1024  &lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;k = 2048 &lt;/td&gt;
&lt;td&gt;k = 3072  &lt;/td&gt;
&lt;td&gt;k = 7680  &lt;/td&gt;
&lt;td&gt;k = 15360  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;ECC (e.g.,ECDSA) &lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;f = 160-223  &lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;f = 224-255  &lt;/td&gt;
&lt;td&gt;f = 256-383 &lt;/td&gt;
&lt;td&gt;f = 384-511 &lt;/td&gt;
&lt;td&gt;f = 512+ &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Digital Signatures and hash-only applications &lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-384, SHA-512 &lt;/td&gt;
&lt;td&gt;SHA-512  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;HMAC&lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-224, SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Key Derivation Functions&lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-224, SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;Random Number Generation&lt;/th&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td colspan=&quot;2&quot;&gt;SHA-1,&lt;br /&gt;
SHA-224,&lt;br /&gt;
SHA-256,&lt;br /&gt;
SHA-384,&lt;br /&gt;
SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-1, SHA-224, SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-224, SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;td&gt;SHA-256, SHA-384, SHA-512  &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Note (Reference from NIST SP 800-57 part 1, reversion 3): &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&quot;applying&quot; and &quot;processing&quot; indicates whether cryptographic protection is being applied to data (e.g., encrypted), or whether cryptographically protected data is being processed (e.g., decrypted).&lt;/li&gt;
&lt;li&gt;&quot;Acceptable&quot; indicates that the algorithm or key length is not known to be insecure.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&quot;Deprecated&quot; means that the use of an algorithm or key length that provides the indicated security strength may be used if risk is accepted; note that the use deprecated algorithms or key lengths may have restrictions.&lt;/li&gt;
&lt;li&gt;&quot;Disallowed&quot; means that an algorithm or key length shall not be used for applying cryptographic protection.&lt;/li&gt;
&lt;li&gt;&quot;Legacy use&quot; means that an algorithm or key length may be used because of its use in legacy applications (i.e., the algorithm or key length can be used to process cryptographically-protected data). &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3414045861903059114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3414045861903059114'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2012/04/nist-security-strength-time-frames.html' title='NIST Security Strength Time Frames'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-8572824867784768928</id><published>2012-01-26T18:20:00.000-08:00</published><updated>2014-03-22T17:31:19.781-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>SSL Server Test Online Service</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The &lt;a href=&quot;https://www.ssllabs.com/ssldb/analyze.html&quot;&gt;SSL Server Test Online Service&lt;/a&gt; performs a deep analysis of the configuration of any SSL web server on the public Internet. It&#39;s a great web service to test the quality of a SSL web server.&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/8572824867784768928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/8572824867784768928'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2012/01/ssl-server-test-online-service.html' title='SSL Server Test Online Service'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-70753160449931398</id><published>2011-12-30T06:00:00.000-08:00</published><updated>2014-03-22T17:31:36.435-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Crypto"/><title type='text'>Another Challenge of Hash Functions</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
No comments, please refer to the following docs: &lt;a href=&quot;http://www.securityweek.com/hash-table-collision-attacks-could-trigger-ddos-massive-scale&quot;&gt;&quot;Hash Table Collision Attacks Could Trigger DDoS on a Massive Scale | SecurityWeek.Com&quot;&lt;/a&gt; and &lt;a href=&quot;http://www.nruns.com/_downloads/advisory28122011.pdf&quot;&gt;the research from n.runs AG&lt;/a&gt;&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/70753160449931398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/70753160449931398'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/12/another-challenge-of-hash-functions.html' title='Another Challenge of Hash Functions'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-9064591410092756460</id><published>2011-12-29T18:52:00.000-08:00</published><updated>2014-03-22T17:31:54.935-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Coding"/><title type='text'>Search and Replace Strings in Files Under a Certain Directory</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
As simple as: &lt;br /&gt;
&lt;pre&gt;$ find thePath -type f -name theFileNamePattern |xargs \
  perl -e &quot;s/toBeReplacedString/newString/g&quot; -pi
&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/9064591410092756460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/9064591410092756460'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/12/search-and-replace-strings-in-files.html' title='Search and Replace Strings in Files Under a Certain Directory'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-3932158844803100894</id><published>2011-11-06T19:35:00.000-08:00</published><updated>2014-03-22T17:32:21.183-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BEAST"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>A proposal to countermeasure BEAST attack</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
I posted the proposal to countermeasure &lt;a href=&quot;http://vnhacker.blogspot.com/2011/09/beast.html&quot;&gt;the BEAST attack&lt;/a&gt; in&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=665814&quot;&gt; Bug 665814&lt;/a&gt; at Bugzilla@Mozilla. For quick reference, I copy it in the blog:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=665814#c59&quot;&gt;&lt;span class=&quot;bz_comment_user&quot;&gt;&lt;span class=&quot;vcard&quot;&gt;&lt;span class=&quot;fn&quot;&gt;Xuelei Fan&lt;/span&gt; &lt;/span&gt;         &lt;/span&gt;          &lt;span class=&quot;bz_comment_user_images&quot;&gt;         &lt;/span&gt;          &lt;span class=&quot;bz_comment_time&quot;&gt;           2011-07-20 20:35:42 PDT&amp;nbsp;         &lt;/span&gt;Comment 59&lt;/a&gt;:&lt;br /&gt;
&lt;pre class=&quot;bz_comment_text&quot;&gt;One significant drawback of the current proposed countermeasure
(sending empty application data packets) is that the empty packet
might be rejected by the TLS peer (see comments #30/#50/others:  MSIE
does not accept empty fragments, Oracle application server (non-JSSE)
cannot accept empty fragments, etc.)

We&#39;ve been looking at a slightly different countermeasure that should
comply with the TLSv1.0/SSLv3.0 specifications, and likely won&#39;t break
implementations. Would you please review the following proposal?
If this is sound, this might avoid the empty packet issue, and the
switches necessary to configure it.

Looking at the spec of TLS, the block-ciphered structure is defined as:

       block-ciphered struct {
           opaque content[TLSCompressed.length];
           opaque MAC[CipherSpec.hash_size];
           uint8 padding[GenericBlockCipher.padding_length];
           uint8 padding_length;
       } GenericBlockCipher;

This implies that if the TLSCompressed.length is less than the cipher
block size, the MAC and padding data [1] will be used to construct the
first block.

The countermeasure:  instead of sending a completely empty fragment
before the supplied application data, send the first byte of
application data in a packet, followed by the remaining data from the
write call.  I think this should work because the TLS specification
requires content followed by the MAC.  Like the proposed solution,
you&#39;re still removing the adaptive guessing mechanism from the IV
calculation, but in a different way.

Assume here a cipher block size of 8.  Since the MAC effectively
randomizes the IV for successive SSL/TLS packets, if this first byte is
one of the bytes being guessed, that still leaves a search space of 28
(1 byte of data) * 256 (MAC) = 264, which is the same as the cipher
itself.  If the 1 byte is known plaintext, then the MAC will change the
IV for successive packets, and the attacker is not given the chance to
adapt the input Pj.

Implementations should readily accept 1 byte of application data, so
this will likely address the empty fragment issue, while complying with
the SSL 3.0 and TLS 1.0 specifications.

Looking forward to your comments.

Thanks,
Xuelei

[1] From a quick review of the standard hashes and ciphers of TLS
cipher suites, the CipherSpec.hash_size should be always bigger or
equal to block size. So the first block of an cipher operation should
not contain the padding data.&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3932158844803100894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3932158844803100894'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/11/proposal-to-countermeasure-beast-attack.html' title='A proposal to countermeasure BEAST attack'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-1171936132344057159</id><published>2011-08-26T18:17:00.000-07:00</published><updated>2011-08-26T18:17:57.938-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java SE 7"/><title type='text'>Java SE 7 New Features Ed 1 course</title><content type='html'>                    &lt;span style=&quot;color: black;&quot;&gt;The first of the Java SE 7 courses - &lt;a href=&quot;http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getSchedPage?page_id=4&amp;amp;dc=D72719GC10&quot;&gt;&lt;b&gt;D72697GC10        - Java SE 7 New Features Ed 1&lt;/b&gt;&lt;/a&gt; is now on the public schedule       on &lt;a href=&quot;http://education.oracle.com/&quot;&gt;education.oracle.com&lt;/a&gt;. &lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1171936132344057159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1171936132344057159'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/08/java-se-7-new-features-ed-1-course.html' title='Java SE 7 New Features Ed 1 course'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-3315800580748679286</id><published>2011-08-07T18:04:00.000-07:00</published><updated>2014-03-22T17:32:42.376-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>JSSE Oracle Provider Default Disabled TLS Cipher Suites</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The following TLS cipher suites are supported by Oracle provider, SunJSSE. These cipher suites are disabled by default because of one of the following reasons:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;obsoleted weak cipher suites&lt;/li&gt;
&lt;li&gt;anonymous cipher suites&lt;/li&gt;
&lt;li&gt;no encryption cipher suites (null cipher)&lt;/li&gt;
&lt;li&gt;Kerberos cipher suites&lt;/li&gt;
&lt;/ul&gt;
Cipher suites for Kerberos (KRB5) need additional KRB5 service configuration, and these cipher suites are not common in practice.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: black;&quot;&gt;
&lt;b&gt;You are NOT supposed to use these cipher suites unless you really know what you&#39;re doing from a standpoint. &lt;/b&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;&lt;colgroup span=&quot;1&quot; style=&quot;text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;text-align: left;&quot;&gt;&lt;/colgroup&gt;  &lt;tbody&gt;
&lt;tr&gt;   &lt;td&gt;Perference&lt;/td&gt;   &lt;td&gt;Value&lt;/td&gt;   &lt;td&gt;Description&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;0x00,0x6D&lt;/td&gt;   &lt;td&gt;TLS_DH_anon_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;0xC0,0x19&lt;/td&gt;   &lt;td&gt;TLS_ECDH_anon_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;0x00,0x3A&lt;/td&gt;   &lt;td&gt;TLS_DH_anon_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;0x00,0x6C&lt;/td&gt;   &lt;td&gt;TLS_DH_anon_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;   &lt;td&gt;0xC0,0x18&lt;/td&gt;   &lt;td&gt;TLS_ECDH_anon_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;   &lt;td&gt;0x00,0x34&lt;/td&gt;   &lt;td&gt;TLS_DH_anon_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;   &lt;td&gt;0xC0,0x16&lt;/td&gt;   &lt;td&gt;TLS_ECDH_anon_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;0x00,0x18&lt;/td&gt;   &lt;td&gt;SSL_DH_anon_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;   &lt;td&gt;0xC0,0x17&lt;/td&gt;   &lt;td&gt;TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;   &lt;td&gt;0x00,0x1B&lt;/td&gt;   &lt;td&gt;SSL_DH_anon_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;   &lt;td&gt;0xC0,0x3B&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_NULL_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;   &lt;td&gt;0xC0,0x06&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_NULL_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;13&lt;/td&gt;   &lt;td&gt;0xC0,0x10&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_NULL_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;14&lt;/td&gt;   &lt;td&gt;0x00,0x02&lt;/td&gt;   &lt;td&gt;SSL_RSA_WITH_NULL_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;15&lt;/td&gt;   &lt;td&gt;0xC0,0x01&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_NULL_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;0xC0,0x05&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_NULL_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;17&lt;/td&gt;   &lt;td&gt;0x00,0x15&lt;/td&gt;   &lt;td&gt;TLS_ECDH_anon_WITH_NULL_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;18&lt;/td&gt;   &lt;td&gt;0x00,0x01&lt;/td&gt;   &lt;td&gt;SSL_RSA_WITH_NULL_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;19&lt;/td&gt;   &lt;td&gt;0x00,0x09&lt;/td&gt;   &lt;td&gt;SSL_RSA_WITH_DES_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;20&lt;/td&gt;   &lt;td&gt;0x00,0x15&lt;/td&gt;   &lt;td&gt;SSL_DHE_RSA_WITH_DES_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;21&lt;/td&gt;   &lt;td&gt;0x00,0x12&lt;/td&gt;   &lt;td&gt;SSL_DHE_DSS_WITH_DES_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;22&lt;/td&gt;   &lt;td&gt;0x00,0x03&lt;/td&gt;   &lt;td&gt;SSL_RSA_EXPORT_WITH_RC4_40_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;23&lt;/td&gt;   &lt;td&gt;0x00,0x17&lt;/td&gt;   &lt;td&gt;SSL_DH_anon_EXPORT_WITH_RC4_40_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;24&lt;/td&gt;   &lt;td&gt;0x00,0x08&lt;/td&gt;   &lt;td&gt;SSL_RSA_EXPORT_WITH_DES40_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;25&lt;/td&gt;   &lt;td&gt;0x00,0x14&lt;/td&gt;   &lt;td&gt;SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;26&lt;/td&gt;   &lt;td&gt;0x00,0x11&lt;/td&gt;   &lt;td&gt;SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;27&lt;/td&gt;   &lt;td&gt;0x00,0x19&lt;/td&gt;   &lt;td&gt;SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;28&lt;/td&gt;   &lt;td&gt;0x00,0x32&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;29&lt;/td&gt;   &lt;td&gt;0x00,0x20&lt;/td&gt;   &lt;td&gt;TLS_KRB5_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;30&lt;/td&gt;   &lt;td&gt;0x00,0x24&lt;/td&gt;   &lt;td&gt;TLS_KRB5_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;31&lt;/td&gt;   &lt;td&gt;0x00,0x1F&lt;/td&gt;   &lt;td&gt;TLS_KRB5_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;32&lt;/td&gt;   &lt;td&gt;0x00,0x23&lt;/td&gt;   &lt;td&gt;TLS_KRB5_WITH_3DES_EDE_CBC_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;33&lt;/td&gt;   &lt;td&gt;0x00,0x1E&lt;/td&gt;   &lt;td&gt;TLS_KRB5_WITH_DES_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;34&lt;/td&gt;   &lt;td&gt;0x00,0x22&lt;/td&gt;   &lt;td&gt;TLS_KRB5_WITH_DES_CBC_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;35&lt;/td&gt;   &lt;td&gt;0x00,0x28&lt;/td&gt;   &lt;td&gt;TLS_KRB5_EXPORT_WITH_RC4_40_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;36&lt;/td&gt;   &lt;td&gt;0x00,0x2B&lt;/td&gt;   &lt;td&gt;TLS_KRB5_EXPORT_WITH_RC4_40_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;37&lt;/td&gt;   &lt;td&gt;0x00,0x26&lt;/td&gt;   &lt;td&gt;TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;38&lt;/td&gt;   &lt;td&gt;0x00,0x29&lt;/td&gt;   &lt;td&gt;TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Note that the data was from &lt;a href=&quot;http://download.java.net/jdk7/docs/technotes/guides/security/SunProviders.html#SunJSSEProvider&quot;&gt;the Java SE doc of SunJSSE provider&lt;/a&gt;.&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3315800580748679286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3315800580748679286'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/08/jsse-oracle-provider-default-disabled.html' title='JSSE Oracle Provider Default Disabled TLS Cipher Suites'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-1830440802989852330</id><published>2011-07-31T04:09:00.000-07:00</published><updated>2014-03-22T17:33:11.020-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Java™ SE 7 Release Security Enhancements - Weak Cryptography Control</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Weak cryptographic algorithms can now be disabled in Java SE 7 release. The &lt;a href=&quot;http://en.wikipedia.org/wiki/MD2_%28cryptography%29&quot;&gt;MD2 Message-Digest Algorithm&lt;/a&gt; was disabled by default in Sun PKIX provider and SunJSSE provider.&lt;br /&gt;
&lt;br /&gt;
The MD2 algorithm  is a cryptographic hash function &lt;a href=&quot;http://www.rsa.com/rsalabs/node.asp?id=2253&quot;&gt;developed by Ronald Rivest in 1989&lt;/a&gt;, and was published in 1992 as &lt;a href=&quot;http://www.ietf.org/rfc/rfc1319.txt&quot;&gt;an Informational RFC (RFC 1319)&lt;/a&gt;.; &lt;a href=&quot;http://www.ietf.org/rfc/rfc6149.txt&quot;&gt;RFC 6149&lt;/a&gt; moves RFC 1319/MD2 to historic status, &quot;Since its publication, MD2 has been shown to not be collision-free, albeit successful collision attacks for properly implemented MD2 are not that damaging.  Successful pre-image and second pre-image attacks against MD2 have been shown.&quot;&lt;br /&gt;
&lt;br /&gt;
Although MD2 is no longer considered secure, it remains in use in public key infrastructures as part of certificates generated with MD2 and RSA. An a countermeasure of the vulnerability, Java SE &lt;a href=&quot;http://sim.ivi.co/2011/06/java-se-disables-md2-message-digest.html&quot;&gt;has disabled MD2 algorithm&lt;/a&gt; in certification path building and validation.&lt;br /&gt;
&lt;br /&gt;
You may wonder, Java SE has disabled MD2 algorithm in certification path building and validation in the latest releases and updates, what is the enhancement in Java SE 7?; Good question, NOT ONLY MD2, BUT ALSO MD4, MD5, or what else weak  cryptographic algorithms, you can disable them in Java SE 7; and you also can disable cryptographic keys without enough strength key size. To control the usage of weak cryptographic algorithms, Java SE 7 introduces two new security properties, &quot;jdk.certpath.disabledAlgorithms&quot; and &quot;jdk.tls.disabledAlgorithms&quot;.&lt;br /&gt;
&lt;br /&gt;
The security property (and the syntax) of &quot;jdk.certpath.disabledAlgorithms&quot; is defined as:&lt;br /&gt;
&lt;pre&gt;# Algorithm restrictions for certification path (CertPath) processing
#
# In some environments, certain algorithms or key lengths may be undesirable
# for certification path building and validation.  For example, &quot;MD2&quot; is
# generally no longer considered to be a secure hash algorithm.  This section
# describes the mechanism for disabling algorithms based on algorithm name
# and/or key length.  This includes algorithms used in certificates, as well
# as revocation information such as CRLs and signed OCSP Responses.
#
# The syntax of the disabled algorithm string is described as this Java
# BNF-style:
#   DisabledAlgorithms:
#       &quot; DisabledAlgorithm { , DisabledAlgorithm } &quot;
#
#   DisabledAlgorithm:
#       AlgorithmName [Constraint]
#
#   AlgorithmName:
#       (see below)
#
#   Constraint:
#       KeySizeConstraint
#
#   KeySizeConstraint:
#       keySize Operator DecimalInteger
#
#   Operator:
#       &amp;lt;= | &amp;lt; | == | != | &amp;gt;= | &amp;gt;
#
#   DecimalInteger:
#       DecimalDigits
#
#   DecimalDigits:
#       DecimalDigit {DecimalDigit}
#
#   DecimalDigit: one of
#       1 2 3 4 5 6 7 8 9 0
#
# The &quot;AlgorithmName&quot; is the standard algorithm name of the disabled
# algorithm. See &quot;Java Cryptography Architecture Standard Algorithm Name
# Documentation&quot; for information about Standard Algorithm Names.  Matching
# is performed using a case-insensitive sub-element matching rule.  (For
# example, in &quot;SHA1withECDSA&quot; the sub-elements are &quot;SHA1&quot; for hashing and
# &quot;ECDSA&quot; for signatures.)  If the assertion &quot;AlgorithmName&quot; is a
# sub-element of the certificate algorithm name, the algorithm will be
# rejected during certification path building and validation.  For example,
# the assertion algorithm name &quot;DSA&quot; will disable all certificate algorithms
# that rely on DSA, such as NONEwithDSA, SHA1withDSA.  However, the assertion
# will not disable algorithms related to &quot;ECDSA&quot;.
#
# A &quot;Constraint&quot; provides further guidance for the algorithm being specified.
# The &quot;KeySizeConstraint&quot; requires a key of a valid size range if the
# &quot;AlgorithmName&quot; is of a key algorithm.  The &quot;DecimalInteger&quot; indicates the
# key size specified in number of bits.  For example, &quot;RSA keySize &amp;lt;= 1024&quot;
# indicates that any RSA key with key size less than or equal to 1024 bits
# should be disabled, and &quot;RSA keySize &amp;lt; 1024, RSA keySize &amp;gt; 2048&quot; indicates
# that any RSA key with key size less than 1024 or greater than 2048 should
# be disabled. Note that the &quot;KeySizeConstraint&quot; only makes sense to key
# algorithms.
#
# Note: This property is currently used by Oracle&#39;s PKIX implementation. It
# is not guaranteed to be examined and used by other implementations.
#
# Example:
#   jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize &amp;lt; 2048
#
#
jdk.certpath.disabledAlgorithms=MD2
&lt;/pre&gt;
And the security property of &quot;jdk.tls.disabledAlgorithms&quot; is defined as:
&lt;br /&gt;
&lt;pre&gt;# Algorithm restrictions for Secure Socket Layer/Transport Layer Security
# (SSL/TLS) processing
#
# In some environments, certain algorithms or key lengths may be undesirable
# when using SSL/TLS.  This section describes the mechanism for disabling
# algorithms during SSL/TLS security parameters negotiation, including cipher
# suites selection, peer authentication and key exchange mechanisms.
#
# For PKI-based peer authentication and key exchange mechanisms, this list
# of disabled algorithms will also be checked during certification path
# building and validation, including algorithms used in certificates, as
# well as revocation information such as CRLs and signed OCSP Responses.
# This is in addition to the jdk.certpath.disabledAlgorithms property above.
#
# See the specification of &quot;jdk.certpath.disabledAlgorithms&quot; for the
# syntax of the disabled algorithm string.
#
# Note: This property is currently used by Oracle&#39;s JSSE implementation.
# It is not guaranteed to be examined and used by other implementations.
#
# Example:
#   jdk.tls.disabledAlgorithms=MD5, SHA1, DSA, RSA keySize &amp;lt; 2048

&lt;/pre&gt;
You are able to find the definition from java_home/jre/lib/security/java.security.&lt;br /&gt;
OK, let&#39;s look at more examples about how to control weak cryptographic algorithms and key strength.&lt;br /&gt;
MD5 is no longer acceptable where collision resistance is required such as digital signatures [&lt;a href=&quot;http://www.ietf.org/rfc/rfc6151.txt&quot;&gt;RFC 6151&lt;/a&gt;]. However, there are still a lot of well-known certificates generated with MD5 based signature.&lt;br /&gt;
For RSA crypto-system, 512-bit keys no longer provide sufficient security for anything more than very short-term security needs [&lt;a href=&quot;http://www.rsa.com/rsalabs/node.asp?id=2218&quot;&gt;How large a key should be used in the RSA cryptosystem?&lt;/a&gt;]. RSA is widely used in the industry, for better interoperability, you may not be able to completely disable RSA crypto-system in your application. You may only accept strength enough RSA keys.&lt;br /&gt;
You may want to disable MD5 algorithms and RSA keys size less than 1024 bits in Sun PKIX provider. The security property may look like:&lt;br /&gt;
&lt;pre&gt;jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize &amp;lt; 1024&lt;/pre&gt;
For what ever reason, you may not like a particular TLS cipher suites, for example, &quot;SSL_RSA_WITH_RC4_128_MD5/TLS_RSA_WITH_RC4_128_MD5&quot;. Of course, you can disable it in SunJSSE provider with:&lt;br /&gt;
&lt;pre&gt;jdk.tls.disabledAlgorithms=SSL_RSA_WITH_RC4_128_MD5&lt;/pre&gt;
&lt;br /&gt;
Yes, with these two security properties, you can control weak cryptographic algorithms and key sizes in Java VM globally. It is as you will!&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1830440802989852330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1830440802989852330'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/java-se-7-release-security-enhancements.html' title='Java™ SE 7 Release Security Enhancements - Weak Cryptography Control'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-8446443370591876287</id><published>2011-07-29T01:56:00.000-07:00</published><updated>2014-03-22T17:33:46.589-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Crypto"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Time of ECC Algorithms in Web Services?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
It&#39;s a question, the answer depends on your application deployment. The browser market share in the following pie may be a fact of your consideration. From previous posts, I learned that out of the major market players, only Opera does not support ECC TLS cipher suites yet. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://skydrive.live.com/redir.aspx?cid=6eb7ebcf1a04eaad&amp;amp;page=play&amp;amp;resid=6EB7EBCF1A04EAAD%21264&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_gsWpH849_6WtYF4bm0V9LEfdQshm7_CgRCekymdwTWI8TzwI9BByQMaP1Cz2cKU621hHKVSG8PVOssBKng4HPdNfqrpYN6A_R6V6feMhIIIxm23tKGe-223os6FoE4pFihli0WiNccE/s1600/browser_market_share_2011_06.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/8446443370591876287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/8446443370591876287'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/time-of-ecc-algorithms-in-web-services.html' title='Time of ECC Algorithms in Web Services?'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_gsWpH849_6WtYF4bm0V9LEfdQshm7_CgRCekymdwTWI8TzwI9BByQMaP1Cz2cKU621hHKVSG8PVOssBKng4HPdNfqrpYN6A_R6V6feMhIIIxm23tKGe-223os6FoE4pFihli0WiNccE/s72-c/browser_market_share_2011_06.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-1696161623517851342</id><published>2011-07-28T17:37:00.000-07:00</published><updated>2011-07-28T17:38:12.205-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java 7"/><category scheme="http://www.blogger.com/atom/ns#" term="Java SE 7"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Oracle Launches Java 7</title><content type='html'>Source: www.oracle.com. Oracle Announces &lt;a href=&quot;http://www.oracle.com/us/corporate/features/java-7-launched-435823.html&quot;&gt;Availability of Java SE 7&lt;/a&gt;, you are able to &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index.html?ssSourceSiteId=ocomen&quot;&gt;download and try Java SE 7&lt;/a&gt; right now.&lt;br /&gt;
&lt;br /&gt;
You may also want to know &lt;a href=&quot;http://download.oracle.com/javase/7/docs/technotes/guides/security/enhancements7.html&quot;&gt;Java™ SE 7 Release Security Enhancements&lt;/a&gt;. I may publish new post to introduce the new security features in the blog.  Stay Tuned!</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1696161623517851342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1696161623517851342'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/oracle-launches-java-7.html' title='Oracle Launches Java 7'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-7911260212831937784</id><published>2011-07-23T20:32:00.000-07:00</published><updated>2014-03-22T17:34:22.164-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cipher Suite"/><category scheme="http://www.blogger.com/atom/ns#" term="Java SE 7"/><category scheme="http://www.blogger.com/atom/ns#" term="JSSE"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>JSSE Oracle Provider Preference of TLS Cipher Suites</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;&lt;colgroup span=&quot;1&quot; style=&quot;text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;text-align: left;&quot;&gt;&lt;/colgroup&gt;  &lt;tbody&gt;
&lt;tr&gt;   &lt;td&gt;Perference Order&lt;/td&gt;   &lt;td&gt;Value&lt;/td&gt;   &lt;td&gt;Description&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;0xC0,0x24&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;0xC0,0x28&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;0x00,0x3D&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;0xC0,0x26&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;   &lt;td&gt;0xC0,0x2A&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;   &lt;td&gt;0x00,0x6B&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;   &lt;td&gt;0x00,0x6A&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;0xC0,0x0A&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;   &lt;td&gt;0xC0,0x14&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;   &lt;td&gt;0x00,0x35&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;   &lt;td&gt;0xC0,0x05&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;   &lt;td&gt;0xC0,0x0F&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;13&lt;/td&gt;   &lt;td&gt;0x00,0x39&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;14&lt;/td&gt;   &lt;td&gt;0x00,0x38&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;15&lt;/td&gt;   &lt;td&gt;0xC0,0x23&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;0xC0,0x27&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;17&lt;/td&gt;   &lt;td&gt;0x00,0x3C&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;18&lt;/td&gt;   &lt;td&gt;0xC0,0x25&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;19&lt;/td&gt;   &lt;td&gt;0xC0,0x29&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;20&lt;/td&gt;   &lt;td&gt;0x00,0x67&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;21&lt;/td&gt;   &lt;td&gt;0x00,0x40&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;22&lt;/td&gt;   &lt;td&gt;0xC0,0x09&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;23&lt;/td&gt;   &lt;td&gt;0xC0,0x13&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;24&lt;/td&gt;   &lt;td&gt;0x00,0x2F&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;25&lt;/td&gt;   &lt;td&gt;0xC0,0x04&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;26&lt;/td&gt;   &lt;td&gt;0xC0,0x0E&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;27&lt;/td&gt;   &lt;td&gt;0x00,0x33&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;28&lt;/td&gt;   &lt;td&gt;0x00,0x32&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;29&lt;/td&gt;   &lt;td&gt;0xC0,0x07&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;30&lt;/td&gt;   &lt;td&gt;0xC0,0x11&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;31&lt;/td&gt;   &lt;td&gt;0x00,0x05&lt;/td&gt;   &lt;td&gt;SSL_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;32&lt;/td&gt;   &lt;td&gt;0xC0,0x02&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;33&lt;/td&gt;   &lt;td&gt;0xC0,0x0C&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;34&lt;/td&gt;   &lt;td&gt;0xC0,0x08&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;35&lt;/td&gt;   &lt;td&gt;0xC0,0x12&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;36&lt;/td&gt;   &lt;td&gt;0x00,0x0A&lt;/td&gt;   &lt;td&gt;SSL_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;37&lt;/td&gt;   &lt;td&gt;0xC0,0x03&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;38&lt;/td&gt;   &lt;td&gt;0xC0,0x0D&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;39&lt;/td&gt;   &lt;td&gt;0x00,0x16&lt;/td&gt;   &lt;td&gt;SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;40&lt;/td&gt;   &lt;td&gt;0x00,0x13&lt;/td&gt;   &lt;td&gt;SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;41&lt;/td&gt;   &lt;td&gt;0x00,0x04&lt;/td&gt;   &lt;td&gt;SSL_RSA_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;42&lt;/td&gt;   &lt;td&gt;0x00,0xFF&lt;/td&gt;   &lt;td&gt;TLS_EMPTY_RENEGOTIATION_INFO_SCSV [1]&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
Note that the data was from &lt;a href=&quot;http://download.java.net/jdk7/docs/technotes/guides/security/SunProviders.html#SunJSSEProvider&quot;&gt;the Java SE doc of SunJSSE provider&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
[1] TLS_EMPTY_RENEGOTIATION_INFO_SCSV means that secure TLS renegotiation [&lt;a href=&quot;http://www.ietf.org/rfc/rfc5746.txt&quot;&gt;RFC 5746&lt;/a&gt;] is supported.&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/7911260212831937784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/7911260212831937784'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/jsse-oracle-provider-preference-of-tls.html' title='JSSE Oracle Provider Preference of TLS Cipher Suites'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-3784290163998668278</id><published>2011-07-23T20:01:00.000-07:00</published><updated>2011-07-23T20:02:16.395-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cipher Suite"/><category scheme="http://www.blogger.com/atom/ns#" term="Preference"/><category scheme="http://www.blogger.com/atom/ns#" term="Safari"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Browser Safari Preference of TLS Cipher Suites</title><content type='html'>&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;&lt;colgroup span=&quot;1&quot; style=&quot;text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;text-align: left;&quot;&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;   &lt;td&gt;Perference Order&lt;/td&gt;   &lt;td&gt;Value&lt;/td&gt;   &lt;td&gt;Description&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;0x00,0x2F&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;0x00,0x35&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;0x00,0x05&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;0x00,0x0A&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;   &lt;td&gt;0xC0,0x13&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;   &lt;td&gt;0xC0,0x14&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;   &lt;td&gt;0xC0,0x09&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;0xC0,0x0A&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;   &lt;td&gt;0x00,0x32&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;   &lt;td&gt;0x00,0x38&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;   &lt;td&gt;0x00,0x13&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;   &lt;td&gt;0x00,0x04&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Note that the data was from the observation of the TLS ClientHello message when visiting a HTTPS web site from Safari 5.1.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3784290163998668278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/3784290163998668278'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/browser-safari-preference-of-tls-cipher.html' title='Browser Safari Preference of TLS Cipher Suites'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-2105114530099244283</id><published>2011-07-23T19:51:00.000-07:00</published><updated>2011-07-23T20:02:33.271-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cipher Suite"/><category scheme="http://www.blogger.com/atom/ns#" term="Opera"/><category scheme="http://www.blogger.com/atom/ns#" term="Preference"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Browser Opera Preference of TLS Cipher Suites</title><content type='html'>&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;&lt;colgroup span=&quot;1&quot; style=&quot;text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;text-align: left;&quot;&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;   &lt;td&gt;Perference&lt;br /&gt;
Order&lt;/td&gt;   &lt;td&gt;Value&lt;/td&gt;   &lt;td&gt;Description&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;0x00,0xFF&lt;/td&gt;   &lt;td&gt;TLS_EMPTY_RENEGOTIATION_INFO_SCSV [1]&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;0x00,0x6B&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;0x00,0x6A&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;0x00,0x69&lt;/td&gt;   &lt;td&gt;TLS_DH_RSA_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;   &lt;td&gt;0x00,0x68&lt;/td&gt;   &lt;td&gt;TLS_DH_DSS_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;   &lt;td&gt;0x00,0x3D&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;   &lt;td&gt;0x00,0x39&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;0x00,0x38&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;   &lt;td&gt;0x00,0x37&lt;/td&gt;   &lt;td&gt;TLS_DH_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;   &lt;td&gt;0x00,0x36&lt;/td&gt;   &lt;td&gt;TLS_DH_DSS_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;   &lt;td&gt;0x00,0x35&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;   &lt;td&gt;0x00,0x67&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;13&lt;/td&gt;   &lt;td&gt;0x00,0x40&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;14&lt;/td&gt;   &lt;td&gt;0x00,0x3F&lt;/td&gt;   &lt;td&gt;TLS_DH_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;15&lt;/td&gt;   &lt;td&gt;0x00,0x3E&lt;/td&gt;   &lt;td&gt;TLS_DH_DSS_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;0x00,0x3C&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;17&lt;/td&gt;   &lt;td&gt;0x00,0x33&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;18&lt;/td&gt;   &lt;td&gt;0x00,0x32&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;19&lt;/td&gt;   &lt;td&gt;0x00,0x31&lt;/td&gt;   &lt;td&gt;TLS_DH_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;20&lt;/td&gt;   &lt;td&gt;0x00,0x30&lt;/td&gt;   &lt;td&gt;TLS_DH_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;21&lt;/td&gt;   &lt;td&gt;0x00,0x2F&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;22&lt;/td&gt;   &lt;td&gt;0x00,0x05&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;23&lt;/td&gt;   &lt;td&gt;0x00,0x04&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;24&lt;/td&gt;   &lt;td&gt;0x00,0x13&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;25&lt;/td&gt;   &lt;td&gt;0x00,0x0D&lt;/td&gt;   &lt;td&gt;TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;26&lt;/td&gt;   &lt;td&gt;0x00,0x16&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;27&lt;/td&gt;   &lt;td&gt;0x00,0x10&lt;/td&gt;   &lt;td&gt;TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;28&lt;/td&gt;   &lt;td&gt;0x00,0x0A&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Note that the data was from the observation of the TLS ClientHello message when visiting a HTTPS web site from Opera 11.50.&lt;br /&gt;
&lt;br /&gt;
[1] TLS_EMPTY_RENEGOTIATION_INFO_SCSV means the browser supports secure TLS renegotiation [&lt;a href=&quot;http://www.ietf.org/rfc/rfc5746.txt&quot;&gt;RFC 5746&lt;/a&gt;].</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/2105114530099244283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/2105114530099244283'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/browser-opera-preference-of-tls-cipher.html' title='Browser Opera Preference of TLS Cipher Suites'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-6514561021947459239</id><published>2011-07-23T19:37:00.000-07:00</published><updated>2011-07-23T20:02:51.673-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cipher Suite"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Chrome"/><category scheme="http://www.blogger.com/atom/ns#" term="Preference"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Google Chrome Preference of TLS Cipher Suites</title><content type='html'>&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;&lt;colgroup span=&quot;1&quot; style=&quot;text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;text-align: left;&quot;&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr&gt;   &lt;td&gt;Perference Order&lt;/td&gt;   &lt;td&gt;Value&lt;/td&gt;   &lt;td&gt;Description&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;0xC0,0x0A&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;0xC0,0x14&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;0x00,0x88&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;0x00,0x87&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;   &lt;td&gt;0x00,0x39&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;   &lt;td&gt;0x00,0x38&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;   &lt;td&gt;0xC0,0x0F&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;0xC0,0x05&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;   &lt;td&gt;0x00,0x84&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_CAMELLIA_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;   &lt;td&gt;0x00,0x35&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;   &lt;td&gt;0xC0,0x07&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;   &lt;td&gt;0xC0,0x09&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;13&lt;/td&gt;   &lt;td&gt;0xC0,0x11&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;14&lt;/td&gt;   &lt;td&gt;0xC0,0x13&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;15&lt;/td&gt;   &lt;td&gt;0x00,0x45&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;0x00,0x44&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;17&lt;/td&gt;   &lt;td&gt;0x00,0x66&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;18&lt;/td&gt;   &lt;td&gt;0x00,0x33&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;19&lt;/td&gt;   &lt;td&gt;0x00,0x32&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;20&lt;/td&gt;   &lt;td&gt;0xC0,0x0C&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;21&lt;/td&gt;   &lt;td&gt;0xC0,0x0e&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;22&lt;/td&gt;   &lt;td&gt;0xC0,0x02&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;23&lt;/td&gt;   &lt;td&gt;0xC0,0x04&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;24&lt;/td&gt;   &lt;td&gt;0x00,0x96&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_SEED_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;25&lt;/td&gt;   &lt;td&gt;0x00,0x41&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_CAMELLIA_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;26&lt;/td&gt;   &lt;td&gt;0x00,0x04&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;27&lt;/td&gt;   &lt;td&gt;0x00,0x05&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;28&lt;/td&gt;   &lt;td&gt;0x00,0x2F&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;29&lt;/td&gt;   &lt;td&gt;0xC0,0x08&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;30&lt;/td&gt;   &lt;td&gt;0xC0,0x12&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;31&lt;/td&gt;   &lt;td&gt;0x00,0x16&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;32&lt;/td&gt;   &lt;td&gt;0x00,0x13&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;33&lt;/td&gt;   &lt;td&gt;0xC0,0x0d&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;34&lt;/td&gt;   &lt;td&gt;0xC0,0x03&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;35&lt;/td&gt;   &lt;td&gt;0xFE,0xFF&lt;/td&gt;   &lt;td&gt;SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;36&lt;/td&gt;   &lt;td&gt;0x00,0x0a&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Note that the data was from the observation of the TLS ClientHello message when visiting a HTTPS web site from Google Chrome 14.0.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/6514561021947459239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/6514561021947459239'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/google-chrome-preference-of-tls-cipher.html' title='Google Chrome Preference of TLS Cipher Suites'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-1449299707147411568</id><published>2011-07-23T19:22:00.000-07:00</published><updated>2011-07-23T20:03:12.700-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cipher Suite"/><category scheme="http://www.blogger.com/atom/ns#" term="Internet Explorer"/><category scheme="http://www.blogger.com/atom/ns#" term="Preference"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Internet Explorer Preference of TLS Cipher Suites</title><content type='html'>&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;&lt;colgroup span=&quot;1&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;text-align: left;&quot;&gt;&lt;/colgroup&gt; &lt;tbody&gt;
&lt;tr&gt;   &lt;td&gt;Perference Order&lt;/td&gt;   &lt;td&gt;Value&lt;/td&gt;   &lt;td&gt;Description&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;0x00,0x3C&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;0x00,0x2F&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;0x00,0x3D&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;0x00,0x35&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;   &lt;td&gt;0x00,0x05&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;   &lt;td&gt;0x00,0x0A&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;   &lt;td&gt;0xC0,0x27&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;0xC0,0x13&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;   &lt;td&gt;0xC0,0x14&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;   &lt;td&gt;0xC0,0x2B&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;   &lt;td&gt;0xC0,0x23&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;   &lt;td&gt;0xC0,0x2C&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;13&lt;/td&gt;   &lt;td&gt;0xC0,0x24&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;14&lt;/td&gt;   &lt;td&gt;0xC0,0x09&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;15&lt;/td&gt;   &lt;td&gt;0xC0,0x0A&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;0x00,0x40&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;17&lt;/td&gt;   &lt;td&gt;0x00,0x32&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;18&lt;/td&gt;   &lt;td&gt;0x00,0x6A&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA256&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;19&lt;/td&gt;   &lt;td&gt;0x00,0x38&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;20&lt;/td&gt;   &lt;td&gt;0x00,0x13&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;21&lt;/td&gt;   &lt;td&gt;0x00,0x04&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Note that the data was from the observation of the TLS ClientHello message when visiting a HTTPS web site from Internet Explorer (IE) 9.0.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1449299707147411568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/1449299707147411568'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/internet-explorer-preference-of-tls.html' title='Internet Explorer Preference of TLS Cipher Suites'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-4878357546277600287.post-6748749188200590082</id><published>2011-07-23T19:06:00.000-07:00</published><updated>2011-07-23T19:06:25.911-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cipher Suite"/><category scheme="http://www.blogger.com/atom/ns#" term="Firefox"/><category scheme="http://www.blogger.com/atom/ns#" term="Preference"/><category scheme="http://www.blogger.com/atom/ns#" term="TLS"/><title type='text'>Firefox Preference of TLS Cipher Suites</title><content type='html'>&lt;table border=&quot;1&quot; style=&quot;width: 100%;&quot;&gt;&lt;colgroup span=&quot;1&quot; style=&quot;text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace; text-align: center;&quot;&gt;&lt;/colgroup&gt; &lt;colgroup span=&quot;1&quot; style=&quot;text-align: left;&quot;&gt;&lt;/colgroup&gt;  &lt;tbody&gt;
&lt;tr&gt;   &lt;td&gt;Order&lt;/td&gt;   &lt;td&gt;Value&lt;/td&gt;   &lt;td&gt;Description&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;1&lt;/td&gt;   &lt;td&gt;0xC0,0x0A&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;2&lt;/td&gt;   &lt;td&gt;0xC0,0x14&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;0x00,0x88&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;4&lt;/td&gt;   &lt;td&gt;0x00,0x87&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;5&lt;/td&gt;   &lt;td&gt;0x00,0x39&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;6&lt;/td&gt;   &lt;td&gt;0x00,0x38&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;7&lt;/td&gt;   &lt;td&gt;0xC0,0x0F&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;8&lt;/td&gt;   &lt;td&gt;0xC0,0x05&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;9&lt;/td&gt;   &lt;td&gt;0x00,0x84&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_CAMELLIA_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;10&lt;/td&gt;   &lt;td&gt;0x00,0x35&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_256_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;11&lt;/td&gt;   &lt;td&gt;0xC0,0x07&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;12&lt;/td&gt;   &lt;td&gt;0xC0,0x09&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;13&lt;/td&gt;   &lt;td&gt;0xC0,0x11&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;14&lt;/td&gt;   &lt;td&gt;0xC0,0x13&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;15&lt;/td&gt;   &lt;td&gt;0x00,0x45&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;0x00,0x44&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;17&lt;/td&gt;   &lt;td&gt;0x00,0x33&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;18&lt;/td&gt;   &lt;td&gt;0x00,0x32&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;19&lt;/td&gt;   &lt;td&gt;0xC0,0x0C&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;20&lt;/td&gt;   &lt;td&gt;0xC0,0x0E&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;21&lt;/td&gt;   &lt;td&gt;0xC0,0x02&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;22&lt;/td&gt;   &lt;td&gt;0xC0,0x04&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;23&lt;/td&gt;   &lt;td&gt;0x00,0x96&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_SEED_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;24&lt;/td&gt;   &lt;td&gt;0x00,0x41&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_CAMELLIA_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;25&lt;/td&gt;   &lt;td&gt;0x00,0x04&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_MD5&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;26&lt;/td&gt;   &lt;td&gt;0x00,0x05&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_RC4_128_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;27&lt;/td&gt;   &lt;td&gt;0x00,0x2F&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_AES_128_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;28&lt;/td&gt;   &lt;td&gt;0xC0,0x08&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;29&lt;/td&gt;   &lt;td&gt;0xC0,0x12&lt;/td&gt;   &lt;td&gt;TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;30&lt;/td&gt;   &lt;td&gt;0x00,0x16&lt;/td&gt;   &lt;td&gt;TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;31&lt;/td&gt;   &lt;td&gt;0x00,0x13&lt;/td&gt;   &lt;td&gt;TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;32&lt;/td&gt;   &lt;td&gt;0xC0,0x0D&lt;/td&gt;   &lt;td&gt;TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;33&lt;/td&gt;   &lt;td&gt;0xC0,0x03&lt;/td&gt;   &lt;td&gt;TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;34&lt;/td&gt;   &lt;td&gt;0xFE,0xFF&lt;/td&gt;   &lt;td class=&quot;xl6327091&quot;&gt;SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td&gt;35&lt;/td&gt;   &lt;td&gt;0x00,0x0A&lt;/td&gt;   &lt;td&gt;TLS_RSA_WITH_3DES_EDE_CBC_SHA&lt;/td&gt;  &lt;/tr&gt;
&lt;tr height=&quot;0&quot; style=&quot;display: none;&quot;&gt;   &lt;td style=&quot;width: 48pt;&quot; width=&quot;64&quot;&gt;&lt;/td&gt;   &lt;td style=&quot;width: 59pt;&quot; width=&quot;78&quot;&gt;&lt;/td&gt;   &lt;td style=&quot;width: 224pt;&quot; width=&quot;299&quot;&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
Note that the data was from the observation of the TLS ClientHello message when visiting a HTTPS web site from Firefox 5.0.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/6748749188200590082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4878357546277600287/posts/default/6748749188200590082'/><link rel='alternate' type='text/html' href='http://simsmi.blogspot.com/2011/07/firefox-preference-of-tls-cipher-suites.html' title='Firefox Preference of TLS Cipher Suites'/><author><name>X.F</name><uri>http://www.blogger.com/profile/00549181221625186519</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>