<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>