<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
span.E-MailFormatvorlage17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:911429611;
        mso-list-type:hybrid;
        mso-list-template-ids:-2039944276 1093049452 67567619 67567621 67567617 67567619 67567621 67567617 67567619 67567621;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:23.25pt;
        text-indent:-18.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:59.25pt;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:95.25pt;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:131.25pt;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:167.25pt;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:203.25pt;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:239.25pt;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:275.25pt;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:311.25pt;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="DE" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">We have certain requirements that force us to ensure that we can force specific TLS protocol versions.<br>
First I tried doing this using an openssl configuration file. However, I noticed that within src/lib/omniORB/orbcore/ssl/sslContext.cc the TLS version configuration is overwritten.<br>
```<br>
void<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">sslContext::set_supported_versions() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">  SSL_CTX_set_options(pd_ctx,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                      SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 |<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                      SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<br>
```<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Do you have any suggestions on how to force specific protocol versions?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><br>
Alternatively, I would like to propose that we add additional configuration to omniorb that behaves similar to `cipher_list`.<br>
Essentially, I would like to be able to set the protocol version using the orb specific configurations as well as using the python interface.<br>
<br>
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">According to the openssl wiki setting the version using options is deprecated. Hence, I suggest we adopt the min and max approach of configuration.<o:p></o:p></span></p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoListParagraph" style="margin-left:-12.75pt;mso-list:l0 level1 lfo1">
<span lang="EN-US"><a href="https://wiki.openssl.org/index.php/List_of_SSL_OP_Flags">https://wiki.openssl.org/index.php/List_of_SSL_OP_Flags</a><br>
</span><span lang="EN-US" style="font-size:9.5pt;font-family:"Arial",sans-serif;color:black;background:white">These options are deprecated as of 1.1.0, use <b>SSL_CTX_set_min_proto_version()</b> and <b>SSL_CTX_set_max_proto_version()</b> instead.</span><span lang="EN-US"><o:p></o:p></span></li></ul>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Sadly, my understanding of the omniorb codebase is rather limited at the moment, hence writing appropriate tests and getting all locations correct is currently out of reach for me.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Nevertheless, I prepared a small patch as a sketch for my proposal. (I never compiled it and it does not yet cover Python. Just to show my idea!)<br>
<br>
Do you think that my approach is worth implementing?<br>
<br>
Best regards,<br>
Yves-Noel Weweler<br>
<br>
<br>
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Index: include/omniORB4/sslContext.h<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">===================================================================<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- include/omniORB4/sslContext.h        (Revision 6674)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ include/omniORB4/sslContext.h     (Arbeitskopie)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -101,6 +101,19 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   static _core_attr CORBA::Boolean full_peerdetails;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  // Map of string to OpenSSL version enumerators<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  static std::map<std::string, int> ssl_version_string_to_enum_mapping = {<o:p></o:p></span></p>
<p class="MsoNormal">+      {"SSL3_VERSION", SSL3_VERSION},<o:p></o:p></p>
<p class="MsoNormal">+      {"TLS1_VERSION", TLS1_VERSION},<o:p></o:p></p>
<p class="MsoNormal">+      {"TLS1_1_VERSION", TLS1_1_VERSION},<o:p></o:p></p>
<p class="MsoNormal">+      {"TLS1_2_VERSION", TLS1_2_VERSION},<o:p></o:p></p>
<p class="MsoNormal">+      {"TLS1_3_VERSION", TLS1_3_VERSION},<o:p></o:p></p>
<p class="MsoNormal">+      {"DTLS1_VERSION", DTLS1_VERSION},<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US">+      {"DTLS1_2_VERSION", DTLS1_2_VERSION}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  };<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  static int convert_ssl_version_string_to_enum(CORBA::String_var versionString);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  static CORBA::String_var convert_enum_to_ssl_version_string(int enum);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   class PeerDetails {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   public:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     inline PeerDetails(SSL* s, X509* c, CORBA::Boolean v)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -150,6 +163,8 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   void update_CA(const char* cafile, const char* capath);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   void update_key(const char* keyfile, const char* password);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   void update_cipher_list(const char* cipher_list);<o:p></o:p></span></p>
<p class="MsoNormal">+  void update_min_protocol_version(int version);<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US">+  void update_max_protocol_version(int version);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   void update_verify_mode(int mode, int mode_incoming, omni_verify_cb callback);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   void update_info_cb(omni_info_cb callback);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -179,7 +194,7 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   //<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   // Virtual functions that populate the SSL_CTX in pd_ctx. Subclasses<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  // may override these if required. Thse are called while holding<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  // may override these if required. These are called while holding<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   // pd_ctx_lock.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   SSL_CTX* get_SSL_CTX() const<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -193,12 +208,8 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   virtual SSL_METHOD* set_method(); <o:p>
</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   // Method to pass to SSL_CTX_new. Defaults to return TLS_method().<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  virtual void set_supported_versions();
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  // Default to<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  //   SSL_CTX_set_options(ssl_ctx,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  //                       SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 |<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  //                       SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  // That is, only accept TLS 1.2 or later.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  virtual void set_min_protocol_version(int version);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  virtual void set_max_protocol_version(int version);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   virtual void set_CA();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   // Set CA details. Calls both SSL_CTX_load_verify_locations and<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -239,6 +250,8 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   CORBA::String_var pd_password;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   CORBA::String_var pd_password_in_ctx;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   CORBA::String_var pd_cipher_list;<o:p></o:p></span></p>
<p class="MsoNormal">+  int               pd_min_protocol_version;<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US">+  int               pd_max_protocol_version;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   int               pd_verify_mode;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   int               pd_verify_mode_incoming;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   omni_verify_cb    pd_verify_cb;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Index: sample.cfg<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">===================================================================<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- sample.cfg    (Revision 6674)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ sample.cfg (Arbeitskopie)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -326,6 +326,8 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># sslCAFile<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># sslCAPath<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># sslCipherList<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+# sslMinProtocolVersion<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+# sslMaxProtocolVersion<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># sslKeyFile<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># sslKeyPassword<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"># sslVerifyMode<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -349,6 +351,16 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#   sslCipherList specifies the string form of acceptable ciphers. See<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#   the OpenSSL ciphers(1) manual page for details.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   sslMinProtocolVersion specifies the minimum protocol version to use.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   Currently supported versions are SSL3_VERSION, TLS1_VERSION,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   TLS1_1_VERSION, TLS1_2_VERSION, TLS1_3_VERSION for TLS and<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   DTLS1_VERSION, DTLS1_2_VERSION for DTLS.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   sslMaxProtocolVersion specifies the maximum protocol version to use.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   Currently supported versions are SSL3_VERSION, TLS1_VERSION,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   TLS1_1_VERSION, TLS1_2_VERSION, TLS1_3_VERSION for TLS and<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#   DTLS1_VERSION, DTLS1_2_VERSION for DTLS.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+#<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#   sslKeyFile specifies the file containing the SSL key.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#   sslKeyPassword specifies the password to unlock the key.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Index: src/lib/omniORB/orbcore/ssl/sslContext.cc<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">===================================================================<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- src/lib/omniORB/orbcore/ssl/sslContext.cc   (Revision 6674)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ src/lib/omniORB/orbcore/ssl/sslContext.cc (Arbeitskopie)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -53,6 +53,8 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">const char*    sslContext::key_file                    = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">const char*    sslContext::key_file_password           = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">const char*    sslContext::cipher_list                 = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int            sslContext::min_protocol_version       = TLS1_2_VERSION;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+int            sslContext::max_protocol_version       = TLS1_3_VERSION;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int            sslContext::verify_mode                 =<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                             (SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">int            sslContext::verify_mode_incoming        = -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -136,6 +138,21 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> /////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+sslContext::update_min_protocol_version(int version)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  omni_tracedmutex_lock sync(pd_ctx_lock);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  pd_min_protocol_version = version;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+/////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+void<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+sslContext::update_max_protocol_version(int version)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  omni_tracedmutex_lock sync(pd_ctx_lock);<o:p></o:p></span></p>
<p class="MsoNormal">+  pd_max_protocol_version = version;<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+/////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+void<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">sslContext::update_verify_mode(int mode, int mode_incoming,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                                omni_verify_cb callback)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -178,7 +195,8 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">                     CORBA::COMPLETED_NO);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-    set_supported_versions();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    set_min_protocol_version();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    set_max_protocol_version();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     set_certificate();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     set_privatekey();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     set_CA();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -208,7 +226,7 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   SSL_CTX_set_default_passwd_cb_userdata(pd_ctx, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   SSL_CTX_free(pd_ctx);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   pd_password_in_ctx = (const char*)0;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   create_ctx();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -222,7 +240,7 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     // not free it yet.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     if (!(const char*)pd_password_in_ctx)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">       pd_password_in_ctx = pd_password._retn();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-    <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     pd_cafile   = certificate_authority_file;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     pd_capath   = certificate_authority_path;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     pd_keyfile  = key_file;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -229,6 +247,8 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     pd_password = key_file_password;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   pd_cipher_list          = cipher_list;<o:p></o:p></span></p>
<p class="MsoNormal">+  pd_min_protocol_version   = min_protocol_version;<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US">+  pd_max_protocol_version   = max_protocol_version;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   pd_verify_mode          = verify_mode;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   pd_verify_mode_incoming = verify_mode_incoming;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   pd_verify_cb            = verify_callback;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -276,14 +296,24 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> /////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-sslContext::set_supported_versions() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-  SSL_CTX_set_options(pd_ctx,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-                      SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 |<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-                      SSL_OP_NO_TLSv1 | SSL_OP_NO_TLSv1_1);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+sslContext::set_min_protocol_version(int version) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  if (!int SSL_CTX_set_min_proto_version(pd_ctx, version)) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    report_error();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    OMNIORB_THROW(INITIALIZE, INITIALIZE_TransportError, CORBA::COMPLETED_NO);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> /////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">void<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+sslContext::set_max_protocol_version(int version) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  if (!int SSL_CTX_set_max_proto_version(pd_ctx, version)) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    report_error();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    OMNIORB_THROW(INITIALIZE, INITIALIZE_TransportError, CORBA::COMPLETED_NO);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+/////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+void<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">sslContext::set_CA() {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   if (pd_cafile.in() || pd_capath.in()) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -492,3 +522,19 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     log << "OpenSSL: " << (const char*) buf << "\n";<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">   }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+static int convert_ssl_version_string_to_enum(CORBA::String_var versionString) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  auto it = versionMap.find(versionStr);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  int version = (it != versionMap.end()) ? it->second : -1;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  return version;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+static CORBA::String_var convert_enum_to_ssl_version_string(int enumerator) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  std::map<int, std::string> reversedMap;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  for (const auto& pair : originalMap) {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+      reversedMap[pair.second] = pair.first;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  auto it = reversedMap.find(enumerator);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  std::string versionString = (it != reversedMap.end()) ? it->second : 'UNKNOWN';<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  return CORBA::string_dup(versionString);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Index: src/lib/omniORB/orbcore/ssl/sslTransportImpl.cc<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">===================================================================<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- src/lib/omniORB/orbcore/ssl/sslTransportImpl.cc      (Revision 6674)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ src/lib/omniORB/orbcore/ssl/sslTransportImpl.cc   (Arbeitskopie)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -272,6 +272,57 @@<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> <o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> /////////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+class sslMinTlsVersionHandler : public orbOptions::Handler {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+public:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  sslMinTlsVersionHandler() :<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    orbOptions::Handler("sslMinTlsVersion",<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                             "sslMinTlsVersion = <min. protocol version>",<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                             1,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                             "-ORBsslMinTlsVersion <min. protocol version>") {}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  void visit(const char* value, orbOptions::Source)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    sslContext::min_protocol_version = SSLContext::ssl_version_string_to_enum(value);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  void dump(orbOptions::sequenceString& result)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    orbOptions::addKVString(key(),<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                                 sslContext::convert_enum_to_ssl_version_string(sslContext::min_protocol_version),<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                                 result);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+};<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+static sslMinTlsVersionHandler sslMinTlsVersionHandler_;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+/////////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+class sslMaxTlsVersionHandler : public orbOptions::Handler {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+public:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  sslMaxTlsVersionHandler() :<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    orbOptions::Handler("sslMaxTlsVersion",<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                             "sslMaxTlsVersion = <max. protocol version>",<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                             1,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                             "-ORBsslMaxTlsVersion <max. protocol version>") {}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  void visit(const char* value, orbOptions::Source)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    sslContext::max_protocol_version = SSLContext::ssl_version_string_to_enum(value);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  void dump(orbOptions::sequenceString& result)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  {<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+    orbOptions::addKVString(key(),<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                                 sslContext::convert_enum_to_ssl_version_string(sslContext::max_protocol_version),<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+                                                 result);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+  }<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+};<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+static sslMaxTlsVersionHandler sslMaxTlsVersionHandler_;<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+/////////////////////////////////////////////////////////////////////////////<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">static int<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">verifyModeValue(const char* key, const char* value, CORBA::Boolean unset_ok)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"></span>{<o:p></o:p></p>
<p class="MsoNormal">@@ -455,6 +506,8 @@<o:p></o:p></p>
<p class="MsoNormal">     orbOptions::singleton().registerHandler(sslKeyFileHandler_);<o:p></o:p></p>
<p class="MsoNormal">     orbOptions::singleton().registerHandler(sslKeyPasswordHandler_);<o:p></o:p></p>
<p class="MsoNormal">     orbOptions::singleton().registerHandler(sslCipherListHandler_);<o:p></o:p></p>
<p class="MsoNormal">+    orbOptions::singleton().registerHandler(sslMinTlsVersionHandler_);<o:p></o:p></p>
<p class="MsoNormal">+    orbOptions::singleton().registerHandler(sslMaxTlsVersionHandler_);<o:p></o:p></p>
<p class="MsoNormal">     orbOptions::singleton().registerHandler(sslVerifyModeHandler_);<o:p></o:p></p>
<p class="MsoNormal">     <span lang="EN-US">orbOptions::singleton().registerHandler(sslVerifyModeIncomingHandler_);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">     orbOptions::singleton().registerHandler(sslAcceptTimeOutHandler_);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><br>
<br>
<o:p></o:p></span></p>
</div>
</body>
</html>