Security zOS
Security zOS
Security zOS
Security Guide
Version 6.3, July 2009
© 2009 Progress Software Corporation and/or its affiliates or subsidiaries. All rights reserved.
These materials and all Progress® software products are copyrighted and all rights are reserved by Progress
Software Corporation and/or its affiliates or subsidiaries. The information in these materials is subject to change
without notice, and Progress Software Corporation and/or its affiliates or subsidiaries assume no responsibility
for any errors that may appear therein. The references in these materials to specific platforms supported are
subject to change.
Actional, Actional (and design), Allegrix, Allegrix (and design), Apama, Apama (and Design), Artix, Business
Empowerment, DataDirect (and design), DataDirect Connect, DataDirect Connect64, DataDirect Technologies,
DataDirect XML Converters, DataDirect XQuery, DataXtend, Dynamic Routing Architecture, EdgeXtend,
Empowerment Center, Fathom, IntelliStream, IONA, IONA (and design), Mindreef, Neon, Neon New Era of
Networks, ObjectStore, OpenEdge, Orbix, PeerDirect, Persistence, POSSENET, Powered by Progress, PowerTier,
Progress, Progress DataXtend, Progress Dynamics, Progress Business Empowerment, Progress Empowerment
Center, Progress Empowerment Program, Progress OpenEdge, Progress Profiles, Progress Results, Progress
Software Developers Network, Progress Sonic, ProVision, PS Select, SequeLink, Shadow, SOAPscope,
SOAPStation, Sonic, Sonic ESB, SonicMQ, Sonic Orchestration Server, Sonic Software (and design),
SonicSynergy, SpeedScript, Stylus Studio, Technical Empowerment, WebSpeed, Xcalia (and design), and Your
Software, Our Technology-Experience the Connection are registered trademarks of Progress Software
Corporation or one of its affiliates or subsidiaries in the U.S. and/or other countries. AccelEvent, Apama
Dashboard Studio, Apama Event Manager, Apama Event Modeler, Apama Event Store, Apama Risk Firewall,
AppsAlive, AppServer, ASPen, ASP-in-a-Box, BusinessEdge, Cache-Forward, DataDirect Spy, DataDirect
SupportLink, FUSE, FUSE Mediation Router, FUSE Message Broker, FUSE Services Framework, Future Proof,
GVAC, High Performance Integration, ObjectStore Inspector, ObjectStore Performance Expert, OpenAccess,
Orbacus, Pantero, POSSE, ProDataSet, Progress ESP Event Manager, Progress ESP Event Modeler, Progress
Event Engine, Progress RFID, PSE Pro, SectorAlliance, SeeThinkAct, Shadow z/Services, Shadow z/Direct,
Shadow z/Events, Shadow z/Presentation, Shadow Studio, SmartBrowser, SmartComponent,
SmartDataBrowser, SmartDataObjects, SmartDataView, SmartDialog, SmartFolder, SmartFrame, SmartObjects,
SmartPanel, SmartQuery, SmartViewer, SmartWindow, Sonic Business Integration Suite, Sonic Process Manager,
Sonic Collaboration Server, Sonic Continuous Availability Architecture, Sonic Database Service, Sonic
Workbench, Sonic XML Server, StormGlass, The Brains Behind BAM, WebClient, Who Makes Progress, and Your
World. Your SOA. are trademarks or service marks of Progress Software Corporation or one of its affiliates or
subsidiaries in the U.S. and other countries. Java and all Java-based marks are trademarks or registered
trademarks of Sun Microsystems, Inc. in the U.S. and other countries. Any other trademarks contained herein
are the property of their respective owners.
Third Party Acknowledgments:
1. The Product incorporates IBM-ICU 2.6 (LIC-255) technology from IBM. Such technology is subject to the
following terms and conditions: Copyright (c) 1995-2009 International Business Machines Corporation and
others. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this
software and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the
Software, and to permit persons to whom the Software is furnished to do so, provided that the above copyright
notice(s) and this permission notice appear in all copies of the Software and that both the above copyright
notice(s) and this permission notice appear in supporting documentation.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to
promote the sale, use or other dealings in this Software without prior written authorization of the copyright
holder. All trademarks and registered trademarks mentioned herein are the property of their respective owners.
2. The Product incorporates IDL Compiler Front End Technology from Sun Microsystems, Inc. Such technology
is subject to the following terms and conditions: Copyright 1992, 1993, 1994 Sun Microsystems, Inc. Printed in
the United States of America. All Rights Reserved. This product is protected by copyright and distributed under
the following license restricting its use. The Interface Definition Language Compiler Front End (CFE) is made
available for your use provided that you include this license and copyright notice on all media and
documentation and the software program in which this product is incorporated in whole or part. You may copy
and extend functionality (but may not remove functionality) of the Interface Definition Language CFE without
charge, but you are not authorized to license or distribute it to anyone else except as part of a product or
program developed by you or with the express written consent of Sun Microsystems, Inc. ("Sun"). The names of
Sun Microsystems, Inc. and any of its subsidiaries or affiliates may not be used in advertising or publicity
pertaining to distribution of Interface Definition Language CFE as permitted herein. This license is effective until
terminated by Sun for failure to comply with this license. Upon termination, you shall destroy or return all code
and documentation for the Interface Definition Language CFE. The Interface Definition Language CFE may not be
exported outside of the United States without first obtaining the appropriate government approvals.
INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE,
NONINFRINGEMENT, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. INTERFACE
DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT ANY OBLIGATION ON THE PART OF
SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR
ENHANCEMENT. SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH RESPECT TO
THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY INTERFACE DEFINITION LANGUAGE
CFE OR ANY PART THEREOF. IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE
FOR ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL DAMAGES, EVEN IF
SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Use, duplication, or disclosure by the government is subject to restrictions as set forth in subparagraph (c)(1)(ii)
of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR 52.227-19.
Sun, Sun Microsystems and the Sun logo are trademarks or registered trademarks of Sun Microsystems, Inc.
SunSoft, Inc. 2550 Garcia Avenue Mountain View, California 94043. NOTE: SunOS, SunSoft, Sun, Solaris, Sun
Microsystems or the Sun logo are trademarks or registered trademarks of Sun Microsystems, Inc.
List of Figures 13
Preface 15
5
CONTENTS
6
CONTENTS
7
CONTENTS
8
CONTENTS
Part VI Appendices
Appendix A Security Configuration 267
Applying Constraints to Certificates 269
initial_references 271
plugins:atli2_tls 272
plugins:csi 273
plugins:gsp 274
plugins:https 279
plugins:iiop_tls 280
plugins:locator 285
plugins:security 286
plugins:systemssl_toolkit 287
policies 289
policies:csi 295
policies:https 298
policies:iiop_tls 304
9
CONTENTS
principal_sponsor 314
principal_sponsor:csi 318
Index 347
10
List of Tables
Table 1: Terminology Describing Secure Client Sample Configurations 56
Table 2: Terminology Describing Secure Server Sample Configurations 58
Table 3: Description of Different Types of Association Option 135
Table 4: Setting EstablishTrustInTarget and EstablishTrustInClient Association Options 136
Table 5: Setting Quality of Protection Association Options 136
Table 6: Setting the NoProtection Association Option 138
Table 7: Cipher Suite Definitions 141
Table 8: Association Options Supported by Cipher Suites 145
Table 9: Policy Management Objects 212
Table 10: Mechanism Policy Cipher Suites 292
Table 11: Mechanism Policy Cipher Suites 301
Table 12: Mechanism Policy Cipher Suites 308
Table 13: Commonly Used Attribute Types 324
Table 14: AssociationOptions for Client and Target 328
11
LIST OF TABLES
12
List of Figures
Figure 1: Example System with a Standalone Orbix Security Service 24
Figure 2: Security Plug-Ins in a CORBA Application 33
Figure 3: A Secure CORBA Application within the iSF 54
Figure 4: Two-Tier CORBA System in the iSF 68
Figure 5: Three-Tier CORBA System in the iSF 73
Figure 6: Local ACL Scenario 89
Figure 7: Centralized ACL scenario 91
Figure 8: Custom ClientAccessDecision in an Orbix Application 97
Figure 9: A Certificate Chain of Depth 2 105
Figure 10: A Certificate Chain of Depth 3 106
Figure 11: Configuration of a Secure Association 125
Figure 12: Constraining the List of Cipher Suites 144
Figure 13: Target Authentication Only 151
Figure 14: Target and Client Authentication 154
Figure 15: Elements in a PKCS#12 File 158
Figure 16: Basic CSIv2 Authentication over Transport Scenario 169
Figure 17: Basic CSIv2 Identity Assertion Scenario 170
Figure 18: CSIv2 Authentication Over Transport Scenario 175
Figure 19: Java Dialog Window for GSSUP Username and Password 185
Figure 20: CSIv2 Identity Assertion Scenario 195
Figure 21: Validating a Certificate 250
Figure 22: Using a CertValidator Callback 252
13
LIST OF FIGURES
14
Preface
What is Covered in this Book
This book is a guide to administering and programming secure CORBA
applications with Orbix.
The IONA security framework (iSF) provides the underlying security
infrastructure for performing authentication and authorization.
15
PREFACE
Appendices
The appendices list further technical details.
Related Documentation
The Orbix Programmer’s Guide C++ Edition and Orbix Programmer’s
Reference C++ Edition provide details about developing Orbix applications
in C++ in various environments, including z/OS.
The latest updates to the Orbix documentation can be found at:
http://www.iona.com/docs.
Additional Resources
The Knowledge Base contains helpful articles, written by experts, about
Orbix Mainframe, and other products:
http://www.iona.com/support/kb/
If you need help with Orbix Mainframe or any other products, contact
technical support:
http://www.progress.com/support
16
PREFACE
Typographical Conventions
This book uses the following typographical conventions:
Constant width Constant width (courier font) in normal text
represents portions of code and literal names of items
such as classes, functions, variables, and data
structures. For example, text might refer to the
CORBA::Object class.
17
PREFACE
Keying Conventions
This book uses the following keying conventions:
18
Part I
Introducing Security
In this part This part contains the following chapters:
Orbix Security
Framework
The Orbix Security Framework provides the common
underlying security framework for all types of applications in
Orbix, including CORBA and Web services applications. This
chapter provides an introduction to the main features of the
iSF.
21
CHAPTER 1 | Orbix Security Framework
22
Introduction to the iSF
iSF Features
Overview The Orbix Security Framework is a scalable, standards-based security
framework with the following features:
• Pluggable integration with third-party enterprise security systems.
• Out-of-the-box integration with flat file, or LDAP security systems.
• Centralized management of user accounts.
• Role-Based Access Control.
• Role-to-permission mapping supported by access control lists.
• Unified security platform works across CORBA and Web services.
• Security platform is ART-based.
• Logging.
23
CHAPTER 1 | Orbix Security Framework
Orbix security service The Orbix security service is the central component of the Orbix Security
Framework, providing an authentication service, an authorization service
and a repository of user information and credentials. When the Orbix
security service is deployed in standalone mode, all kinds of application,
including CORBA applications and Web services, can call it remotely.
24
Introduction to the iSF
Enterprise security service The Orbix security service is designed to integrate with a third-party
enterprise security service (ESS), which acts as the primary repository for
user information and credentials. Integration with an ESS is supported by a
variety of iSF adapters. The following adapters are currently supported by
iSF:
• LDAP adapter.
The following adapter is provided for use in simple demonstrations (but is
not supported in production environments):
• File adapter.
In addition, it is possible to build your own adapters using the iSF Adapter
SDK—see “iSF Server Development Kit” on page 29.
Propagating security credentials The example in Figure 1 on page 24 assumes that a user’s credentials can
be propagated from one application to another. There are fundamentally two
different layers that can propagate security credentials between processes in
an iSF distributed system:
• Transport layer.
• Application layer.
Transport layer Security at the transport layer enables security information to be exchanged
during the security handshake, which happens while the connection is being
established. For example, the SSL/TLS standard enables X.509 certificates
to be exchanged between a client and a server during a security handshake.
25
CHAPTER 1 | Orbix Security Framework
Security Standards
Overview One of the goals of the iSF is to base the security framework on established
security standards, thereby maximizing the ability of iSF to integrate and
interoperate with other secure systems. This section lists the security
standards currently supported by the iSF.
Standards supported by iSF The following security standards are supported by iSF:
• HTTP login mechanisms—that is, HTTP basic authentication and
HTTP form-based authentication.
• Secure Sockets Layer / Transport Layer Security (SSL/TLS), from the
Internet Engineering Task Force, which provides data security for
applications that communicate across networks.
• CCITT X.509, which governs the form of security certificates based on
public (asymmetric) key systems)
• OMG Common Secure Interoperability specification (CSIv2)
• The XML Key management Specification (XKMS), which specifies the
protocols for distributing and registering public keys. XKMS is
composed of the XML Key Information Service Specification (X-KISS),
and the XML Key Registration Service Specification (X-KRSS). XKMS
provides the Public Key Infrastructure (PKI) support in iSF.
• Security Assertion Markup Language (SAML) from the Organization for
the Advancement of Structured Information Standards (OASIS), which
is the XML security standard for exchanging authentication and
authorization information. The SAML specification provides bindings
for various transport protocols including HTTP/HTTPS and SOAP.
• Secure Multipurpose Internet Mail Extensions (S/MIME), which is a
specification for secure electronic mail, and is designed to add security
to e-mail messages in MIME format.
• WS-Security, which a proposed standard from Microsoft, IBM, and
VeriSign. It defines a standard set of SOAP extensions, or message
headers, that can be used to implement integrity and confidentiality in
Web services applications.
• Java Authentication and Authorization Service (JAAS)
26
Orbix Security Service
27
CHAPTER 1 | Orbix Security Framework
Remote connections to the Orbix Orbix plug-ins can communicate with the Orbix security service through an
security service IIOP/TLS connection.
Standalone or embedded The iSF server module can be packaged in the following different ways:
deployment • Standalone deployment (default)—the iSF server module is packaged
as a standalone server process, the Orbix security service, that services
requests through a CORBA interface (IIOP or IIOP/TLS).
• Embedded deployment—the iSF server module is packaged as a JAR
library that can be loaded directly into a Java application. In this case,
service requests are made as local calls.
iSF adapter API Integration with third-party enterprise security systems is facilitated by the
iSF adapter API that enables the Orbix security service to delegate security
operations to other security systems.
iSF adapters IONA provides several ready-made adapters that are implemented with the
iSF adapter API. The following adapters are available:
• LDAP adapter.
• File adapter (demonstration only—not supported in production
environments).
28
Orbix Security Service
iSF adapter SDK The iSF adapter SDK provides an API implementing custom iSF adapters.
Using this API, you can integrate any enterprise security system with the
iSF.
This API is available in both C++ and Java.
iSF client SDK The iSF client SDK provides an API for Orbix to access the iSF server
module’s core functionality directly (usually through remote calls).
This is a private API intended only for internal use by Orbix.
29
CHAPTER 1 | Orbix Security Framework
Secure Applications
Overview This section explains how applications from various technology domains are
integrated into the Orbix Security Framework.
30
Secure Applications
What is ART? IONA’s Adaptive Runtime Technology (ART) is a modular framework for
constructing distributed systems, based on a lightweight core and an
open-ended set of plug-ins. ART is the underlying technology in Orbix.
Security plug-ins An application can load any of the following security plug-ins to enable
particular security features and participate in the Orbix Security Framework:
• IIOP/TLS.
• HTTPS.
• CSIv2.
• GSP.
IIOP/TLS The IIOP/TLS plug-in provides applications with the capability to establish
secure connections using IIOP over a TLS transport. Authentication is also
performed using X.509 certificates. For example, this plug-in is used by
CORBA applications.
HTTPS The HTTPS plug-in provides the capability to establish secure connections
using HTTP over a TLS transport. Authentication is also performed using
X.509 certificates. For example, this plug-in is used by the Web container to
enable secure communications with Web clients.
31
CHAPTER 1 | Orbix Security Framework
CSIv2 The Common Secure Interoperability (CSIv2) plug-in provides support for
authentication based on a username and password. The CSIv2 plug-in also
enables applications to forward usernames or security tokens to other
applications over an IIOP or IIOP/TLS connection.
GSP The GSP plug-in provides an authorization capability for the iSF—that is,
the capability to restrict access to certain methods, operations, or attributes,
based on the configuration values stored in an external action-role mapping
XML file. The GSP plug-in works in tandem with the Orbix security service to
realize a complete system of role-based access control.
32
Secure Applications
IIOP/TLS plug-in in CORBA a The IIOP/TLS plug-in enables the CORBA application to establish
application connections secured by SSL/TLS. This layer of security is essential for
providing data encryption.
33
CHAPTER 1 | Orbix Security Framework
CSIv2 plug-in in a CORBA The CSIv2 plug-in provides CORBA applications with the following features:
application • The capability to log in with a username and password.
• Screening incoming IIOP invocations by making sure that the
username/password combination is correct.
• Transmission of a username/password/domain combination to other
applications.
• Transmission of a username or security token to other applications.
GSP plug-in in a CORBA The GSP plug-in restricts access to a CORBA server’s operations and
application attributes, only allowing user’s with certain specified roles to proceed with
an invocation.
34
Administering the iSF
35
CHAPTER 1 | Orbix Security Framework
Orbix configuration file The Orbix configuration file, DomainName.cfg (or, alternatively, the CFR
service), is used to configure the security policies for all of the applications
and services in a particular location domain. For example, the following
kinds of security policy are specified in the Orbix configuration file:
• The list of security plug-ins to be loaded by an application.
• Whether an application accepts both secure and insecure connections,
or secure connections only.
• The name of the iSF authorization realm to which an application
belongs.
These are just some of the security policies that can be configured—see
“Security Configuration” on page 267.
iSF properties file The iSF properties file is used to configure the core properties of the Orbix
security service. This file primarily configures the properties of an iSF
adapter that connects to an enterprise security backend. This file also
configures the optional single sign-on and authorization manager features.
Enterprise security service Because the Orbix security service is capable of integrating with a
administration third-party enterprise security service, you can continue to use the native
third-party administration tools for your chosen enterprise security service.
These tools would be used to administer user accounts, including such data
as usernames, passwords, user groups, and roles.
36
Administering the iSF
Access control lists To complete a system of role-based access control, it is necessary to provide
individual applications with an access control list (ACL) file that is
responsible for mapping user roles to particular permissions.
For example, the ACL associated with a CORBA server could specify that
only a specified set of roles are allowed to invoke a particular IDL operation.
There is one type of ACL file used within the iSF, as follows:
• Action-role mapping (proprietary format).
37
CHAPTER 1 | Orbix Security Framework
Customizing the security For a real deployment, certain aspects of the security configuration for ASP
configuration services would be customized, as follows:
• X.509 certificates associated with ASP services—the sample
certificates initially associated with the ASP services must all be
replaced, because they are not secure.
• Default security policies—for the ASP services might need to be
changed before deployment.
38
Part II
Orbix Security Framework
Administration
In this part This part contains the following chapters:
Transport Layer
Security
Transport Layer Security provides encryption and
authentication mechanisms for your Orbix system.
41
CHAPTER 2 | Transport Layer Security
Transport Layer Security Transport Layer Security (TLS) is an IETF Open Standard. It is based on,
and is the successor to, Secure Sockets Layer (SSL), long the standard for
secure communications.
The TLS Protocol provides the most critical security features to help you
preserve the privacy and integrity of your system:
• Authentication (based on RSA with X.509v3 certificates).
• Encryption (based on DES, Triple DES, RC4, IDEA).
• Message integrity (based on SHA1, MD5).
• A framework that allows new cryptographic algorithms to be
incorporated into the TLS specification.
CORBA Security Level 2 Orbix is based on the CORBA Security Level 2 policies and API’s (RTF 1.7).
It implements a set of policies from the CORBA specification that enable you
to control encryption and authentication at a fine level.
Added-value policies and APIs Orbix also has added-value policies and APIs that provide more control for
SSL/TLS applications than provided by CORBA Security.
Security-unaware and There are two basic approaches to using security in your applications:
security-aware applications • Security-unaware applications—Modify the Orbix configuration to
enable and configure security for your application. This approach to
security is completely transparent to the application, requiring no code
changes or recompilation.
42
What does Orbix Provide?
43
CHAPTER 2 | Transport Layer Security
44
How TLS Provides Security
Authentication in TLS
Public key cryptography TLS uses Rivest Shamir Adleman (RSA) public key cryptography for
authentication. In public key cryptography, each application has an
associated public key and private key. Data encrypted with the public key
can be decrypted only with the private key. Data encrypted with the private
key can be decrypted only with the public key.
Public key cryptography allows an application to prove its identity by
encoding data with its private key. As no other application has access to this
key, the encoded data must derive from the true application. Any
application can check the content of the encoded data by decoding it with
the application’s public key.
The TLS Handshake Protocol Consider the example of two applications, a client and a server. The client
connects to the server and wishes to send some confidential data. Before
sending application data, the client must ensure that it is connected to the
required server and not to an impostor.
When the client connects to the server, it confirms the server identity using
the TLS handshake protocol. A simplified explanation of how the client
executes this handshake in order to authenticate the server is as follows:
Stage Description
3 The client extracts the public key from the certificate and
encrypts a symmetric encryption algorithm session key with the
extracted public key.
45
CHAPTER 2 | Transport Layer Security
Stage Description
4 The server uses its private key to decrypt the encrypted session
key which it will use to encrypt and decrypt application data
passing to and from the client. The client will also use the
shared session key to encrypt and decrypt messages passing to
and from the server.
Optimized handshake The TLS protocol permits a special optimized handshake in which a
previously established session can be resumed. This has the advantage of
not needing expensive private key computations. The TLS handshake also
facilitates the negotiation of ciphers to be used in a connection.
Client authentication The TLS protocol also allows the server to authenticate the client. Client
authentication, which is supported by Orbix, is optional in TLS
communications.
46
How TLS Provides Security
Certification authority A CA is a trusted authority that verifies the validity of the combination of
entity name and public key in a certificate. You must specify trusted CAs in
order to use Orbix.
Access to certificates According to the TLS protocol, it is unnecessary for applications to have
access to all certificates. Generally, each application only needs to access its
own certificate and the corresponding issuing certificates. Clients and
servers supply their certificates to applications that they want to contact
during the TLS handshake. The nature of the TLS handshake is such that
there is nothing insecure in receiving the certificate from an as yet untrusted
peer. The certificate will be checked to make sure that it has been digitally
signed by a trusted CA and the peer will have to prove its identity during the
handshake.
47
CHAPTER 2 | Transport Layer Security
48
How TLS Provides Security
Guaranteeing message integrity An intermediary cannot compute the MAC for a message without knowing
the secret key used to encrypt it. If the message is corrupted or modified
during transmission, the message content will not match the MAC. TLS
automatically detects this error and rejects corrupted messages.
49
CHAPTER 2 | Transport Layer Security
50
CHAPTER 3
Securing
Applications and
Services
This chapter describes how to enable security in the context
of the IONA security framework for different types of
applications and services.
51
CHAPTER 3 | Securing Applications and Services
Configure and run the iS2 server For detailed instructions on how to configure and run an iS2 server off-host,
on another host see the version of the Orbix Security Guide for the UNIX and Windows
platforms.
Modify the Orbix configuration on To configure your z/OS applications to use an off-host iS2 server, perform
z/OS the following steps:
1. On the host where the iS2 server is running (UNIX or Windows), open
the local Orbix configuration file, iS2Domain.cfg, and look for a
configuration entry of the following form:
52
Securing CORBA Applications
53
CHAPTER 3 | Securing Applications and Services
CORBA applications and iSF Figure 3 shows the main features of a secure CORBA application in the
context of the iSF.
54
Securing CORBA Applications
Security plug-ins Within the iSF, a CORBA application becomes fully secure by loading the
following plug-ins:
• IIOP/TLS plug-in
• CSIv2 plug-in (Java only)
• GSP plug-in
IIOP/TLS plug-in The IIOP/TLS plug-in, iiop_tls, enables a CORBA application to transmit
and receive IIOP requests over a secure SSL/TLS connection. This plug-in
can be enabled independently of the other two plug-ins.
See “Securing Communications with SSL/TLS” on page 56 for details on
how to enable IIOP/TLS in a CORBA application.
CSIv2 plug-in (Java only) The CSIv2 plug-in, csi, provides a mechanism for propagating
username/password credentials between CORBA applications. When the
CSIv2 plug-in is combined with the GSP plug-in, the username and
password are forwarded to a central iS2 server to be authenticated. This
plug-in is needed to support the iSF.
GSP plug-in The GSP plug-in provides an authentication capability for the iSF. When the
GSP plug-in is loaded into an Orbix application, CSI credentials are
automatically forwarded to the iS2 server to be authenticated.This plug-in is
needed to support the iSF.
55
CHAPTER 3 | Securing Applications and Services
Configuration samples Appendix D on page 331 includes a variety of SSL/TLS configuration scopes
that you can use as a starting point for configuring your own applications.
The following sample SSL/TLS configuration scopes are available:
• demos.tls.secure_client_with_no_cert
• demos.tls.secure_client_with_cert
• demos.tls.semi_secure_client_with_cert
• demos.tls.semi_secure_client_with_no_cert
• demos.tls.secure_server_no_client_auth
• demos.tls.secure_server_request_client_auth
• demos.tls.secure_server_enforce_client_auth
• demos.tls.semi_secure_server_no_client_auth
• demos.tls.semi_secure_server_request_client_auth
• demos.tls.semi_secure_server_enforce_client_auth
Secure client terminology The terminology used to describe the preceding client configuration scopes
is explained in Table 1.
secure_client The client opens only secure SSL/TLS connections to the server. If the server does
not support secure connections, the connection attempt will fail.
56
Securing CORBA Applications
semi_secure_client The type of connection opened by the client depends on the disposition of the
server:
• If the server is insecure (listening only on an insecure IIOP port), an insecure
connection is established.
• If the server is secure (listening only on a secure IIOP/TLS port), a secure
SSL/TLS connection is established.
• If the server is semi-secure (listening on both an IIOP port and on an
IIOP/TLS port), the type of connection established depends on the client’s
binding:client_binding_list.
♦ If, in the client’s binding:client_binding_list, a binding with the
IIOP interceptor appears before a binding with the IIOP_TLS
interceptor, an insecure connection is established.
♦ Conversely, if a binding with the IIOP_TLS interceptor appears before a
binding with the IIOP interceptor, a secure connection is established.
with_no_cert No X.509 certificate is associated with the client (at least, not through
configuration).
with_cert An X.509 certificate is associated with the client by setting the principal sponsor
configuration variables.
57
CHAPTER 3 | Securing Applications and Services
Secure server terminology The terminology used to describe the preceding server configuration scopes
is explained in Table 2.
secure_server The server accepts only secure SSL/TLS connection attempts. If a remote client
does not support secure connections, the connection attempt will fail.
semi_secure_server The server accepts both secure and insecure connection attempts by remote
clients.
no_client_auth The server does not support client authentication over SSL/TLS. That is, during an
SSL/TLS handshake, the server will not request the client to send an X.509
certificate.
request_client_auth The server allows a connecting client the option of either authenticating itself or
not authenticating itself using an X.509 certificate.
enforce_client_auth The server requires a connecting client to authenticate itself using an X.509
certificate.
58
Securing CORBA Applications
59
CHAPTER 3 | Securing Applications and Services
Sample client configuration For example, consider a secure SSL/TLS client whose configuration is
modelled on the demos.tls.secure_client_with_no_cert configuration.
Example 1 shows how to configure such a sample client.
3 policies:mechanism_policy:protocol_version = "SSL_V3";
policies:mechanism_policy:ciphersuites =
["RSA_WITH_RC4_128_SHA", "RSA_WITH_RC4_128_MD5"];
6 policies:client_secure_invocation_policy:requires =
["Confidentiality", "EstablishTrustInTarget"];
policies:client_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
};
};
...
60
Securing CORBA Applications
Note: For fully secure applications, you should exclude the iiop
plug-in (insecure IIOP) from the ORB plug-ins list. This renders the
application incapable of making insecure IIOP connections.
For semi-secure applications, however, you should include the iiop
plug-in in the ORB plug-ins list.
If you plan to use the full IONA security framework, you should include
the gsp plug-in in the ORB plug-ins list as well—see “Securing
Two-Tier CORBA Systems with iSF” on page 68.
2. Make sure that the binding:client_binding_list variable includes
bindings with the IIOP_TLS interceptor. Your can use the value of the
binding:client_binding_list shown here.
If you plan to use the full IONA security framework, you should use the
binding:client_binding_list as shown in “Client configuration” on
page 69 instead.
3. The SSL/TLS mechanism policy specifies the default security protocol
version and the available cipher suites—see “Specifying Cipher Suites”
on page 139.
4. This line enables console logging for security-related events, which is
useful for debugging and testing. Because there is a performance
penalty associated with this option, you might want to comment out or
delete this line in a production system.
5. The SSL/TLS principal sponsor is a mechanism that can be used to
specify an application’s own X.509 certificate. Because this client
configuration does not use a certificate, the principal sponsor is
disabled by setting principal_sponsor:use_principal_sponsor to
false.
61
CHAPTER 3 | Securing Applications and Services
6. The following two lines set the required options and the supported
options for the client secure invocation policy. In this example, the
policy is set as follows:
♦ Required options—the options shown here ensure that the client
can open only secure SSL/TLS connections.
♦ Supported options—the options shown include all of the
association options, except for the EstablishTrustInClient
option. The client cannot support EstablishTrustInClient,
because it has no X.509 certificate.
Sample server configuration Generally speaking, it is rarely necessary to configure such a thing as a pure
server (that is, a server that never makes any requests of its own). Most real
servers are applications that act in both a server role and a client role.
Hence, the sample server described here is a hybrid of the following two
demonstration configurations:
• demos.tls.secure_server_request_client_auth
• demos.tls.secure_client_with_cert
3 principal_sponsor:use_principal_sponsor = "true";
4 principal_sponsor:auth_method_id = "security_label";
62
Securing CORBA Applications
5 principal_sponsor:auth_method_data = ["label=RingLabel"];
63
CHAPTER 3 | Securing Applications and Services
Mixed security configurations Most realistic secure server configurations are mixed in the sense that they
include both server settings (for the server role), and client settings (for the
client role). When combining server and client security settings for an
application, you must ensure that the settings are consistent with each
other.
For example, consider the case where the server settings are secure and the
client settings are insecure. To configure this case, set up the server role as
described in “Sample server configuration” on page 62. Then configure the
client role by adding (or modifying) the following lines to the
my_secure_apps.my_server configuration scope:
64
Securing CORBA Applications
The first line sets the ORB plug-ins list to make sure that the iiop plug-in
(enabling insecure IIOP) is included. The NoProtection association option,
which appears in the required and supported client secure invocation policy,
effectively disables security for the client role.
Customizing SSL/TLS security You can, optionally, customize the SSL/TLS security policies in various
policies ways. For details, see the following references:
• “Configuring SSL/TLS Secure Associations” on page 123.
• “Configuring SSL/TLS Authentication” on page 149.
65
CHAPTER 3 | Securing Applications and Services
POA policies required for setting The main prerequisite for configuring fixed ports is that a CORBA developer
fixed ports programs the application to create a POA instance with the following
policies:
• PortableServer::LifespanPolicy—the value of this POA policy
should be set to PERSISTENT, indicating that the objects managed by
this POA can outlive the server process.
• IT_CORBA::WellKnownAddressingPolicy—the value of this POA policy
is a string that defines a well-known addressing prefix, <wka_prefix>,
for host/port configuration variables that an administrator can edit in
the Orbix configuration.
• IT_PortableServer::PersistenceModePolicy—the value of this POA
policy can be set to either of the following values:
♦ DIRECT_PERSISTENCE, indicating that the POA is configured to
receive connection attempts directly from clients. The server
listens on the fixed port (well-known address) and exports IORs
containing its own host and fixed port.
♦ INDIRECT_PERSISTENCE, indicating that connection attempts will
be redirected to the server by the locator service. The server
listens on the fixed port (well-known address), but exports IORs
containing the locator’s host and port.
Programming the required POA For details of how to program POA policies, see the CORBA Programmer’s
policies Guide.
66
Securing CORBA Applications
Fixed port configuration variables The following IIOP/TLS configuration variables can be set for a POA that
supports the well-known addressing policy with the <wka_prefix> prefix:
<wka_prefix>:iiop_tls:host = "<host>";
Specifies the hostname, <host>, to publish in the IIOP/TLS profile of
server-generated IORs.
<wka_prefix>:iiop_tls:port = "<port>";
Specifies the fixed IP port, <port>, on which the server listens for
incoming IIOP/TLS messages. This port value is also published in the
IIOP/TLS profile of generated IORs.
<wka_prefix>:iiop_tls:listen_addr = "<host>";
Restricts the IIOP/TLS listening point to listen only on the specified
host, <host>. It is generally used on multi-homed hosts to limit
incoming connections to a particular network interface.
<wka_prefix>:iiop_tls:addr_list =
["<optional_plus_sign><host>:<port>", ... ];
In the context of server clustering, this configuration variable specifies
a list of host and port combinations, <host>:<port>, for the
<wka_prefix> persistent POA instance.
One of the host and port combinations, <host>:<port> (lacking a +
prefix), specifies the POA’s own listening point. The other host and port
combinations, +<host>:<port> (including a + prefix), specify the
listening points for other servers in the cluster.
67
CHAPTER 3 | Securing Applications and Services
Prerequisites Before implementing this scenario on the z/OS platform, you must configure
your domain to use an off-host iS2 server.
See “Connecting to an Off-Host iS2 Server” on page 52.
Two-tier CORBA system Figure 4 shows a basic two-tier CORBA system in the iSF, featuring a client
and a target server.
68
Securing CORBA Applications
Scenario description The scenario shown in Figure 4 on page 68 can be described as follows:
Stage Description
Client configuration The CORBA client from Figure 4 on page 68 can be configured as shown in
Example 3.
69
CHAPTER 3 | Securing Applications and Services
7 principal_sponsor:csi:use_principal_sponsor = "true";
principal_sponsor:csi:auth_method_id = "GSSUPMech";
principal_sponsor:csi:auth_method_data = [];
};
};
...
70
Securing CORBA Applications
7. The next three lines specify that the client uses the CSI principal
sponsor to obtain the user’s authentication data. With the configuration
as shown, the user would be prompted to enter the username and
password when the client application starts up.
Note: If the client runs on the z/OS platform, you would have to
specify the CSI username and password explicitly in the configuration
file. z/OS cannot prompt the user for a username and a password.
Target configuration The CORBA target server from Figure 4 on page 68 can be configured as
shown in Example 4.
71
CHAPTER 3 | Securing Applications and Services
principal_sponsor:csi:use_principal_sponsor = "true";
principal_sponsor:csi:auth_method_id = "GSSUPMech";
principal_sponsor:csi:auth_method_data =
["username=Username", "password=Pass", domain="DEFAULT"];
};
};
72
Securing CORBA Applications
Prerequisites Before implementing this scenario on the z/OS platform, you must configure
your domain to use an off-host iS2 server.
See “Connecting to an Off-Host iS2 Server” on page 52.
Three-tier CORBA system Figure 5 shows a basic three-tier CORBA system in the iSF, featuring a
client, an intermediate server and a target server.
73
CHAPTER 3 | Securing Applications and Services
Scenario description The second stage of the scenario shown in Figure 5 on page 73
(intermediate server invokes an operation on the target server) can be
described as follows:
Stage Description
Client configuration The client configuration for the three-tier scenario is identical to that of the
two-tier scenario, as shown in “Client configuration” on page 69.
Intermediate configuration The CORBA intermediate server from Figure 5 on page 73 can be
configured as shown in Example 5.
74
Securing CORBA Applications
2 policies:csi:attribute_service:client_supports =
["IdentityAssertion"];
3 policies:csi:auth_over_transport:target_supports =
["EstablishTrustInClient"];
4 policies:csi:auth_over_transport:target_requires =
["EstablishTrustInClient"];
5 policies:csi:auth_over_transport:server_domain_name =
"DEFAULT";
principal_sponsor:csi:use_principal_sponsor = "true";
principal_sponsor:csi:auth_method_id = "GSSUPMech";
principal_sponsor:csi:auth_method_data =
["username=Username", "password=Pass", domain="DEFAULT"];
};
};
75
CHAPTER 3 | Securing Applications and Services
Target configuration The CORBA target server from Figure 5 on page 73 can be configured as
shown in Example 6.
76
Securing CORBA Applications
principal_sponsor:csi:use_principal_sponsor = "true";
principal_sponsor:csi:auth_method_id = "GSSUPMech";
principal_sponsor:csi:auth_method_data =
["username=Username", "password=Pass", domain="DEFAULT"];
};
};
Note: The motivation for limiting access to the target server is that
clients of the target server obtain a special type of privilege:
propagated identities are granted access to the target server without
the target server performing authentication on the propagated
identities. Hence, the target server trusts the intermediate server to
do the authentication on its behalf.
77
CHAPTER 3 | Securing Applications and Services
78
Securing Orbix Services
Configuring the Orbix services Before deploying the Orbix services, you must customize the security
configuration, replacing demonstration certificates by custom certificates
and so on. The procedure for securing Orbix services is similar to the
procedure for securing regular CORBA applications.
See “Securing CORBA Applications” on page 53.
79
CHAPTER 3 | Securing Applications and Services
Caching of Credentials
Overview To improve the performance of servers within the IONA security framework,
the GSP plug-in implements caching of credentials (that is, the
authentication and authorization data received from the iS2 server).
The GSP credentials cache reduces a server’s response time by reducing the
number of remote calls to the iS2 security service. On the first call from a
given user, the server calls iS2 and caches the received credentials. On
subsequent calls from the same user, the cached credentials are used,
thereby avoiding a remote call to iS2.
Cache time-out The cache can be configured to time-out credentials, forcing the server to
call iS2 again after using cached credentials for a certain period.
Cache size The cache can also be configured to limit the number of stored credentials.
Configuration variables The following variables configure the credentials cache in the context of the
IONA security framework:
plugins:gsp:authentication_cache_size
The maximum number of credentials stored in the authentication
cache. If this size is exceeded the oldest credential in the cache is
removed.
A value of -1 (the default) means unlimited size. A value of 0 means
disable the cache.
plugins:gsp:authentication_cache_timeout
The time (in seconds) after which a credential is considered stale.
Stale credentials are removed from the cache and the server must
re-authenticate with iS2 on the next call from that user.
A value of -1 (the default) means an infinite time-out. A value of 0
means disable the cache.
80
CHAPTER 4
Managing
Access Control
Lists
The Orbix Security Framework defines access control lists
(ACLs) for mapping roles to resources. The ACLs are specific
to particular technology domains, such as CORBA. They can
be deployed either together with each secure server or centrally
in the Orbix security service.
81
CHAPTER 4 | Managing Access Control Lists
CORBA ACLs
Overview This section discusses the ACL files that control access to IDL operations
and attributes in a CORBA server. The ACL files for CORBA servers provide
role-based access control with granularity down to the level of IDL
operations, and attributes.
82
CORBA ACLs
GSP plug-in The GSP plug-in is a component of the iSF that provides support for
action-role mapping. This plug-in must be loaded in order to use the
action-role mapping ACL file (see Appendix A for details of how to configure
the GSP plug-in).
File restrictions The following restrictions apply to the use of action role mapping files on
z/OS:
• File system—XML ACL files must be stored in the hierarchical file
system (USS).
• XML encoding—the XML must use an ASCII-based encoding. The XML
data itself must be ASCII-based (for example, UTF-8), as well as the
encoding attribute in the XML prolog (if present). This restriction is
imposed by the underlying IBM for XML Toolkit (Xerces C++ parser),
which is unable to handle the inclusion of the DTD file when an
EBCDIC encoding is used.
83
CHAPTER 4 | Managing Access Control Lists
Example IDL For example, consider how to set the operation and attribute permissions for
the IDL interface shown in Example 7.
// IDL
module Simple
{
interface SimpleObject
{
void call_me();
attribute string foo;
};
};
84
CORBA ACLs
Example action-role mapping Example 8 shows how you might configure an action-role mapping file for
the Simple::SimpleObject interface given in the preceding Example 7 on
page 84.
3 <action-role-mapping>
4 <server-name>gsp_basic_test.server</server-name>
5 <interface>
6 <name>IDL:Simple/SimpleObject:1.0</name>
<action-role>
7 <action-name>call_me</action-name>
<role-name>corba-developer</role-name>
<role-name>guest</role-name>
</action-role>
<action-role>
8 <action-name>_get_foo</action-name>
<role-name>corba-developer</role-name>
<role-name>guest</role-name>
</action-role>
</interface>
</action-role-mapping>
</secure-system>
85
CHAPTER 4 | Managing Access Control Lists
♦ false—for any interfaces not listed, access is denied for all roles.
Unauthenticated users are also denied access. This is the default.
3. The <action-role-mapping> tag contains all of the permissions that
apply to a particular server application.
4. The <server-name> tag specifies the ORB name that is used by the
server in question. The value of this tag must match the ORB name
exactly.
5. The <interface> tag contains all of the access permissions for one
particular IDL interface.
6. The <name> tag identifies the IDL interface using the interface’s OMG
repository ID. The repository ID normally consists of the characters
IDL: followed by the fully scoped name of the interface (using /
instead of :: as the scoping character), followed by the characters
:1.0. Hence, the Simple::SimpleObject IDL interface is identified by
the IDL:Simple/SimpleObject:1.0 repository ID.
86
CORBA ACLs
Action-role mapping DTD The syntax of the action-role mapping file is defined by the action-role
mapping DTD. See “Action-Role Mapping DTD” on page 341 for details.
87
CHAPTER 4 | Managing Access Control Lists
Centralized ACL
Overview By default, a secure Orbix application is configured to store its ACL file
locally. Hence, in a large deployment, ACL files might be scattered over
many hosts, which could prove to be a nuisance for administrators.
An alternative approach, as described in this section, is to configure your
secure applications to use a centralized ACL repository. This allows you to
administer all of the ACL data in one place, making it easier to update and
maintain.
88
Centralized ACL
Local ACL scenario Figure 6 shows an outline of the local ACL scenario, where the ACL file is
stored on the same host as the target server. You configure the server to
load the ACL file from the local file system by setting the
plugins:gsp:action_role_mapping_file variable in the target server’s
configuration scope.
89
CHAPTER 4 | Managing Access Control Lists
Scenario description The local ACL scenario shown in Figure 6 can be described as follows:
Stage Description
90
Centralized ACL
Centralized ACL scenario Figure 7 shows an outline of a centralized ACL scenario, where the ACL files
are stored on the same host as the Orbix security service.
91
CHAPTER 4 | Managing Access Control Lists
Scenario description The centralized ACL scenario shown in Figure 7 can be described as
follows:
Stage Description
5 The security service returns the ACL data in the form of an XML
string, which is then cached by the ClientAccessDecision
object.
Modify the Orbix configuration file To configure an application (such as the target server shown in Figure 7 on
page 91) to use a centralized ACL, you must modify its configuration scope
as shown in Example 9. In this example, it is assumed that the application’s
ORB name is my_secure_apps.my_two_tier_target.
92
Centralized ACL
...
my_two_tier_target {
...
plugins:gsp:authorization_realm = "AuthzRealm";
1 # plugins:gsp:action_role_mapping_file = "ActionRoleURL";
2 plugins:gsp:authorization_policy_store_type =
"centralized";
3 plugins:gsp:authorization_policy_enforcement_point =
"local";
};
};
Modify the is2.properties file To configure the Orbix security service to support centralized ACL, you
should edit its is2.properties (normally located in the
OrbixInstallDir/etc/domains/DomainName directory) to add or modify the
following settings:
The ACLFileListFile is the name of a file (specified in the local file format)
which contains a list of the centrally stored ACL files.
93
CHAPTER 4 | Managing Access Control Lists
Create an ACL file list file The ACL file list file is a list of filenames, each line of which has the
following format:
[ACLKey=]ACLFileName
A file name can optionally be preceded by an ACL key and an equals sign,
ACLKey=, if you want to select the file by ACL key (see “Selection by ACL
key” on page 96). The ACL file, ACLFileName, is specified using an
absolute pathname in the local file format.
For example, on Windows you could specify a list of ACL files as follows:
U:/orbix_security/etc/acl_files/server_A.xml
U:/orbix_security/etc/acl_files/server_B.xml
U:/orbix_security/etc/acl_files/server_C.xml
Selecting the ACL file When the Orbix security service responds to a request to provide ACL data,
it chooses an ACL file using one of the following selection criteria:
• Selection by ORB name.
• Selection by override value.
• Selection by ACL key.
Selection by ORB name The default selection criterion is selection by ORB name. The target
application includes its ORB name in the request it sends to the security
service. The security service then selects the data from the ACL file which
includes a <server-name> tag with the specified ORB name.
Note: The security service reads and returns all of the data from the
selected ACL file. Even if the ACL file contains multiple <server-name>
tags labelled by different ORB names, the data from the enclosing
<action-role-mapping> tags with non-matching ORB names are also
returned.
94
Centralized ACL
Selection by override value Alternatively, you can use selection by override value to override the value
of the ORB name sent to the Orbix security service. The override value must
be set in the Orbix configuration using the
plugins:gsp:acl_policy_data_id variable.
For example, suppose you want to select ACL data that has the ORB name,
my_secure_apps.my_two_tier_target.alt_acl. You would specify the
override value using the plugins:gsp:acl_policy_data_id variable as
follows:
The security service would then select the data from the ACL file containing
the following <server-name> tag:
<server-name>my_secure_apps.my_two_tier_target.alt_acl</serve
r-name>
...
</action-role-mapping>
...
</secure-system>
95
CHAPTER 4 | Managing Access Control Lists
Selection by ACL key A more flexible system of selection is selection by ACL key. In this case, the
application specifies an ACL key in its Orbix configuration and the security
service matches this key to an entry in the ACL file list file.
For example, consider an application that defines an ACL key, bank_data, in
its configuration scope. You would specify the key using the
plugins:gsp:acl_policy_data_id variable as follows:
The security service then selects the entry from the ACL file list labelled with
the bank_data key:
U:/orbix_security/etc/acl_files/server_A.xml
U:/orbix_security/etc/acl_files/server_B.xml
bank_data=U:/orbix_security/etc/acl_files/server_C.xml
96
Centralized ACL
Custom ClientAccessDecision in Figure 8 shows an outline of an ACL scenario, where the default
an Orbix application ClientAccessDecision object is replaced by a customized implementation.
97
CHAPTER 4 | Managing Access Control Lists
98
CHAPTER 5
Managing
Certificates
TLS authentication uses X.509 certificates—a common,
secure and reliable method of authenticating your application
objects. This chapter explains how you can create X.509
certificates that identify your Orbix applications.
99
CHAPTER 5 | Managing Certificates
Integrity of the public key Authentication of a secure application depends on the integrity of the public
key value in the application’s certificate. If an impostor replaced the public
key with its own public key, it could impersonate the true application and
gain access to secure data.
To prevent this form of attack, all certificates must be signed by a
certification authority (CA). A CA is a trusted node that confirms the
integrity of the public key value in a certificate.
Digital signatures A CA signs a certificate by adding its digital signature to the certificate. A
digital signature is a message encoded with the CA’s private key. The CA’s
public key is made available to applications by distributing a certificate for
the CA. Applications verify that certificates are validly signed by decoding
the CA’s digital signature with the CA’s public key.
The contents of an X.509 An X.509 certificate contains information about the certificate subject and
certificate the certificate issuer (the CA that issued the certificate). A certificate is
encoded in Abstract Syntax Notation One (ASN.1), a standard syntax for
describing messages that can be sent or received on a network.
The role of a certificate is to associate an identity with a public key value. In
more detail, a certificate includes:
• X.509 version information.
100
What are X.509 Certificates?
Distinguished names A distinguished name (DN) is a general purpose X.500 identifier that is
often used in the context of security.
See “ASN.1 and Distinguished Names” on page 321 for more details about
DNs.
101
CHAPTER 5 | Managing Certificates
Certification Authorities
Choice of CAs A CA must be trusted to keep its private key secure. When setting up an
Orbix system, it is important to choose a suitable CA, make the CA
certificate available to all applications, and then use the CA to sign
certificates for your applications.
There are two types of CA you can use:
• A commercial CA is a company that signs certificates for many
systems.
• A private CA is a trusted node that you set up and use to sign
certificates for your system only.
102
Certification Authorities
Advantages of commercial CAs An advantage of commercial CAs is that they are often trusted by a large
number of people. If your applications are designed to be available to
systems external to your organization, use a commercial CA to sign your
certificates. If your applications are for use within an internal network, a
private CA might be appropriate.
Criteria for choosing a CA Before choosing a CA, you should consider the following criteria:
• What are the certificate-signing policies of the commercial CAs?
• Are your applications designed to be available on an internal network
only?
• What are the potential costs of setting up a private CA?
103
CHAPTER 5 | Managing Certificates
Choosing a host for a private Choosing a host is an important step in setting up a private CA. The level of
certification authority security associated with the CA host determines the level of trust associated
with certificates signed by the CA.
If you are setting up a CA for use in the development and testing of Orbix
applications, use any host that the application developers can access.
However, when you create the CA certificate and private key, do not make
the CA private key available on hosts where security-critical applications
run.
Security precautions If you are setting up a CA to sign certificates for applications that you are
going to deploy, make the CA host as secure as possible. For example, take
the following precautions to secure your CA:
• Do not connect the CA to a network.
• Restrict all access to the CA to a limited set of trusted users.
• Protect the CA from radio-frequency surveillance using an RF-shield.
104
Certificate Chaining
Certificate Chaining
Certificate chain A certificate chain is a sequence of certificates, where each certificate in
the chain is signed by the subsequent certificate.
Self-signed certificate The last certificate in the chain is normally a self-signed certificate—a
certificate that signs itself.
Chain of trust The purpose of certificate chain is to establish a chain of trust from a peer
certificate to a trusted CA certificate. The CA vouches for the identity in the
peer certificate by signing it. If the CA is one that you trust (indicated by the
presence of a copy of the CA certificate in your root certificate directory), this
implies you can trust the signed peer certificate as well.
105
CHAPTER 5 | Managing Certificates
Certificates signed by multiple A CA certificate can be signed by another CA. For example, an application
CAs certificate may be signed by the CA for the finance department of IONA
Technologies, which in turn is signed by a self-signed commercial CA.
Figure 10 shows what this certificate chain looks like.
Trusted CAs An application can accept a signed certificate if the CA certificate for any CA
in the signing chain is available in the certificate file in the local root
certificate directory.
Maximum chain length policy You can limit the length of certificate chains accepted by your applications,
with the maximum chain length policy. You can set a value for the
maximum length of a certificate chain with the
policies:iiop_tls:max_chain_length_policy and
policies:https:max_chain_length_policy configuration variables for
IIOP/TLS and HTTPS respectively.
106
PKCS#12 Files
PKCS#12 Files
Contents of a PKCS#12 file A PKCS#12 file contains the following:
• An X.509 peer certificate (first in a chain).
• All the CA certificates in the certificate chain.
• A private key.
The file is encrypted with a password.
PKCS#12 is an industry-standard format and is used by browsers such as
Netscape and Internet Explorer. They are also used in Orbix. Orbix does not
support .pem format certificate chains, however.
z/OS Platform The trusted CA list policy is not used on the z/OS platform if you configure
your applications to use SAF key rings.
107
CHAPTER 5 | Managing Certificates
HFS key databases It is also possible to use HFS key databases for some of the items discussed
below. Key databases are discussed in the IBM manual, Cryptographic
Services - System Secure Sockets Layer Programming Guide and
Reference. Using a key database is an option in a test environment.
However, key databases are currently limited in the types of PKCS#12
certificates they import, so they are not so easy to use with externally
provided certificates.
108
Managing Certificates on z/OS
The RACDCERT command This section provides some examples of the RACDCERT command usage. A
full description of this command can be found in the IBM manual, z/OS
Security Server (RACF) Command Language Reference. Refer to the
manual for details on setting up the permissions in RACF to use the
RACDCERT commands.
Importing certificates into RACF To import certificates in to RACF from another platform, perform the
following steps:
Organization PS
Record format VB
Record length 1024
Block size 32760
Allocated blocks 2
Allocated extents 1
109
CHAPTER 5 | Managing Certificates
110
Managing Certificates on z/OS
ftp> quit
221 Quit command received. Goodbye.
13:02:34 userid - 15>
After the FTP transfer, you can inspect the datasets using an editor like
ISPF. The CA dataset must be in readable format and looks something like:
-----BEGIN CERTIFICATE-----
MIIBjDCCATagAwIBAgIIv5hpmk5TOF8wDQYJKoZIhvcNAQEEBQAwSzELMAkGA1UE
...
...
oudXbfbjlQZQ+TPKvJHe9w==
-----END CERTIFICATE-----
The bank server certificate is in binary format and is not readable.
The certificates are now ready to be added to an RACF key ring.
111
CHAPTER 5 | Managing Certificates
112
Managing Certificates on z/OS
Ring:
>TESTRING<
Certificate Label Name Cert Owner USAGE DEFAULT
------------------------- ------------ -------- -------
bank_server ID(USERID) PERSONAL NO
113
CHAPTER 5 | Managing Certificates
References These steps are fully described in the following IBM manuals:
• Cryptographic Services - System Secure Sockets Layer Programming
Guide and Reference
• Security Server (RACF) - Command Language Reference
114
Managing Certificates on z/OS
SAF/RACF key ring To use an SAF/RACF key ring, TESTRING, set the saf_keyring configuration
variable as follows:
plugins:systemssl_toolkit:saf_keyring = "TESTRING";
For details of how to create the TESTRING key ring, see “Importing
Certificates from Another Platform into RACF” on page 109.
HFS key database Alternatively, to use a HFS key database, set the hfs_keyring_filename
configuration variable to specify the key database file. For example, you can
specify a /keyring/key.kdb database file, as follows:
plugins:systemssl_toolkit:hfs_keyring_filename =
"/keyring/key.kdb";
For a description of how to set up a HFS key database, please consult the
IBM document System Secure Sockets Layer - Programming Guide and
Reference from the Cryptographic Services bookshelf.
Password for HFS key database A password must also be specified for the HFS key database. There are two
alternatives:
• To specify the password directly in the configuration file, set the
hfs_keyring_file_password configuration variable, as follows:
plugins:systemssl_toolkit:hfs_keyring_file_password =
"password";
• To use a password stash file, passfile.stash, set the
hfs_keyring_file_stashfile configuration variable, as follows:
plugins:systemssl_toolkit:hfs_keyring_file_stashfile =
"passfile.stash";
115
CHAPTER 5 | Managing Certificates
116
Part III
SSL/TLS Administration
In this part This part contains the following chapters:
Choosing an
SSL/TLS Toolkit
This chapter describes the SSL/TLS toolkit replaceability
feature, which enables you to replace the underlying
third-party toolkit that implements the SSL/TLS protocol for
Orbix applications.
119
CHAPTER 6 | Choosing an SSL/TLS Toolkit
Toolkit Replaceability
Overview In Orbix, the underlying SSL/TLS security layer is provided by a third-party
security toolkit. The Orbix security configuration variables and programming
APIs wrap the third-party toolkit in order to integrate it with CORBA
technology.
Orbix provides a toolkit replaceability feature by exploiting IONA’s Adaptive
Runtime Technology (ART) to encapsulate third-party SSL/TLS toolkits in an
ART plug-in. Using this modular approach, you can replace the SSL/TLS
security layer underlying Orbix by specifying a different ART plug-in to load
at runtime.
Toolkits for C++ applications The following SSL/TLS toolkits are currently available for use with Orbix
C++ applications:
• “System SSL Toolkit on z/OS” on page 121.
Custom toolkit plug-in for C++ Orbix also provides an option to develop a custom toolkit plug-in for C++
applications, using the Orbix plug-in development kit (PDK). You can use
this feature to integrate any third-party SSL/TLS toolkit with Orbix.
Please contact Professional Services for more details:
http://www.iona.com/info/services/consulting/welcome.htm
120
System SSL Toolkit on z/OS
Choosing the System SSL toolkit To ensure that Orbix uses the System SSL toolkit for C++ applications, you
for C++ applications must add the settings shown in Example 10 to your Orbix configuration (the
toolkit must be specified explicitly, because Orbix would select the
Baltimore toolkit by default).
Example 10: Configuring Orbix to use the System SSL Toolkit in C++
121
CHAPTER 6 | Choosing an SSL/TLS Toolkit
122
CHAPTER 7
Configuring
SSL/TLS Secure
Associations
You can govern the behavior of client-server connections by
setting configuration variables to choose association options
and to specify cipher suites.
123
CHAPTER 7 | Configuring SSL/TLS Secure Associations
Colocation For colocated invocations, that is where the calling code and called code
share the same address space, Orbix supports the establishment of
colocated secure associations. A special interceptor, TLS_Coloc, is provided
by the security plug-in to optimize the transmission of secure, colocated
invocations.
Configuration overview The security characteristics of an association can be configured through the
following CORBA policy types:
• Client secure invocation policy—enables you to specify the security
requirements on the client side by setting association options. See
“Choosing Client Behavior” on page 130 for details.
• Target secure invocation policy—enables you to specify the security
requirements on the server side by setting association options. See
“Choosing Target Behavior” on page 132 for details.
• Mechanism policy—enables you to specify the security mechanism
used by secure associations. In the case of TLS, you are required to
specify a list of cipher suites for your application. See “Specifying
Cipher Suites” on page 139 for details.
124
Overview of Secure Associations
125
CHAPTER 7 | Configuring SSL/TLS Secure Associations
In this section The following subsections discuss the meaning of the settings and flags:
126
Setting Association Options
OMG-defined policy types The client and target secure invocation policies correspond to the following
policy types, as defined in the OMG security specification:
• Security::SecClientSecureInvocation
• Security::SecTargetSecureInvocation
Configuration example For example, to specify that client authentication is required for IIOP/TLS
connections, you can set the following target secure invocation policy for
your server:
policies:iiop_tls:target_secure_invocation_policy:supports =
["EstablishTrustInClient", "Confidentiality", "Integrity",
"DetectReplay", "DetectMisordering",
"EstablishTrustInTarget"];
127
CHAPTER 7 | Configuring SSL/TLS Secure Associations
Association Options
Available options You can use association options to configure Orbix. They can be set for
clients or servers where appropriate. These are the available options:
• NoProtection
• Integrity
• Confidentiality
• DetectReplay
• DetectMisordering
• EstablishTrustInTarget
• EstablishTrustInClient
NoProtection Use the NoProtection flag to set minimal protection.This means that
insecure bindings are supported, and (if the application supports something
other than NoProtection) the object can accept secure and insecure
invocations. This is the equivalent to SEMI_SECURE servers in OrbixSSL.
Integrity Use the Integrity flag to indicate that the object supports
integrity-protected invocations. Setting this flag implies that your TLS cipher
suites support message digests (such as MD5, SHA1).
Confidentiality Use the Confidentiality flag if your object requires or supports at least
confidentiality-protected invocations. The object can support this feature if
the cipher suites specified by the MechanismPolicy support
confidentiality-protected invocations.
DetectReplay Use the DetectReplay flag to indicate that your object supports or requires
replay detection on invocation messages. This is determined by
characteristics of the supported TLS cipher suites.
DetectMisordering Use the DetectMisordering flag to indicate that your object supports or
requires error detection on fragments of invocation messages. This is
determined by characteristics of the supported TLS cipher suites.
128
Setting Association Options
EstablishTrustInTarget The EstablishTrustInTarget flag is set for client policies only. Use the flag
to indicate that your client supports or requires that the target authenticate
its identity to the client. This is determined by characteristics of the
supported TLS cipher suites. This is normally set for both client supports
and requires unless anonymous cipher suites are supported.
EstablishTrustInClient Use the EstablishTrustInClient flag to indicate that your target object
requires the client to authenticate its privileges to the target. This option
cannot be required as a client policy.
If this option is supported on a client’s policy, it means that the client is
prepared to authenticate its privileges to the target. On a target policy, the
target supports having the client authenticate its privileges to the target.
129
CHAPTER 7 | Configuring SSL/TLS Secure Associations
IIOP/TLS configuration You can set this policy for IIOP/TLS connections through the following
configuration variables:
policies:iiop_tls:client_secure_invocation_policy:requires
Specifies the minimum security features that the client requires to
establish an IIOP/TLS connection.
policies:iiop_tls:client_secure_invocation_policy:supports
Specifies the security features that the client is able to support on
IIOP/TLS connections.
HTTPS configuration You can set this policy for HTTPS connections through the following
configuration variables:
policies:https:client_secure_invocation_policy:requires
Specifies the minimum security features that the client requires to
establish a HTTPS connection.
policies:https:client_secure_invocation_policy:supports
Specifies the security features that the client is able to support on
HTTPS connections.
Association options In both cases, you provide the details of the security levels in the form of
AssociationOption flags—see “Association Options” on page 128 and
Appendix C on page 327.
Default value The default value for the client secure invocation policy is:
130
Setting Association Options
policies:iiop_tls:client_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
};
...
};
131
CHAPTER 7 | Configuring SSL/TLS Secure Associations
IIOP/TLS configuration You can set the target secure invocation policy for IIOP/TLS connections
through the following configuration variables:
policies:iiop_tls:target_secure_invocation_policy:requires
Specifies the minimum security features that your targets require,
before they accept an IIOP/TLS connection.
policies:iiop_tls:target_secure_invocation_policy:supports
Specifies the security features that your targets are able to support on
IIOP/TLS connections.
HTTPS configuration You can set the target secure invocation policy for HTTPS connections
through the following configuration variables:
policies:https:target_secure_invocation_policy:requires
Specifies the minimum security features that your targets require,
before they accept a HTTPS connection.
policies:https:target_secure_invocation_policy:supports
Specifies the security features that your targets are able to support on
HTTPS connections.
Association options In both cases, you can provide the details of the security levels in the form of
AssociationOption flags—see “Association Options” on page 128 and
Appendix C on page 327.
Default value The default value for the target secure invocation policy is:
132
Setting Association Options
policies:iiop_tls:target_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
...
};
...
133
CHAPTER 7 | Configuring SSL/TLS Secure Associations
Use the sample scopes The quickest way to configure a secure SSL/TLS application is by basing the
configuration on one of the sample demos.tls scopes in the
DomainName.cfg configuration file. In demos.tls, there are sample scopes
that match all of the common use cases for SSL/TLS configuration.
For more details, see “Configuration samples” on page 56.
134
Setting Association Options
Types of association option Association options can be categorized into the following different types, as
shown in Table 3.
135
CHAPTER 7 | Configuring SSL/TLS Secure Associations
Association Option Client side—can appear in... Server side—can appear in...
Note: The SSL/TLS client authentication step can also be affected by the
policies:allow_unauthenticated_clients_policy configuration
variable. See “policies” on page 289.
Confidentiality, Integrity, These association options can be considered together, because normally you
DetectReplay, and would require either all or none of these options. Most of the cipher suites
DetectMisordering supported by Orbix support all of these association options, although there
are a couple of integrity-only ciphers that do not support Confidentiality
(see Table 8 on page 145). As a rule of thumb, if you want security you
generally would want all of these association options.
Association Options Client side—can appear in... Server side—can appear in...
136
Setting Association Options
A typical secure application would list all of these association options in all
of the configuration variables shown in Table 5.
NoProtection The NoProtection association option is used for two distinct purposes:
• Disabling security selectively—security is disabled, either in the client
role or in the server role, if NoProtection appears as the sole required
association option and as the sole supported association option in a
secure invocation policy. This mechanism is selective in the sense that
the client role and the server role can be independently configured as
either secure or insecure.
137
CHAPTER 7 | Configuring SSL/TLS Secure Associations
Association Option Client side—can appear in... Server side—can appear in...
References For more information about setting association options, see the following:
• “Securing Communications with SSL/TLS” on page 56.
• The demos.tls scope in a generated Orbix configuration file.
138
Specifying Cipher Suites
139
CHAPTER 7 | Configuring SSL/TLS Secure Associations
Security algorithms Each cipher suite specifies a set of three security algorithms, which are used
at various stages during the lifetime of a secure association:
• Key exchange algorithm—used during the security handshake to
enable authentication and the exchange of a symmetric key for
subsequent communication. Must be a public key algorithm.
• Encryption algorithm—used for the encryption of messages after the
secure association has been established. Must be a symmetric (private
key) encryption algorithm.
• Secure hash algorithm—used for generating digital signatures. This
algorithm is needed to guarantee message integrity.
Key exchange algorithms The following key exchange algorithms are supported by Orbix:
140
Specifying Cipher Suites
Secure hash algorithms The following secure hash algorithms are supported by Orbix:
MD5 Message Digest 5 (MD5) hash algorithm. This algorithm
produces a 128-bit digest.
SHA Secure hash algorithm (SHA). This algorithm produces a
160-bit digest, but is somewhat slower than MD5.
Cipher suite definitions The Orbix cipher suites are defined as follows:
Reference For further details about cipher suites in the context of TLS, see RFC 2246
from the Internet Engineering Task Force (IETF). This document is available
from the IETF Web site: http://www.ietf.org.
141
CHAPTER 7 | Configuring SSL/TLS Secure Associations
The protocol_version You can specify whether SSL or TLS is used with a transport protocol by
configuration variable setting the policies:iiop_tls:mechanism_policy:protocol_version
configuration variable for IIOP/TLS and the
policies:https:mechanism_policy:protocol_version configuration
variable for HTTPS. For example:
Note: This special SSL_V2V3 setting is not required for z/OS 1.5 or higher.
142
Specifying Cipher Suites
The cipher suites configuration You can specify the cipher suites available to a transport protocol by setting
variable the policies:iiop_tls:mechanism_policy:ciphersuites configuration
variable for IIOP/TLS and the
policies:https:mechanism_policy:ciphersuites configuration variable
for HTTPS. For example:
Cipher suite order The order of the entries in the mechanism policy’s cipher suites list is
important.
During a security handshake, the client sends a list of acceptable cipher
suites to the server. The server then chooses the first of these cipher suites
that it finds acceptable. The secure association is, therefore, more likely to
use those cipher suites that are near the beginning of the ciphersuites list.
Valid cipher suites You can specify any of the following cipher suites:
• Null encryption, integrity only ciphers:
RSA_WITH_NULL_MD5,
RSA_WITH_NULL_SHA
• Standard ciphers
RSA_EXPORT_WITH_RC4_40_MD5,
RSA_WITH_RC4_128_MD5,
RSA_WITH_RC4_128_SHA,
RSA_EXPORT_WITH_RC2_CBC_40_MD5
RSA_WITH_DES_CBC_SHA,
RSA_WITH_3DES_EDE_CBC_SHA
Default values If no cipher suites are specified through configuration or application code,
the following apply:
RSA_WITH_RC4_128_SHA,
RSA_WITH_RC4_128_MD5,
RSA_WITH_3DES_EDE_CBC_SHA,
RSA_WITH_DES_CBC_SHA
143
CHAPTER 7 | Configuring SSL/TLS Secure Associations
Required and supported For example, in the context of the IIOP/TLS protocol the list of cipher suites
association options is affected by the following configuration options:
• Required association options—as listed in
policies:iiop_tls:client_secure_invocation_policy:requires on
the client side, or
policies:iiop_tls:target_secure_invocation_policy:requires on
the server side.
• Supported association options—as listed in
policies:iiop_tls:client_secure_invocation_policy:supports on
the client side, or
policies:iiop_tls:target_secure_invocation_policy:supports on
the server side.
144
Specifying Cipher Suites
Cipher suite compatibility table Use Table 8 to determine whether or not a particular cipher suite is
compatible with your association options.
Determining compatibility The following algorithm is applied to the initial list of cipher suites:
1. For the purposes of the algorithm, ignore the EstablishTrustInClient
and EstablishTrustInTarget association options. These options have
no effect on the list of cipher suites.
2. From the initial list, remove any cipher suite whose supported
association options (see Table 8) do not satisfy the configured required
association options.
3. From the remaining list, remove any cipher suite that supports an
option (see Table 8) not included in the configured supported
association options.
145
CHAPTER 7 | Configuring SSL/TLS Secure Associations
No suitable cipher suites available If no suitable cipher suites are available as a result of incorrect
configuration, no communications will be possible and an exception will be
raised. Logging also provides more details on what went wrong.
146
Part IV
CSIv2 Administration
In this part This part contains the following chapters:
Configuring
SSL/TLS
Authentication
This chapter describes how to configure the authentication
requirements for your application.
149
CHAPTER 8 | Configuring SSL/TLS Authentication
Requiring Authentication
Overview This section discusses how to specify whether a target object must
authenticate itself to a client and whether the client must authenticate itself
to the target. For a given client-server link, the authentication requirements
are governed by the following policies:
• Client secure invocation policy.
• Target secure invocation policy.
• Mechanism policy.
These policies are explained in detail in “Configuring SSL/TLS Secure
Associations” on page 123. This section focuses only on those aspects of
the policies that affect authentication.
In this section There are two possible arrangements for a TLS secure association:
150
Requiring Authentication
Security handshake Prior to running the application, the client and server should be set up as
follows:
• A certificate chain is associated with the server—the certificate chain is
provided in the form of a PKCS#12 file. See “Specifying an
Application’s Own Certificate” on page 157.
• One or more lists of trusted certification authorities (CA) are made
available to the client.
During the security handshake, the server sends its certificate chain to the
client—see Figure 13. The client then searches its trusted CA lists to find a
CA certificate that matches one of the CA certificates in the server’s
certificate chain.
151
CHAPTER 8 | Configuring SSL/TLS Authentication
Client configuration For target authentication only, the client policies should be configured as
follows:
• Client secure invocation policy—must be configured both to require
and support the EstablishTrustInTarget association option.
• Mechanism policy—at least one of the specified cipher suites must be
capable of supporting target authentication. All of the cipher suites
currently provided by Orbix E2A support target authentication.
Server configuration For target authentication only, the target policies should be configured as
follows:
• Target secure invocation policy—must be configured to support the
EstablishTrustInTarget association option.
• Mechanism policy—at least one of the specified cipher suites must be
capable of supporting target authentication. All of the cipher suites
currently provided by Orbix E2A support target authentication.
152
Requiring Authentication
Example of target authentication The following sample extract from an Orbix E2A configuration file shows a
only configuration for a CORBA client application, bank_client, and a CORBA
server application, bank_server, in the case of target authentication only.
bank_server {
policies:iiop_tls:target_secure_invocation_policy:requires =
["Confidentiality"];
policies:iiop_tls:target_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
...
};
bank_client {
...
policies:iiop_tls:client_secure_invocation_policy:requires =
["Confidentiality", "EstablishTrustInTarget"];
policies:iiop_tls:client_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
};
153
CHAPTER 8 | Configuring SSL/TLS Authentication
154
Requiring Authentication
Security handshake Prior to running the application, the client and server should be set up as
follows:
• Both client and server have an associated certificate chain (PKCS#12
file)—see “Specifying an Application’s Own Certificate” on page 157.
• Both client and server are configured with lists of trusted certification
authorities (CA).
During the security handshake, the server sends its certificate chain to the
client, and the client sends its certificate chain to the server—see Figure 13.
Client configuration For target and client authentication, the client policies should be configured
as follows:
• Client secure invocation policy—must be configured both to require
and support the EstablishTrustInTarget association option. The
client also must support the EstablishTrustInClient association
option.
• Mechanism policy—at least one of the specified cipher suites must be
capable of supporting target authentication.
Server configuration For target and client authentication, the target policies should be configured
as follows:
• Target secure invocation policy—must be configured to support the
EstablishTrustInTarget association option. The target must also
require and support the EstablishTrustInClient association option.
• Mechanism policy—at least one of the specified cipher suites must be
capable of supporting target and client authentication.
155
CHAPTER 8 | Configuring SSL/TLS Authentication
Example of target and client The following sample extract from an Orbix E2A configuration file shows a
authentication configuration for a client application, secure_client_with_cert, and a
server application, secure_server_enforce_client_auth, in the case of
target and client authentication.
secure_server_enforce_client_auth
{
policies:iiop_tls:target_secure_invocation_policy:requires =
["EstablishTrustInClient", "Confidentiality"];
policies:iiop_tls:target_secure_invocation_policy:supports =
["EstablishTrustInClient", "Confidentiality", "Integrity",
"DetectReplay", "DetectMisordering",
"EstablishTrustInTarget"];
...
};
secure_client_with_cert
{
policies:iiop_tls:client_secure_invocation_policy:requires =
["Confidentiality", "EstablishTrustInTarget"];
policies:iiop_tls:client_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInClient",
"EstablishTrustInTarget"];
...
};
156
Specifying an Application’s Own Certificate
PKCS#12 files In practice, the TLS protocol needs more than just an X.509 certificate to
support application authentication. Orbix therefore stores X.509 certificates
in a PKCS#12 file, which contains the following elements:
• The application certificate, in X.509 format.
• One or more certificate authority (CA) certificates, which vouch for the
authenticity of the application certificate (see also “Certification
Authorities” on page 102).
• The application certificate’s private key (encrypted).
In addition to the encryption of the private key within the certificate, the
whole PKCS#12 certificate is also stored in encrypted form.
Note: The same pass phrase is used both for the encryption of the private
key within the PKCS#12 file and for the encryption of the PKCS#12 file
overall. This condition (same pass phrase) is not officially part of the
PKCS#12 standard, but it is enforced by most Web browsers and by
Orbix.
157
CHAPTER 8 | Configuring SSL/TLS Authentication
SSL/TLS principal sponsor The SSL/TLS principal sponsor is a piece of code embedded in the security
plug-in that obtains SSL/TLS authentication information for an application.
It is configured by setting variables in the Orbix configuration.
Single or multiple certificates The SSL/TLS principal sponsor is limited to specifying a single certificate for
each ORB scope. This is sufficient for most applications.
Specifying multiple certificates for a single ORB can only be achieved by
programming (see “Authentication” on page 225). If an application is
programmed to own multiple certificates, that application ought to be
accompanied by documentation that explains how to specify the certificates.
158
Specifying an Application’s Own Certificate
Credentials sharing Normally, when you specify an own credential using the SSL/TLS principal
sponsor, the credential is available only to the ORB that created it. By
setting the plugins:security:share_credentials_across_orbs variable to
true, however, the own credentials created by one ORB are automatically
made available to any other ORBs that are configured to share credentials.
Specifying the HFS database or Before setting the principal sponsor configuration variables on z/OS, you
RACF key ring must also indicate the name of a HFS key database or an RACF key ring to
use. See “Specifying the Source of Certificates for an z/OS Application” on
page 115.
Principal sponsor configuration To use a principal sponsor, set the principal_sponsor configuration
variables, as follows:
1. Set the variable principal_sponsor:use_principal_sponsor to true.
2. Provide values for the principal_sponsor:auth_method_id and
principal_sponsor:auth_method_data variables.
Example configuration For example, to use a certificate labelled bank_server, (as used in
“Importing Certificates from Another Platform into RACF” on page 109) set
the principal_sponsor configuration variables as follows:
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_id = "security_label";
principal_sponsor:auth_method_data = ["label=bank_server"];
The principal_sponsor:auth_method_id configuration variable indicates
the source that Orbix should use to get the certificate. In this case the
security_label value indicates a label in a key ring.
159
CHAPTER 8 | Configuring SSL/TLS Authentication
In this section This section discusses the following advanced configuration options:
160
Advanced Configuration Options
Example For example, a chain length of 2 mandates that the certificate of the
immediate signer of the peer application certificate presented must appear
in the list of trusted CA certificates.
Configuration variable You can specify the maximum length of certificate chains used in
MaxChainLengthPolicy with the
policies:iiop_tls:max_chain_length_policy and
policies:https:max_chain_length_policy configuration variables. For
example:
policies:iiop_tls:max_chain_length_policy = "4";
Default value The default value is 2 (that is, the application certificate and its signer,
where the signer must appear in the list of trusted CA’s.
161
CHAPTER 8 | Configuring SSL/TLS Authentication
Constraint language These are the special characters and their meanings in the constraint list:
162
Advanced Configuration Options
Distinguished names For more information on distinguished names, see “ASN.1 and
Distinguished Names” on page 321.
163
CHAPTER 8 | Configuring SSL/TLS Authentication
164
CHAPTER 9
Introduction to
CSIv2
CSIv2 is the OMG’s Common Secure Interoperability protocol
v2.0, which can provide the basis for application-level security
in CORBA applications. The Orbix Security Framework uses
CSIv2 to transmit usernames and passwords, and asserted
identities between applications.
165
CHAPTER 9 | Introduction to CSIv2
CSIv2 Features
Overview This section gives a quick overview of the basic features provided by CSIv2
application-level security. Fundamentally, CSIv2 is a general, interoperable
mechanism for propagating security data between applications. Because
CSIv2 is designed to complement SSL/TLS security, CSIv2 focuses on
providing security features not covered by SSL/TLS.
Transmitting CSIv2-related The CSIv2 specification defines a new GIOP service context type, the
security data security attribute service context, which is used to transmit CSIv2-related
security data. There are two important specializations of GIOP:
• IIOP—the Internet inter-ORB protocol, which specialises GIOP to the
TCP/IP transport, is used to send CSIv2 data between CORBA
applications.
• RMI/IIOP—RMI over IIOP, which is an IIOP-compatible version of
Java’s Remote Method Invocation (RMI) technology, is used to send
CSIv2 data between EJB applications and also for CORBA-to-EJB
interoperability.
CSIv2 authentication over The CSIv2 authentication over transport mechanism provides a simple client
transport mechanism authentication mechanism, based on a username and a password. This
mechanism propagates a username, password, and domain name to the
server. The server then authenticates the username and password before
allowing the invocation to proceed.
166
CSIv2 Features
CSIv2 identity assertion The CSIv2 identity assertion mechanism provides a way of asserting the
mechanism identity of a caller without performing authentication. This mechanism is
usually used to propagate a caller identity that has already been
authenticated at an earlier point in the system.
Applicability of CSIv2 CSIv2 is applicable to both CORBA technology. CSIv2 can be used by the
following kinds of application:
• CORBA C++ applications.
• CORBA Java applications.
167
CHAPTER 9 | Introduction to CSIv2
168
Basic CSIv2 Scenarios
Stage Description
More details For more details about authentication over transport, see “Configuring CSIv2
Authentication over Transport” on page 173.
169
CHAPTER 9 | Introduction to CSIv2
Scenario description The second stage of the scenario shown in Figure 17 (intermediate server
invokes an operation on the target server) can be described as follows:
Stage Description
170
Basic CSIv2 Scenarios
Stage Description
More details For more details about identity assertion, see “Configuring CSIv2 Identity
Assertion” on page 193.
171
CHAPTER 9 | Introduction to CSIv2
172
CHAPTER 10
Configuring CSIv2
Authentication
over Transport
This chapter explains the concepts underlying the CSIv2
authentication over transport mechanism and provides details
of how to configure a client and a server to use this mechanism.
173
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
Authentication over transport The CSIv2 authentication over transport mechanism is a simple client
authentication mechanism based on a username and a password. In a
system with a large number of clients, it is significantly easier to administer
CSIv2 client authentication than it is to administer SSL/TLS client
authentication.
CSIv2 authentication is said to be over transport, because the
authentication step is performed at the General Inter-ORB Protocol (GIOP)
layer. Specifically, authentication data is inserted into the service context of
a GIOP request message. CSIv2 authentication, therefore, occurs after a
connection has been established (in contrast to SSL/TLS authentication).
Dependency on SSL/TLS Note, that CSIv2 authentication over transport cannot provide adequate
security on its own. The authentication over transport mechanism relies on
the transport layer security, that is SSL/TLS, to provide the following
additional security features:
• Server authentication.
• Privacy of communication.
• Message integrity.
174
CSIv2 Authentication Scenario
CSIv2 scenario Figure 18 shows a typical scenario for CSIv2 authentication over transport:
How CSIv2 authentication over As shown in Figure 18 on page 175, the authentication over transport
transport proceeds mechanism proceeds as follows:
Stage Description
175
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
Stage Description
3 Before permitting the request to reach the target object, the CSI
server interceptor calls an application-supplied object (the
authentication service) to check the username/password
combination.
SSL/TLS connection The client and server should both be configured to use a secure SSL/TLS
connection. In this scenario, the SSL/TLS connection is configured for target
authentication only.
See “SSL/TLS Prerequisites” on page 178 for details of the SSL/TLS
configuration for this scenario.
Client authentication token A client authentication token contains the data that a client uses to
authenticate itself to a server through the CSIv2 authentication over
transport mechanism, as follows:
• Username—a UTF-8 character string, which is guaranteed not to
undergo conversion when it is sent over the wire.
• Password—a UTF-8 character string, which is guaranteed not to
undergo conversion when it is sent over the wire.
• Domain—a string that identifies the CSIv2 authentication domain
within which the user is authenticated.
Note: The client’s domain should match the target domain, which is
specified by the
policies:csi:auth_over_transport:server_domain_name
configuration variable on the server side.
176
CSIv2 Authentication Scenario
Authentication service The authentication service is an external service that checks the username
and password received from the client. If the authentication succeeds, the
request is allowed to proceed and an invocation is made on the target
object; if the authentication fails, the request is automatically blocked and a
CORBA::NO_PERMISSION system exception is returned to the client.
See “Providing an Authentication Service” on page 183.
177
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
SSL/TLS Prerequisites
Overview The SSL/TLS protocol is an essential complement to CSIv2 security. The
CSIv2 authentication over transport mechanism relies on SSL/TLS to provide
the following additional security features:
• Server authentication.
• Privacy of communication.
• Message integrity.
SSL/TLS target authentication For the scenario depicted in Figure 18 on page 175, the SSL/TLS
only connection is configured for target authentication only. The SSL/TLS
configuration can be summarized as follows:
• Client-side SSL/TLS configuration—the client requires confidentiality,
message integrity, and the EstablishTrustInTarget SSL/TLS
association option. No X.509 certificate is provided on the client side,
because the client is not authenticated at the transport layer.
• Server-side SSL/TLS configuration—the server requires confidentiality
and message integrity, but the EstablishTrustInClient SSL/TLS
association option is not required. An X.509 certificate is provided on
the server side to enable the client to authenticate the server.
Configuration samples The SSL/TLS configuration of this CSIv2 scenario is based on the following
TLS demonstration configurations in your Orbix configuration
(DomainName.cfg file or CFR service):
• demos.tls.secure_client_with_no_cert
• demos.tls.secure_server_no_client_auth
178
SSL/TLS Prerequisites
SSL/TLS principal sponsor In this scenario, the SSL/TLS principal sponsor needs to be enabled only on
configuration the server side, because it is only the server that has an associated X.509
certificate.
References See “Sample Configuration” on page 188 for a detailed example of the client
and server SSL/TLS configuration.
See “SSL/TLS Administration” on page 117 for complete details of
configuring and administering SSL/TLS.
179
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
Loading the CSI plug-in To enable CSIv2 for a C++ or Java application, you must include the csi
plug-in in the orb_plugins list in your Orbix configuration. The
binding:client_binding_list and binding:server_binding_list must
also be initialized with the proper list of interceptor combinations.
Sample settings for these configuration variables can be found in the
demos.tls.csiv2 configuration scope of your Orbix configuration. For
example, you can load the csi plug-in with the following configuration:
binding:client_binding_list = ["GIOP+EGMIOP",
"OTS+POA_Coloc", "POA_Coloc", "OTS+TLS_Coloc+POA_Coloc",
"TLS_Coloc+POA_Coloc", "GIOP+SHMIOP", "CSI+OTS+GIOP+IIOP",
"CSI+GIOP+IIOP", "CSI+OTS+GIOP+IIOP_TLS",
"CSI+GIOP+IIOP_TLS"];
binding:server_binding_list = ["CSI"];
...
};
Client configuration A client can be configured to support CSIv2 authentication over transport, as
follows:
180
Requiring CSIv2 Authentication
Client CSIv2 association options The EstablishTrustInClient option is a CSIv2 association option.
Including this option in the
policies:csi:auth_over_transport:client_supports list indicates that
the client supports the CSIv2 authentication over transport mechanism.
Server configuration A server can be configured to support CSIv2 authentication over transport,
as follows:
Server CSIv2 association options Including the EstablishTrustInClient CSIv2 association option in the
policies:csi:auth_over_transport:target_supports list indicates that
the server supports the CSIv2 authentication over transport mechanism.
Including the EstablishTrustInClient CSIv2 association option in the
policies:csi:auth_over_transport:target_requires list indicates that
the server requires clients to authenticate themselves using the CSIv2
authentication over transport mechanism. If the client fails to authenticate
itself to the server when the server requires it, the server throws a
CORBA::NO_PERMISSION system exception back to the client.
Server domain name The server domain name is the name of a valid CSIv2 authentication
domain. A CSIv2 authentication domain is an administrative unit within
which a username/password combination is authenticated.
A CSIv2 client will check that the domain name in its CSIv2 credentials is
the same as the domain name set on the server side by the
policies:csi:auth_over_transport:server_domain_name configuration
variable. If the domain in the client credentials is an empty string, however,
the domain always matches (the empty string is treated as a wildcard).
181
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
Authentication service The authentication_service variable specifies a Java class that provides
an implementation of the authentication service. This enables you to provide
a custom implementation of the CSIv2 authentication service in Java.
When using CSIv2 in the context of the Orbix Security Framework, however,
this configuration variable should be omitted. In the Orbix Security
Framework, the GSP plug-in specifies the CSIv2 authentication service
programmatically.
See “Providing an Authentication Service” on page 183 for more details.
182
Providing an Authentication Service
By configuration (Java only) In Java, the authentication service is provided by a customizable class
which can be loaded by setting the
policies:csi:auth_over_transport:authentication_service
configuration variable to the fully-scoped name of the Java class.
By programming a policy (Java In Java, you can specify a CSIv2 authentication service object
only) programmatically by setting the IT_CSI::CSI_SERVER_AS_POLICY policy with
an IT_CSI::AuthenticationService struct as its policy value.
See the CORBA Programmer’s Reference, Java for more details.
By registering an initial reference You can specify a CSIv2 authentication service object (in C++ and Java) by
registering an instance as the IT_CSIAuthenticationObject initial
reference. This approach is mainly intended for use by Orbix plug-ins.
Orbix Security Framework In the context of the Orbix Security Framework, the GSP plug-in provides a
proprietary implementation of the CSIv2 authentication service that
delegates authentication to the Orbix security service.
183
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
CSIv2 principal sponsor The CSIv2 principal sponsor is a piece of code embedded in the CSI plug-in
that obtains authentication information for an application. It is configured by
setting variables in the Orbix configuration. The great advantage of the
CSIv2 principal sponsor is that it enables you to provide authentication data
for security unaware applications, just by modifying the configuration.
The following configuration file extract shows you how to enable the CSIv2
principal sponsor for GSSUP-style authentication (assuming the application
is already configured to load the CSI plug-in):
Credentials sharing Normally, when you specify an own credential using the CSI principal
sponsor, the credential is available only to the ORB that created it. By
setting the plugins:security:share_credentials_across_orbs variable to
true, however, the own credentials created by one ORB are automatically
made available to any other ORBs that are configured to share credentials.
184
Providing a Username and Password
Logging in The GSSUP username and password can be provided in one of the following
ways:
• From a dialog prompt.
• Directly in configuration.
• By programming.
From a dialog prompt If the login data are not specified in configuration, the CSIv2 principal
sponsor will prompt the user for the username, password, and domain as
the application starts up. The dialog prompt is displayed if the client
supports the EstablishTrustInClient CSIv2 association option and one or
more of the principal_sponsor:csi:auth_method_data fields are missing
(username, password, or domain).
C++ Applications
When a C++ application starts up, the user is prompted for the username
and password at the command line as follows:
Please enter username :
Enter password :
Java Applications
The following dialog window pops up to prompt the user for the username,
password, and domain name:
Figure 19: Java Dialog Window for GSSUP Username and Password
185
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
Note: The password is not checked until the client communicates with a
server secured by CSIv2. Hence, the dialog is unable to provide immediate
confirmation of a user’s password and a mis-typed password will not be
detected until the client begins communicating with the server.
Directly in configuration The username, password, and domain can be specified directly in the
principal_sponsor:csi:auth_method_data configuration variable. For
example, the CSIv2 principal sponsor can be configured as follows:
186
Providing a Username and Password
187
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
Sample Configuration
Overview This section provides complete sample configurations, on both the client
side and the server side, for the scenario described in “CSIv2 Authentication
Scenario” on page 174.
188
Sample Configuration
Configuration sample The following sample shows the configuration of a client application that
uses CSIv2 authentication over transport to authenticate a user, Paul (using
the csiv2.client.paul ORB name):
client
{
policies:iiop_tls:client_secure_invocation_policy:supports
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
policies:iiop_tls:client_secure_invocation_policy:requires
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering"];
189
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
paul
{
policies:csi:auth_over_transport:client_supports =
["EstablishTrustInClient"];
policies:csi:auth_over_transport:target_requires =
["EstablishTrustInClient"];
principal_sponsor:csi:use_principal_sponsor = "true";
principal_sponsor:csi:auth_method_id = "GSSUPMech";
principal_sponsor:csi:auth_method_data =
["username=Paul", "password=password", domain="DEFAULT"];
};
};
};
190
Sample Configuration
Configuration sample The following sample shows the configuration of a server application that
supports CSIv2 authentication over transport (using the csiv2.server ORB
name):
server
{
policies:iiop_tls:target_secure_invocation_policy:supports
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget",
"EstablishTrustInClient"];
policies:iiop_tls:target_secure_invocation_policy:requires
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering"];
191
CHAPTER 10 | Configuring CSIv2 Authentication over Transport
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_id = "pkcs12_file";
principal_sponsor:auth_method_data =
["filename=C:\ASPInstallDir\asp\6.0\etc\tls\x509\certs\demos\b
ank_server.p12", "password=bankserverpass"];
policies:csi:auth_over_transport:target_supports =
["EstablishTrustInClient"];
policies:csi:auth_over_transport:authentication_service =
"csiv2.AuthenticationServiceObject";
policies:csi:auth_over_transport:server_domain_name =
"DEFAULT";
};
};
192
CHAPTER 11
Configuring CSIv2
Identity Assertion
This chapter explains the concepts underlying the CSIv2
identity assertion (or delegation) mechanism and provides
details of how to configure your applications to use this
mechanism.
193
CHAPTER 11 | Configuring CSIv2 Identity Assertion
Identity assertion The CSIv2 identity assertion mechanism provides the basis for a
general-purpose delegation or impersonation mechanism. Identity assertion
is used in the context of a system where a client invokes an operation on an
intermediate server which then invokes an operation on a target server (see
Figure 20). When making a call on the target, the client identity (which is
authenticated by the intermediate server) can be forwarded by the
intermediate to the target. This enables the intermediate to impersonate the
client.
Dependency on SSL/TLS The CSIv2 identity assertion mechanism relies on SSL/TLS to provide the
the following security features at the transport layer (between the
intermediate server and the target server):
• Authentication of the target server to the intermediate server.
• Authentication of the intermediate server to the target server.
• Privacy of communication.
• Message integrity.
194
CSIv2 Identity Assertion Scenario
CSIv2 scenario Figure 20 shows a typical scenario for CSIv2 identity assertion:
How CSIv2 identity assertion As shown in Figure 20 on page 195, the identity assertion mechanism
proceeds proceeds as follows:
Stage Description
195
CHAPTER 11 | Configuring CSIv2 Identity Assertion
Stage Description
6 The request, together with the identity token, is sent over the
SSL/TLS connection. The SSL/TLS connection provides privacy
message integrity, and mutual authentication between the
intermediate and the target.
SSL/TLS connection The intermediate server and target server should both be configured to use a
secure SSL/TLS connection. In this scenario, the intermediate-to-target
SSL/TLS connection is configured for mutual authentication.
See “SSL/TLS Prerequisites” on page 198 for details of the SSL/TLS
configuration for this scenario.
196
CSIv2 Identity Assertion Scenario
Identity token An identity token can contain one of the following types of identity token:
• ITTAbsent—if no identity token is included in the GIOP message sent
by the intermediate server (for example, if CSIv2 identity assertion is
disabled in the intermediate server).
• ITTAnonymous—if the intermediate server is acting on behalf of an
anonymous, unauthenticated client.
• ITTPrincipalName—if the intermediate server is acting on behalf of an
authenticated client. In this case, the client identity contains the
following data:
♦ GSSUP username—automatically extracted from the GSSUP
client authentication token received from the client.
♦ Subject DN—if the intermediate server authenticates the client
using an X.509 certificate, but not using a username and
password, the intermediate would forward on an identity token
containing the subject DN from the client certificate.
197
CHAPTER 11 | Configuring CSIv2 Identity Assertion
SSL/TLS Prerequisites
Overview The CSIv2 identity assertion mechanism relies on SSL/TLS to provide the
the following security features at the transport layer (between the
intermediate server and the target server):
• Authentication of the target server to the intermediate server.
• Authentication of the intermediate server to the target server.
• Privacy of communication.
• Message integrity.
SSL/TLS mutual authentication For the scenario depicted in Figure 20 on page 195, the SSL/TLS
connection between the intermediate and the target server is configured for
mutual authentication. The SSL/TLS configuration can be summarized as
follows:
• Intermediate server SSL/TLS configuration—the intermediate server
requires confidentiality, message integrity, and the
EstablishTrustInTarget SSL/TLS association option. An X.509
certificate is provided, which enables the intermediate server to be
authenticated both by the client and by the target server.
• Target server SSL/TLS configuration—the server requires
confidentiality, message integrity, and the EstablishTrustInClient
SSL/TLS association option. An X.509 certificate is provided, which
enables the target server to be authenticated by the intermediate
server.
See “Sample Intermediate Server Configuration” on page 205 for a detailed
example of the SSL/TLS configuration in this scenario.
See “SSL/TLS Administration” on page 117 for complete details of
configuring and administering SSL/TLS.
198
SSL/TLS Prerequisites
Setting certificate constraints In the scenario depicted in Figure 20 on page 195, the target server grants
a special type of privilege (backward trust) to the intermediate server—that
is, the target accepts identities asserted by the intermediate without getting
the chance to authenticate these identities itself. It is, therefore,
recommended to set the certificate constraints policy on the target server to
restrict the range of applications that can connect to it.
The certificate constraints policy prevents connections being established to
the target server, unless the ASN.1 Distinguished Name from the subject
line of the incoming X.509 certificate conforms to a certain pattern.
See “Applying Constraints to Certificates” on page 162 for further details.
Principal sponsor configuration In this scenario, the SSL/TLS principal sponsor needs to be enabled in the
intermediate server and in the target server.
See “Specifying an Application’s Own Certificate” on page 157 and for
further details.
199
CHAPTER 11 | Configuring CSIv2 Identity Assertion
Loading the CSI plug-in To enable CSIv2, you must include the csi plug-in in the orb_plugins list in
your Orbix configuration. The binding:client_binding_list and
binding:server_binding_list must also be initialized with the proper list
of interceptor combinations.
Sample settings for these configuration variables can be found in the
demos.tls.csiv2 configuration scope of your Orbix configuration. For
example, you can load the csi plug-in with the following configuration:
binding:client_binding_list = ["GIOP+EGMIOP",
"OTS+POA_Coloc", "POA_Coloc", "OTS+TLS_Coloc+POA_Coloc",
"TLS_Coloc+POA_Coloc", "GIOP+SHMIOP", "CSI+OTS+GIOP+IIOP",
"CSI+GIOP+IIOP", "CSI+OTS+GIOP+IIOP_TLS",
"CSI+GIOP+IIOP_TLS"];
binding:server_binding_list = ["CSI"];
...
};
Intermediate server configuration The intermediate server can be configured to support CSIv2 identity
assertion, as follows:
200
Enabling CSIv2 Identity Assertion
Intermediate server CSIv2 Including the IdentityAssertion CSIv2 association option in the
association options policies:csi:attribute_service:client_supports list indicates that the
application supports CSIv2 identity assertion when acting as a client.
Target server configuration The target server can be configured to support CSIv2 identity assertion, as
follows:
Target server CSIv2 association Including the IdentityAssertion CSIv2 association option in the
options policies:csi:attribute_service:target_supports list indicates that the
application supports CSIv2 identity assertion when acting as a server.
201
CHAPTER 11 | Configuring CSIv2 Identity Assertion
Sample Configuration
Overview This section provides complete sample configurations, covering the client,
the intermediate server, and the target server, for the scenario described in
“CSIv2 Identity Assertion Scenario” on page 194.
202
Sample Configuration
Configuration sample The following sample shows the configuration of a client application that
uses CSIv2 authentication over transport to authenticate a user, Paul (using
the csiv2.client.paul ORB name):
client
{
policies:iiop_tls:client_secure_invocation_policy:supports
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
policies:iiop_tls:client_secure_invocation_policy:requires
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering"];
203
CHAPTER 11 | Configuring CSIv2 Identity Assertion
paul
{
policies:csi:auth_over_transport:client_supports =
["EstablishTrustInClient"];
principal_sponsor:csi:use_principal_sponsor = "true";
principal_sponsor:csi:auth_method_id = "GSSUPMech";
principal_sponsor:csi:auth_method_data =
["username=Paul", "password=password", "domain=DEFAULT"];
};
};
};
204
Sample Configuration
Configuration sample The following sample shows the configuration of an intermediate server
application that supports CSIv2 authentication over transport (when acting
as a server) and identity assertion (when acting as a client). In this example,
the server executable should use the csiv2.intermed_server ORB name:
205
CHAPTER 11 | Configuring CSIv2 Identity Assertion
intermed_server
{
policies:iiop_tls:target_secure_invocation_policy:supports
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget",
"EstablishTrustInClient"];
policies:iiop_tls:target_secure_invocation_policy:requires
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering"];
policies:iiop_tls:client_secure_invocation_policy:supports
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget",
"EstablishTrustInClient"];
policies:iiop_tls:client_secure_invocation_policy:requires
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering"];
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_id = "pkcs12_file";
principal_sponsor:auth_method_data =
["filename=C:\ASPInstallDir\art\6.0\etc\tls\x509\certs\demos\b
ank_server.p12", "password=bankserverpass"];
policies:csi:attribute_service:client_supports =
["IdentityAssertion"];
policies:csi:auth_over_transport:target_supports =
["EstablishTrustInClient"];
policies:csi:auth_over_transport:target_requires =
["EstablishTrustInClient"];
policies:csi:auth_over_transport:authentication_service =
"csiv2.AuthenticationServiceObject";
policies:csi:auth_over_transport:server_domain_name =
"DEFAULT";
};
};
206
Sample Configuration
Configuration sample The following sample shows the configuration of a target server application
that supports identity assertion (using the csiv2.target_server ORB
name).
target_server
{
policies:iiop_tls:target_secure_invocation_policy:supports
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget",
"EstablishTrustInClient"];
207
CHAPTER 11 | Configuring CSIv2 Identity Assertion
policies:iiop_tls:target_secure_invocation_policy:requires
= ["Integrity", "Confidentiality", "DetectReplay",
"DetectMisordering", "EstablishTrustInClient"];
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_id = "pkcs12_file";
principal_sponsor:auth_method_data =
["filename=C:\ASPInstallDir\art\6.0\etc\tls\x509\certs\demos\b
ank_server.p12", "password=bankserverpass"];
policies:csi:attribute_service:target_supports =
["IdentityAssertion"];
};
};
208
Part V
CORBA Security
Programming
In this part This part contains the following chapters:
Programming
Policies
You can customize the behavior of secure CORBA applications
by setting policies programmatically.
211
CHAPTER 12 | Programming Policies
Setting Policies
Overview This section provides a brief overview of how to set CORBA policies by
programming. An example, in C++ and Java, is provided that shows how
to set a CORBA policy at the ORB level.
How to program CORBA policies is described in more detail in the CORBA
Programmer’s Guide.
Client-side policy levels You can set client-side policies at any of the following levels:
• ORB
• Thread
• Object (for client-side proxies).
Server-side policy levels You can set server-side policies at any of the following levels:
• ORB
• POA
Policy management As described in the CORBA Programmer’s Guide, you can set a policy at
each level using the appropriate policy management object as listed in
Table 9.
ORB CORBA::PolicyManager
Thread CORBA::PolicyCurrent
POA PortableServer::POA::create_POA()
212
Setting Policies
C++ Example The following C++ example shows how to set an SSL/TLS certificate
constraints policy at the ORB level:
//C++
...
CORBA::Any any;
CORBA::PolicyList orb_policies;
orb_policies.length(1);
1 CORBA::Object_var object =
global_orb->resolve_initial_references("ORBPolicyManager");
CORBA::PolicyManager_var policy_mgr =
CORBA::PolicyManager::_narrow(object);
2 IT_TLS_API::CertConstraints cert_constraints;
cert_constraints.length(1);
3 cert_constraints[0] = CORBA::string_dup(
"C=US,ST=Massachusetts,O=ABigBank*,OU=Administration"
);
Setting a Policy at ORB Level The programming steps in the preceding examples, “C++ Example” on
page 213, can be explained as follows:
1. Retrieve the ORB policy manager.
2. Create an instance of the policy that you are to adjust, based on the
Orbix IDL (see the CORBA Programmer’s Reference).
3. Set your new values on this policy.
4. Create an ORB policy object using the CORBA::ORB:create_policy()
operation and provide your new policy as a parameter.
5. Add the policy to a PolicyList object.
213
CHAPTER 12 | Programming Policies
214
Programmable SSL/TLS Policies
215
CHAPTER 12 | Programming Policies
Augmenting minimum levels of You can use the CORBA policy IDL and the TLS policy IDL to refine the
security security features that your objects require. Follow these steps:
1. Consider what are the minimum security levels set for objects in your
system.
2. Add to these minimum levels, by adding the available programmable
policies to your application code.
What are the minimum security You can set the minimum levels of security that objects require with secure
levels for objects? invocation policies. There are two types of secure invocation policy:
• Security::SecClientSecureInvocation
• Security::SecTargetSecureInvocation
You can apply values for these in the Orbix configuration file, as discussed in
“Setting Association Options” on page 126, or by programming policies.
It is important to remember that by programming policies you can only add
more security to the minimum required in the configuration; you cannot
reduce the minimum required security by programming.
216
Programmable SSL/TLS Policies
Required and supported security Any object, can have the following dispositions to a security feature:
features • If the object requires a certain type of security, that requirement must
be complied with before a call to the object succeeds.
• If the object supports a certain type of security, that security feature
can be used, but does not have to be used.
217
CHAPTER 12 | Programming Policies
The QOPPolicy
IDL definition The SecurityLevel2::QOPPolicy policy provides a way to override the
client and target secure invocation policies. You can apply four levels of
protection defined by the enumerated type, Security::QOP, defined as
follows:
//IDL
module Security {
...
enum QOP {
SecQOPNoProtection,
SecQOPIntegrity,
SecQOPConfidentiality,
SecQOPIntegrityAndConfidentiality
};
};
Restricting cipher suites The values allowed for QOP policies are not specific enough to identify
particular cipher suites (the mechanism policy can be used for this).
However the QOPPolicy value can render certain cipher suites
inapplicable—see “Constraints Imposed on Cipher Suites” on page 144.
If you set a QOP policy to override an existing QOP policy, the applicable list
of cipher suites can be extended as a result.
Over-riding how an object is When you set a QOP policy override for an object, this results in a new
contacted object reference that contains the applicable policies. This means that the
QOP policy can conveniently be used to create an insecure object reference
(where allowed by the administration policies) that you can use for
operations where you wish insecure invocations to take place. The original
object reference that contains a higher quality of protection can be used for
the more sensitive operations.
218
Programmable SSL/TLS Policies
The EstablishTrustPolicy
Purpose You can use the SecurityLevel2::EstablishTrustPolicy to control
whether server or client authentication is to be enforced.
Both a client and target object can support this policy, meaning that, for a
client, the client is prepared to authenticate its privileges to the target, and
the target supports this.
However, you can also set this policy as required for a target policy. This
means that a client must authenticate its privileges to the target, before the
target will accept the connection.
//IDL
module Security {
...
struct EstablishTrust {
boolean trust_in_client;
boolean trust_in_target;
};
...
};
Note: Normally, all SSL/TLS cipher suites need to authenticate the target.
219
CHAPTER 12 | Programming Policies
The InvocationCredentialsPolicy
Purpose The SecurityLevel2::InvocationCredentialsPolicy policy forces a POA
to use specific credentials or to use specific credentials on a particular
object. When this object is returned by the get_policy() operation, it
contains the active credentials that will be used for invocations using this
target object reference.
Setting the policy at object level An InvocationCredentialsPolicy object can be passed to the
set_policy_overrides() operation to specify one or more Credentials
objects to be used when calling this target object, using the object reference
returned by set_policy_overrides().
220
Programmable SSL/TLS Policies
No downgrading of security When you specify the client secure invocation policy and the target secure
invocation policy, you are providing your application with its minimum
security requirements. These minimum requirements must be met by any
other specified policies and cannot be weakened. This means that the
following policies cannot be specified, if their values would conflict with the
corresponding SecureInvocationPolicy value:
• QOPPolicy
• MechanismPolicy
• EstablishTrustPolicy
Compatibility with the mechanism You cannot specify values for the QOPPolicy, SecureInvocationPolicy
policy value (client and target), or EstablishTrustPolicy, if the underlying mechanism
policy does not support it. For example, you cannot specify that
Confidentiality is required, if only NULL cipher suites are enabled in the
MechanismPolicy.
221
CHAPTER 12 | Programming Policies
Client-side CSIv2 authentication You can set the client-side CSIv2 authentication policy to enable an
policy application to send GSSUP username/password credentials over the wire in
a GIOP service context. The programmable client-side CSIv2 authentication
policy provides functionality equivalent to setting the following configuration
variable:
policies:csi:auth_over_transport:client_supports
To create a client-side CSIv2 authentication policy, use the following IDL
data types from the IT_CSI module:
• Policy type constant is IT_CSI::CSI_CLIENT_AS_POLICY.
• Policy data is IT_CSI::AuthenticationService.
Server-side CSIv2 authentication You can set the server-side CSIv2 authentication policy to enable an
policy application to receive and authenticate GSSUP username/password
credentials. The programmable server-side CSIv2 authentication policy
provides functionality equivalent to setting the following configuration
variables:
policies:csi:auth_over_transport:target_supports
policies:csi:auth_over_transport:target_requires
policies:csi:auth_over_transport:server_domain_name
policies:csi:auth_over_transport:authentication_service
222
Programmable CSIv2 Policies
Client-side CSIv2 identity You can set the client-side CSIv2 identity assertion policy to enable an
assertion policy application to send a CSIv2 asserted identity over the wire in a GIOP service
context. The programmable client-side CSIv2 identity assertion policy
provides functionality equivalent to setting the following configuration
variable:
policies:csi:attribute_service:client_supports
To create a client-side CSIv2 identity assertion policy, use the following IDL
data types from the IT_CSI module:
• Policy type constant is IT_CSI::CSI_CLIENT_SAS_POLICY.
• Policy data is IT_CSI::AttributeService.
Server-side CSIv2 identity You can set the server-side CSIv2 identity assertion policy to enable an
assertion policy application to receive a CSIv2 asserted identity. The programmable
server-side CSIv2 identity assertion policy provides functionality equivalent
to setting the following configuration variable:
policies:csi:attribute_service:target_supports
To create a server-side CSIv2 identity assertion policy, use the following IDL
data types from the IT_CSI module:
• Policy type constant is IT_CSI::CSI_SERVER_SAS_POLICY.
• Policy data is IT_CSI::AttributeService.
223
CHAPTER 12 | Programming Policies
224
CHAPTER 13
Authentication
The Orbix Security Framework protects your applications by
preventing principals from making calls to the system unless
they authenticate themselves.
225
CHAPTER 13 | Authentication
226
Using the Principal Authenticator
Creating own credentials There are two alternative ways to create an application’s own credentials:
• By configuration—that is, by setting the principal sponsor
configuration variables. See “Specifying an Application’s Own
Certificate” on page 157.
• By programming—that is, by calling the
SecurityLevel2::PrincipalAuthenticator::authenticate()
operation directly. This alternative is described here.
Principal A principal can be any person or code that wants to use your secure system.
The principal must be identified, for example by a user name and password,
and authenticated. Once authenticated, your system assigns credentials to
that principal, that assert the authenticated identity.
Principal authenticator The principal authenticator is a factory object that creates own credentials
and associates them with the current ORB instance. By calling the principal
authenticator’s authenticate() operation multiple times, you can associate
a list of own credentials objects with the current ORB.
227
CHAPTER 13 | Authentication
Credentials sharing Normally, when you specify an own credential using the principal
authenticator, the credential is available only to the ORB that created it. By
setting the plugins:security:share_credentials_across_orbs variable to
true, however, the own credentials created by one ORB are automatically
made available to any other ORBs that are configured to share credentials.
Creating own credentials To create own credentials and make them available to your application,
follow these steps:
Step Action
Types of credentials Using the PrincipalAuthenticator, you can create the following types of
credentials:
• SSL/TLS own credentials.
• CSIv2 own credentials.
SSL/TLS own credentials An SSL/TLS own credentials contains an X.509 certificate chain and is
represented by an object of IT_TLS_API::TLSCredentials type.
CSIv2 own credentials The contents of a CSIv2 own credentials depends on the particular
mechanism that is used, as follows:
• Username and password—if the CSIv2 authentication over transport
mechanism is used.
228
Using the Principal Authenticator
229
CHAPTER 13 | Authentication
C++ example In the following C++ example, a client principal passes its identity to the
principal authenticator in the form of a PKCS#12 file:
//C++
int pkcs12_login(
CORBA::ORB_ptr orb,
const char *pkcs12_filename,
const char *password
)
{
CORBA::Any auth_data;
CORBA::Any* continuation_data_ign;
CORBA::Any* auth_specific_data_ign;
Security::AttributeList privileges; // Empty
1 SecurityLevel2::Credentials_var creds;
Security::AuthenticationStatus status;
230
Using the Principal Authenticator
IT_TLS_API::PKCS12FileAuthData p12_auth_data;
CORBA::Object_var obj;
SecurityLevel2::SecurityManager_var security_manager_obj;
SecurityLevel2::PrincipalAuthenticator_var
principal_authenticator_obj;
2 obj = orb->resolve_initial_references("SecurityManager");
security_manager_obj = SecurityLevel2::SecurityManager::
_narrow(obj);
3 principal_authenticator_obj =
security_manager_obj->principal_authenticator();
p12_auth_data.filename =
CORBA::string_dup(pkcs12_filename);
p12_auth_data.password =
CORBA::string_dup(password);
auth_data <<= p12_auth_data;
4 status = principal_authenticator_obj->authenticate(
IT_TLS_API::IT_TLS_AUTH_METH_PKCS12_FILE,
"", // The mechanism name.
NULL, // SecurityName (not used for this method).
auth_data, // The authentication data for this method of
// authentication.
privileges, // Empty list, no privileges are supported
// by SSL.
creds,
continuation_data_ign, // These last two paramaters are
auth_specific_data_ign // not used by this
// mechanism/method combination.
);
...
231
CHAPTER 13 | Authentication
232
Using the Principal Authenticator
C++ example Example 13 shows how to create CSIv2 credentials in C++, by supplying a
username, <user_name>, password, <password>, and authentication
domain, <domain>, to the principal authenticator’s authenticate()
operation.
// C++
int
set_csiv2_credential(CORBA::ORB_var orb)
{
IT_CSI::GSSUPAuthData csi_gssup_auth_data;
CORBA::Any auth_data;
CORBA::Any* continuation_data_ign;
CORBA::Any* auth_specific_data_ign;
Security::AttributeList privileges;
SecurityLevel2::Credentials_var creds;
CORBA::String_var username;
Security::AuthenticationStatus status;
SecurityLevel2::PrincipalAuthenticator_var authenticator;
try {
// Get initial reference of SecurityManager
SecurityLevel2::SecurityManager_var security_manager_obj;
try
{
CORBA::Object_var obj;
1 obj = orb->resolve_initial_references(
"SecurityManager"
);
security_manager_obj =
SecurityLevel2::SecurityManager::_narrow(obj);
233
CHAPTER 13 | Authentication
if (CORBA::is_nil(security_manager_obj))
{
cerr << "Unexpected Error. Failed to initialize "
"SecurityManager initial reference." << endl;
}
2 authenticator =
security_manager_obj->principal_authenticator();
if (CORBA::is_nil(authenticator))
{
// Log error message (not shown) ...
return -1;
}
}
catch (const CORBA::ORB::InvalidName&)
{
// Log error message (not shown) ...
return -1;
}
username = CORBA::string_dup("<user_name>");
3 csi_gssup_auth_data.password =
CORBA::string_dup("<password>");
csi_gssup_auth_data.domain =
CORBA::string_dup("<domain>");
4 auth_data <<= csi_gssup_auth_data;
...
5 status = authenticator->authenticate(
IT_CSI::IT_CSI_AUTH_METH_USERNAME_PASSWORD,
"", // NOT USED
username, // GSSUP user name
auth_data, // GSSUP auth data in an any
privileges, // NOT USED
creds, // returned credentials
continuation_data_ign, // NOT USED
auth_specific_data_ign // NOT USED
);
if (status != Security::SecAuthSuccess)
{
// Log error message (not shown) ...
return -1;
}
}
234
Using the Principal Authenticator
if (CORBA::is_nil(security_manager_obj))
{
cerr << "Unexpected Error. Failed to initialize "
"SecurityManager initial reference." << endl;
}
2 authenticator =
security_manager_obj->principal_authenticator();
if (CORBA::is_nil(authenticator))
{
// Log error message (not shown) ...
return -1;
}
}
catch (const CORBA::ORB::InvalidName&)
{
// Log error message (not shown) ...
return -1;
}
username = CORBA::string_dup("<user_name>");
3 csi_gssup_auth_data.password =
CORBA::string_dup("<password>");
csi_gssup_auth_data.domain =
CORBA::string_dup("<domain>");
4 auth_data <<= csi_gssup_auth_data;
...
5 status = authenticator->authenticate(
IT_CSI::IT_CSI_AUTH_METH_USERNAME_PASSWORD,
"", // NOT USED
username, // GSSUP user name
auth_data, // GSSUP auth data in an any
privileges, // NOT USED
creds, // returned credentials
continuation_data_ign, // NOT USED
auth_specific_data_ign // NOT USED
);
if (status != Security::SecAuthSuccess)
{
// Log error message (not shown) ...
return -1;
}
}
235
CHAPTER 13 | Authentication
236
Using a Credentials Object
How credentials are obtained Credentials objects are created or obtained as the result of:
• Authentication.
• Asking for a Credentials object from a SecurityLevel2::Current
object or from a SecurityLevel2::SecurityManager object.
Accessing the credentials The security attributes associated with a Credentials object can be
attributes obtained by calling the SecurityLevel2::Credentials::get_attributes()
operation, which returns a list of security attributes (of
Security::AttributeList type).
Standard credentials attributes Two security attribute types are supported by Orbix (of
Security::SecurityAttributeType type), as follows:
237
CHAPTER 13 | Authentication
Orbix-specific credentials Orbix also enables you to access the X.509 certificate chain associated with
attributes a Credentials object by narrowing the Credentials object to one of the
following interface types: IT_TLS_API::Credentials,
IT_TLS_API::ReceivedCredentials, or IT_TLS_API::TargetCredentials.
Retrieval method summary The different credentials types can be retrieved in the following ways:
• Retrieving own credentials—a client’s own credentials can be retrieved
from the SecurityLevel2::SecurityManager object.
• Retrieving target credentials—a client can retrieve target credentials
(if they are available) by passing the target’s object reference to the
SecurityLevel2::SecurityManager::get_target_credentials()
operation.
• Retrieving received credentials—a server can retrieve an
authenticated client’s credentials from the SecurityLevel2::Current
object.
238
Retrieving Own Credentials
239
CHAPTER 13 | Authentication
Security manager operations and The attributes and operations on the SecurityLevel2::SecurityManager
attributes object are described in the CORBA Programmer’s Reference.
C++ example In C++, you can retrieve an application’s own credentials list as shown in
Example 14.
// C++
...
1 CORBA::Object_var obj =
my_orb->resolve_initial_references("SecurityManager");
SecurityLevel2::SecurityManager_var security_manager_obj =
SecurityLevel2::SecurityManager::_narrow(obj);
if (CORBA::is_nil(security_manager_obj))
{
// Error! Deal with failed narrow...
}
2 SecurityLevel2::CredentialsList_var creds_list =
security_manager_obj->own_credentials();
...
240
Retrieving Own Credentials
C++ example In C++, if the own credentials list contains a list of SSL/TLS credentials,
you can access the credentials as follows:
// C++
for (CORBA::ULong i=0; i < creds_list->length(); i++)
{
// Access the i’th own credentials in the list
IT_TLS_API::TLSCredentials_var tls_creds =
IT_TLS_API::TLSCredentials::_narrow(creds_list[i]);
if (CORBA::is_nil(tls_creds))
{
// Error! Deal with failed narrow...
}
241
CHAPTER 13 | Authentication
242
Retrieving Target Credentials
Interaction with rebind policy If you are going to retrieve target credentials, you should be aware of the
possible interactions with the rebind policy.
WARNING: If you want to check the target credentials, you should ensure
that transparent rebinding is disabled by setting the
policies:rebind_policy configuration variable to NO_REBIND. Otherwise,
a secure association could close (for example, if automatic connection
management is enabled) and rebind to a different server without the client
being aware of this.
243
CHAPTER 13 | Authentication
C++ example In C++, you can retrieve the target credentials associated with a particular
object reference, target_ref, as shown in Example 15.
// C++
...
// Given the following prerequisites:
// my_orb - a reference to an ORB instance.
// target_ref - an object reference to a remote, secured object.
CORBA::Object_var obj =
my_orb->resolve_initial_references("SecurityManager");
SecurityLevel2::SecurityManager_var security_manager_obj =
SecurityLevel2::SecurityManager::_narrow(obj);
if (CORBA::is_nil(security_manager_obj))
{
// Error! Deal with failed narrow...
}
SecurityLevel2::TargetCredentials_var target_creds =
security_manager_obj->get_target_credentials(target_ref);
...
244
Retrieving Target Credentials
C++ example In C++, after obtaining a target credentials object, target_creds, as shown
in Example 15 on page 244, you can access the SSL/TLS specific data as
follows:
// C++
...
IT_TLS_API::TLSTargetCredentials_var tls_target_creds =
IT_TLS_API::TLSTargetCredentials::_narrow(target_creds);
if (CORBA::is_nil(tls_target_creds))
{
// Error! Deal with failed narrow...
}
245
CHAPTER 13 | Authentication
246
Retrieving Received Credentials
C++ example In C++, to obtain received credentials, perform the steps shown in
Example 16.
// C++
...
// In the context of an operation/attribute implementation
CORBA::Object_var obj =
my_orb->resolve_initial_references("SecurityCurrent");
SecurityLevel2::Current_var current_obj =
SecurityLevel2::Current::_narrow(obj);
if (CORBA::is_nil(current_obj))
{
// Error! Deal with failed narrow...
}
SecurityLevel2::ReceivedCredentials_var recvd_creds =
current_obj->received_credentials();
...
247
CHAPTER 13 | Authentication
C++ example In C++, after obtaining a received credentials object, recvd_creds, (see
Example 16 on page 247) you can access the SSL/TLS specific data as
follows:
// C++
...
IT_TLS_API::TLSReceivedCredentials_var tls_recvd_creds =
IT_TLS_API::TLSReceivedCredentials::_narrow(recvd_creds);
if (CORBA::is_nil(tls_recvd_creds))
{
// Error! Deal with failed narrow...
}
248
CHAPTER 14
Validating
Certificates
During secure authentication, Orbix TLS checks the validity of
an application’s certificate. This chapter describes how Orbix
validates a certificate and how you can use the Orbix API to
introduce additional validation to your applications.
249
CHAPTER 14 | Validating Certificates
Validation process A server sends its certificate to a client during a TLS handshake, as follows:
1. The server obtains its certificate (for example, by reading it from a local
file) and transmits it as part of the handshake.
2. The client reads the certificate from the network, checks the validity of
its contents, and either accepts or rejects the certificate.
250
Overview of Certificate Validation
Default validation The default certificate validation in Orbix checks the following:
• The certificate is a validly constructed X.509 certificate.
• The signature is correct for the certificate.
• The certificate has not expired and is currently valid.
• The certificate chain is validly constructed, consisting of the peer
certificate plus valid issuer certificates up to the maximum allowed
chain depth.
• If the CertConstraintsPolicy has been set, the DN of the received
peer certificate is checked to see if it passes any of the constraints in
the policy conditions. This applies only to the application certificate,
not the CA certificates in the chain.
Custom validation For some applications, it is necessary to introduce additional validation. For
example, your client programs might check that each server uses a specific,
expected certificate (that is, the distinguished name matches an expected
value). Using Orbix, you can perform custom validation on certificates by
registering an IT_TLS_API::CertValidatorPolicy and implementing an
associated IT_TLS::CertValidator object.
Example of custom validation For example, Figure 22 shows the steps followed by Orbix to validate a
certificate when a CertValidatorPolicy has been registered on the client
side:
1. The standard validation checks are applied by Orbix.
2. The certificate is then passed to an IT_TLS::CertValidator callback
object that performs user-specified validation on the certificate.
3. The user-specified CertValidator callback object can decide whether
to accept or reject the certificate.
4. Orbix accepts or rejects the certificate.
251
CHAPTER 14 | Validating Certificates
252
The Contents of an X.509 Certificate
Certificate contents The role of a certificate is to associate an identity with a public key value. In
more detail, a certificate includes:
• X.509 version information.
• A serial number that uniquely identifies the certificate.
• A common name that identifies the subject.
• The public key associated with the common name.
• The name of the user who created the certificate, which is known as
the subject name.
• Information about the certificate issuer.
• The signature of the issuer.
• Information about the algorithm used to sign the certificate.
• Some optional X.509 v3 extensions. For example, an extension exists
that distinguishes between CA certificates and end-entity certificates.
253
CHAPTER 14 | Validating Certificates
Working with distinguished An X.509 certificate uses ASN.1 distinguished name structures to store
names in C++ information about the certificate issuer and subject. A distinguished name
consists of a series of attribute value assertions (AVAs). Each AVA
associates a value with a field from the distinguished name.
For example, the distinguished name for a certificate issuer could be
represented in string format as follows:
/C=IE/ST=Co. Dublin/L=Dublin/O=IONA/OU=PD/CN=IONA
In this example, AVAs are separated by the / character. The first field in the
distinguished name is C, representing the country of the issuer, and the
corresponding value is the country code IE. This example distinguished
name contains six AVAs.
Extracting distinguished names Once you have acquired a certificate, the IT_Certificate::Certificate
from certificates in C++ interface permits you to retrieve distinguished names using the
get_issuer_dn_string() and get_subject_dn_string() operations. These
operations return an object derived from the IT_Certificate::AVAList
interface. The AVAList interface gives you access to the AVA objects
contained in the distinguished name. For more information on these
interfaces, see the CORBA Programmer’s Reference.
Working with X.509 extensions in Some X.509 v3 certificates include extensions. These extensions can
C++ contain several different types of information. You can use the
IT_Certificate::ExtensionList and IT_Certificate::Extension
interfaces described in the CORBA Programmer’s Reference to retrieve this
information.
254
Controlling Certificate Validation
255
CHAPTER 14 | Validating Certificates
Alternatives ways to set the Use the certificate constraints policy to apply these conditions. You can set
constraints policy this policy in two ways:
Setting the CertConstraintsPolicy You can set the CertConstraintsPolicy in the configuration file. For
by configuration example:
"C=US,ST=Massachusetts,O=ABigBank*,OU=Administration"
In this case, the same constraints string applies to all POAs. If you need
different constraints for different POAs then you must supply the policy at
POA creation time. For more details, see “Applying Constraints to
Certificates” on page 162.
256
Controlling Certificate Validation
Note: This certificate constraints policy is only relevant if the target object
supports client authentication.
C++ example The following C++ example shows how to set the CertConstraintsPolicy
programmatically:
//C++
...
CORBA::Any any;
1 CORBA::PolicyList orb_policies;
orb_policies.length(1);
2 CORBA::Object_var object =
global_orb->resolve_initial_references("ORBPolicyManager");
CORBA::PolicyManager_var policy_mgr = CORBA::PolicyManager::
_narrow(object);
3 IT_TLS_API::CertConstraints cert_constraints;
cert_constraints.length(1);
cert_constraints[0] =
CORBA::string_dup("C=US,ST=Massachusetts,
O=ABigBank*,OU=Administration");
any <<= cert_constraints;
4 orb_policies[0] = global_orb->create_policy(IT_TLS_API::
TLS_CERT_CONSTRAINTS_POLICY, any);
5 policy_mgr->set_policy_overrides(orb_policies, CORBA::
ADD_OVERRIDE);
C++ example description The preceding C++ example can be explained as follows:
1. Create a PolicyList object.
2. Retrieve the PolicyManager object.
3. Instantiate a CertConstraints data instance (string array).
257
CHAPTER 14 | Validating Certificates
258
Controlling Certificate Validation
Restrictions on custom certificate The customized certificate validation policy cannot make Orbix accept a
validation certificate that the system has already decided is invalid. It can only reject a
certificate that would otherwise have been accepted.
Customizing your applications To customize your applications, perform the following steps:
Step Action
Derive a class from the In the following example, an implementation class is derived from the
CertValidator signature class IT_TLS::CertValidator interface:
//C++
class CustomCertValidatorImpl :
public virtual IT_TLS::CertValidator,
public virtual CORBA::LocalObject
{
public:
CORBA::Boolean
validate_cert_chain(
CORBA::Boolean chain_is_valid,
const IT_Certificate::X509CertChain& cert_chain,
259
CHAPTER 14 | Validating Certificates
Override the validate_cert_chain() The following an example custom validation function simply retrieves a
operation name from a certificate:
//C++
CORBA::Boolean
CustomCertValidatorImpl::validate_cert_chain(
CORBA::Boolean chain_is_valid,
const IT_Certificate::X509CertChain& cert_chain,
const IT_TLS::CertChainErrorInfo& error_info
)
{
if (chain_is_valid)
{
CORBA::String_var CN;
1 IT_Certificate::X509Cert_var cert = cert_chain[0];
2 IT_Certificate::AVAList_var subject =
cert->get_subject_avalist();
IT_Certificate::Bytes* subject_string_name;
3 subject_string_name = subject->convert(IT_Certificate::
IT_FMT_STRING);
260
Controlling Certificate Validation
Specify the CertValidatorPolicy on Once you have devised your custom validation class, create an instance of it
the ORB and apply it as a policy to the Orb with the policy manager, as shown in the
following example:
//C++
int main(int argc, char* argv[])
{
CORBA::PolicyTypeSeq types;
CORBA::PolicyList policies(1);
CORBA::Any policy_any;
CORBA::Object_var object;
CORBA::PolicyManager_var policy_mgr;
IT_TLS::CertValidator_ptr custom_cert_val_obj;
1 policies.length(1);
types.length(1);
2 types[0] = IT_TLS_API::TLS_CERT_VALIDATOR_POLICY;
object = orb->resolve_initial_references("ORBPolicyManager");
3 policy_mgr = CORBA::PolicyManager::_narrow(object);
6 policy_mgr->set_policy_overrides(
policies,
CORBA::ADD_OVERRIDE
);
261
CHAPTER 14 | Validating Certificates
...
}
As can be seen from the above example, you can apply the new
CertValidator policy to the Orb in the same manner as any other
Orbix2000 policy:
1. Create a CORBA::PolicyList object.
2. Set the type of the appropriate policy slot in the PolicyList to
TLS_CERT_VALIDATOR_POLICY. In this example, the first slot is
chosen.
3. Retrieve the CORBA::PolicyManager object.
4. Instantiate the custom IT_TLS::CertValidator policy object.
5. Create a policy using the CORBA::ORB::create_policy() operation.
The first parameter to this operation sets the policy type to
TLS_CERT_VALIDATOR_POLICY, and the second is a CORBA::Any
containing the custom policy.
6. Use the PolicyManager to add the new policy override to the ORB
scope.
262
Obtaining an X.509 Certificate
263
CHAPTER 14 | Validating Certificates
264
Part VI
Appendices
In this part This part contains the following appendices:
Security
Configuration
This appendix describes configuration variables used by the
IONA Security Framework. The Orbix security infrastructure is
highly configurable.
267
APPENDIX A | Security Configuration
268
Applying Constraints to Certificates
Constraint language These are the special characters and their meanings in the constraint list:
* Matches any text. For example:
an* matches ant and anger, but not aunt
[ ] Grouping symbols.
| Choice symbol. For example:
OU=[unit1|IT_SSL] signifies that if the OU is unit1
or IT_SSL, the certificate is acceptable.
=, != Signify equality and inequality respectively.
269
APPENDIX A | Security Configuration
Distinguished names For more information on distinguished names, see the Security Guide.
270
initial_references
initial_references
The initial_references namespace contains the following configuration
variables:
• IT_TLS_Toolkit:plugin
IT_TLS_Toolkit:plugin
This configuration variable enables you to specify the underlying SSL/TLS
toolkit to be used by Orbix. It is used in conjunction with the
plugins:baltimore_toolkit:shlib_name,
plugins:schannel_toolkit:shlib_name (Windows only) and
plugins:systemssl_toolkit:shlib_name (z/OS only) configuration
variables to implement SSL/TLS toolkit replaceability.
The default is the Baltimore toolkit.
For example, to specify that an application should use the System SSL
toolkit, you would set configuration variables as follows:
initial_references:IT_TLS_Toolkit:plugin = "systemssl_toolkit";
plugins:systemssl_toolkit:shlib_name = "ORXSSSL";
271
APPENDIX A | Security Configuration
plugins:atli2_tls
The plugins:atli2_tls namespace contains the following variable:
• use_jsse_tk
use_jsse_tk
(Java only) Specifies whether or not to use the JSSE/JCE architecture with
Orbix Java applications. If true, Orbix uses the JSSE/JCE architecture to
implement SSL/TLS security; if false, Orbix uses the Baltimore SSL/TLS
toolkit.
The default is false.
272
plugins:csi
plugins:csi
The policies:csi namespace includes variables that specify settings for
Common Secure Interoperability version 2 (CSIv2):
• shlib_name
• use_legacy_policies
shlib_name
shlib_name identifies the DLL that contains the csi plug-in implementation:
plugins:csi:shlib_name = "ORXCSIP";
The csi plug-in becomes associated with the ORXCSIP DLL, where ORXCSIP
is the unversioned or similar word base name of the library.
use_legacy_policies
use_legacy_policies is a boolean variable that specifies whether the
application can be programmed using the new CSIv2 policy types or the
older (legacy) CSIv2 policy types.
If plugins:csi:use_legacy_policies is set to true, you can program CSIv2
using the following policies:
• IT_CSI::AuthenticationServicePolicy
• IT_CSI::AttributeServicePolicy
If plugins:csi:use_legacy_policies is set to false, you can program
CSIv2 using the following policies:
• IT_CSI::AttributeServiceProtocolClient
• IT_CSI::AttributeServiceProtocolServer
Default is false.
273
APPENDIX A | Security Configuration
plugins:gsp
The plugins:gsp namespace includes variables that specify settings for the
Generic Security Plugin (GSP). This provides authorization by checking a
user’s roles against the permissions stored in an action-role mapping file. It
includes the following:
• accept_asserted_authorization_info
• action_role_mapping_file
• assert_authorization_info
• authentication_cache_size
• authentication_cache_timeout
• authorization_policy_enforcement_point
• authorization_policy_store_type
• authorization_realm
• enable_authorization
• enable_gssup_sso
• enable_user_id_logging
• enable_x509_sso
• enforce_secure_comms_to_sso_server
• enable_security_service_cert_authentication
• retrieve_isf_auth_principal_info_for_all_realms
• sso_server_certificate_constraints
• use_client_load_balancing
accept_asserted_authorization_info
If false, SAML data is not read from incoming connections. Default is true.
action_role_mapping_file
Specifies the action-role mapping file URL. For example:
plugins:gsp:action_role_mapping_file =
"file:///my/action/role/mapping";
274
plugins:gsp
assert_authorization_info
If false, SAML data is not sent on outgoing connections. Default is true.
authentication_cache_size
The maximum number of credentials stored in the authentication cache. If
this size is exceeded the oldest credential in the cache is removed.
A value of -1 (the default) means unlimited size. A value of 0 means disable
the cache.
authentication_cache_timeout
The time (in seconds) after which a credential is considered stale. Stale
credentials are removed from the cache and the server must re-authenticate
with the Orbix security service on the next call from that user. The cache
timeout should be configured to be smaller than the timeout set in the
is2.properties file (by default, that setting is
is2.sso.session.timeout=600).
A value of -1 (the default) means an infinite time-out. A value of 0 means
disable the cache.
authorization_policy_enforcement_point
Specifies whether access decisions should be made locally (based on
cached ACL data) or delegated to the Orbix security service. This variable is
meaningful only when the authorization_policy_store_type is set to
centralized.
This configuration variable can have the following values:
• local—after retrieving and caching ACL data from the Orbix security
service, the GSP plug-in consults only the local cache when making
access decisions.
275
APPENDIX A | Security Configuration
authorization_policy_store_type
Specifies whether ACL data should be stored locally (on the same host as
the Orbix application) or centrally (on the same host as the Orbix security
server). This configuration variable can have the following values:
• local—retrieves ACL data from the local file specified by the
plugins:gsp:action_role_mapping_file configuration variable.
• centralized—retrieves ACL data from the Orbix security service. The
Orbix security service must be configured to support centralized ACLs
by editing the relevant properties in its is2.properties file.
The default is local.
authorization_realm
authorization_realm specifies the iSF authorization realm to which a
server belongs. The value of this variable determines which of a user's roles
are considered when making an access control decision.
For example, consider a user that belongs to the ejb-developer and
corba-developer roles within the Engineering realm, and to the ordinary
role within the Sales realm. If you set plugins:gsp:authorization_realm to
Sales for a particular server, only the ordinary role is considered when
making access control decisions (using the action-role mapping file).
enable_authorization
A boolean GSP policy that, when true, enables authorization using
action-role mapping ACLs in server.
Default is true.
276
plugins:gsp
enable_gssup_sso
Enables SSO with a username and a password (that is, GSSUP) when set to
true.
enable_user_id_logging
A boolean variable that enables logging of user IDs on the server side.
Default is false.
Up until the release of Orbix 6.1 SP1, the GSP plug-in would log messages
containing user IDs. For example:
[junit] Fri, 28 May 2004 12:17:22.0000000 [SLEEPY:3284]
(IT_CSI:205) I - User alice authenticated successfully.
In some cases, however, it might not be appropriate to expose user IDs in
the Orbix log. From Orbix 6.2 onward, the default behavior of the GSP
plug-in is changed, so that user IDs are not logged by default. To restore the
pre-Orbix 6.2 behavior and log user IDs, set this variable to true.
enable_x509_sso
Enables certificate-based SSO when set to true.
enforce_secure_comms_to_sso_server
Enforces a secure SSL/TLS link between a client and the login service when
set to true. When this setting is true, the value of the SSL/TLS client secure
invocation policy does not affect the connection between the client and the
login service.
Default is true.
277
APPENDIX A | Security Configuration
enable_security_service_cert_authentication
A boolean GSP policy that enables X.509 certificate-based authentication
on the server side using the Orbix security service.
Default is false.
retrieve_isf_auth_principal_info_for_all_realms
A boolean setting that determines whether the GSP plug-in retrieves role
and realm data for all realms, when authenticating user credentials. If true,
the GSP plug-in retrieves the user’s role and realm data for all realms; if
false, the GSP plug-in retrieves the user’s role and realm data only for the
realm specified by plugins:gsp:authorization_realm.
Setting this variable to false can provide a useful performance optimization
in some applications. But you must take special care to configure the
application correctly for making operation invocations between different
realms.
Default is true.
sso_server_certificate_constraints
A special certificate constraints policy that applies only to the SSL/TLS
connection between the client and the SSO login server. For details of the
pattern constraint language, see “Applying Constraints to Certificates” on
page 269.
use_client_load_balancing
A boolean variable that enables load balancing over a cluster of security
services. If an application is deployed in a domain that uses security service
clustering, the application should be configured to use client load balancing
(in this context, client means a client of the Orbix security service). See also
policies:iiop_tls:load_balancing_mechanism.
Default is true.
278
plugins:https
plugins:https
The plugins:https namespace contains the following variable:
• ClassName
ClassName
(Java only) This variable specifies the class name of the https plug-in
implementation. For example:
plugins:https:ClassName = "com.iona.corba.https.HTTPSPlugIn";
279
APPENDIX A | Security Configuration
plugins:iiop_tls
The plugins:iiop_tls namespace contains the following variables:
• buffer_pool:recycle_segments
• buffer_pool:segment_preallocation
• buffer_pools:max_incoming_buffers_in_pool
• buffer_pools:max_outgoing_buffers_in_pool
• cert_expiration_warning_days
• delay_credential_gathering_until_handshake
• enable_iiop_1_0_client_support
• enable_warning_for_approaching_cert_expiration
• incoming_connections:hard_limit
• incoming_connections:soft_limit
• outgoing_connections:hard_limit
• outgoing_connections:soft_limit
• own_credentials_warning_cert_constraints
• tcp_listener:reincarnate_attempts
• tcp_listener:reincarnation_retry_backoff_ratio
• tcp_listener:reincarnation_retry_delay
buffer_pool:recycle_segments
(Java only) When this variable is set, the iiop_tls plug-in reads this
variable’s value instead of the
plugins:iiop:buffer_pool:recycle_segments variable’s value.
buffer_pool:segment_preallocation
(Java only) When this variable is set, the iiop_tls plug-in reads this
variable’s value instead of the
plugins:iiop:buffer_pool:segment_preallocation variable’s value.
280
plugins:iiop_tls
buffer_pools:max_incoming_buffers_in_pool
(C++ only) When this variable is set, the iiop_tls plug-in reads this
variable’s value instead of the
plugins:iiop:buffer_pools:max_incoming_buffers_in_pool variable’s
value.
buffer_pools:max_outgoing_buffers_in_pool
(C++ only) When this variable is set, the iiop_tls plug-in reads this
variable’s value instead of the
plugins:iiop:buffer_pools:max_outgoing_buffers_in_pool variable’s
value.
cert_expiration_warning_days
(Since Orbix 6.2 SP1) Specifies the threshold for the number of days left to
certificate expiration, before Orbix issues a warning. If the application’s own
certificate is due to expire in less than the specified number of days, Orbix
issues a warning message to the log.
Default is 31 days.
See also the following related configuration variables:
plugins:iiop_tls:enable_warning_for_approaching_cert_expiration
plugins:iiop_tls:own_credentials_warning_cert_constraints
delay_credential_gathering_until_handshake
(Windows and Schannel only) This client configuration variable provides an
alternative to using the principal_sponsor variables to specify an
application’s own certificate. When this variable is set to true and
principal_sponsor:use_principal_sponsor is set to false, the client
delays sending its certificate to a server. The client will wait until the server
explicitly requests the client to send its credentials during the SSL/TLS
handshake.
281
APPENDIX A | Security Configuration
enable_iiop_1_0_client_support
This variable enables client-side interoperability of Orbix SSL/TLS
applications with legacy IIOP 1.0 SSL/TLS servers, which do not support
IIOP 1.1.
The default value is false. When set to true, Orbix SSL/TLS searches
secure target IIOP 1.0 object references for legacy IIOP 1.0 SSL/TLS tagged
component data, and attempts to connect on the specified port.
enable_warning_for_approaching_cert_expiration
(Since Orbix 6.2 SP1) Enables warnings to be sent to the log, if an
application’s own certificate is imminently about to expire. The boolean
value can have the following values: true, enables the warning feature;
false, disables the warning feature.
Default is true.
See also the following related configuration variables:
plugins:iiop_tls:cert_expiration_warning_days
plugins:iiop_tls:own_credentials_warning_cert_constraints
incoming_connections:hard_limit
Specifies the maximum number of incoming (server-side) connections
permitted to IIOP. IIOP does not accept new connections above this limit.
Defaults to -1 (disabled).
When this variable is set, the iiop_tls plug-in reads this variable’s value
instead of the plugins:iiop:incoming_connections:hard_limit variable’s
value.
Please see the chapter on ACM in the CORBA Programmer’s Guide for
further details.
282
plugins:iiop_tls
incoming_connections:soft_limit
Specifies the number of connections at which IIOP should begin closing
incoming (server-side) connections. Defaults to -1 (disabled).
When this variable is set, the iiop_tls plug-in reads this variable’s value
instead of the plugins:iiop:incoming_connections:soft_limit variable’s
value.
Please see the chapter on ACM in the CORBA Programmer’s Guide for
further details.
outgoing_connections:hard_limit
When this variable is set, the iiop_tls plug-in reads this variable’s value
instead of the plugins:iiop:outgoing_connections:hard_limit variable’s
value.
outgoing_connections:soft_limit
When this variable is set, the iiop_tls plug-in reads this variable’s value
instead of the plugins:iiop:outgoing_connections:soft_limit variable’s
value.
own_credentials_warning_cert_constraints
(Since Orbix 6.2 SP1) Set this certificate constraints variable, if you would
like to avoid deploying certain certificates as an own certificate. A warning is
issued, if the own certificate’s subject DN matches the constraints specified
by this variable (see “Applying Constraints to Certificates” on page 269 for
details of the constraint language). For example, you might want to generate
a warning in case you accidentally deployed an IONA demonstration
certificate.
Default is an empty list, [].
283
APPENDIX A | Security Configuration
tcp_listener:reincarnate_attempts
(Windows only)
plugins:iiop_tls:tcp_listener:reincarnate_attempts specifies the
number of times that a Listener recreates its listener socket after recieving a
SocketException.
Sometimes a network error may occur, which results in a listening socket
being closed. On Windows, you can configure the listener to attempt a
reincarnation, which enables new connections to be established. This
variable only affects Java and C++ applications on Windows. Defaults to 0
(no attempts).
tcp_listener:reincarnation_retry_backoff_ratio
(Windows only)
plugins:iiop_tls:tcp_listener:reincarnation_retry_delay specifies a
delay between reincarnation attempts. Data type is long. Defaults to 0 (no
delay).
tcp_listener:reincarnation_retry_delay
(Windows only)
plugins:iiop_tls:tcp_listener:reincarnation_retry_backoff_ratiosp
ecifies the degree to which delays between retries increase from one retry to
the next. Datatype is long. Defaults to 1.
284
plugins:locator
plugins:locator
The plugins:locator namespace contains the following variable:
• iiop_tls:port
iiop_tls:port
Specifies the IP port number where the Orbix locator service listens for
secure connections.
Note: This is only useful for applications that have a single TLS listener.
For applications that have multiple TLS listeners, you need to
programmatically specify the well-known addressing policy.
285
APPENDIX A | Security Configuration
plugins:security
The plugins:security namespace contains the following variable:
• share_credentials_across_orbs
share_credentials_across_orbs
Enables own security credentials to be shared across ORBs. Normally, when
you specify an own SSL/TLS credential (using the principal sponsor or the
principal authenticator), the credential is available only to the ORB that
created it. By setting the
plugins:security:share_credentials_across_orbs variable to true,
however, the own SSL/TLS credentials created by one ORB are
automatically made available to any other ORBs that are configured to share
credentials.
See also principal_sponsor:csi:use_existing_credentials for details of
how to enable sharing of CSI credentials.
Default is false.
286
plugins:systemssl_toolkit
plugins:systemssl_toolkit
The plugins:systemssl_toolkit namespace contains the following
variables:
• hfs_keyring_file_password
• hfs_keyring_file_stashfile
• hfs_keyring_filename
• saf_keyring
• session_cache_size
• session_cache_validity_period
hfs_keyring_file_password
hfs_keyring_file_password specifies the password that accesses the key
database specified by plugins:systemssl_toolkit:hfs_keyring_filename.
hfs_keyring_file_stashfile
hfs_keyring_file_stashfile specifies the name of a stash file containing
the password that accesses the key database specified by
plugins:systemssl_toolkit:hfs_keyring_filename. The stash file stores
the password in encrypted form.
hfs_keyring_filename
hfs_keyring_filename specifies the name of a key ring file (database of
keys) within a hierarchical file system. For example, to specify the
/keyring/key.kdb key ring file:
plugins:systemssl_toolkit:hfs_keyring_filename =
"/keyring/key.kdb";
287
APPENDIX A | Security Configuration
saf_keyring
saf_keyring specifies the name of an SAF key ring (for example, an RACF
key ring) from which an application retrieves authentication data. For
example, to use the SAF key ring named TESTRING:
plugins:systemssl_toolkit:saf_keyring = "TESTRING";
session_cache_size
session_cache_size specifies the size of the System SSL session identifier
cache. The oldest entry will be removed when the cache is full, in order to
make space for a new entry. The range is 0–64000 and defaults to 512.
Session identifiers will not be remembered if a value of 0 is specified.
session_cache_validity_period
session_cache_validity_period specifies the number of seconds until an
SSL session identifier expires. The range is 0–86400 and defaults to 86400
(one day). System SSL will remember session identifiers for this amount of
time. This reduces the amount of data exchanged during the SSL handshake
when a complete initial handshake has already been performed. Session
identifiers will not be remembered if a value of 0 is specified.
288
policies
policies
The policies namespace defines the default CORBA policies for an ORB.
Many of these policies can also be set programmatically from within an
application. SSL/TLS-specific variables in the policies namespace include:
• allow_unauthenticated_clients_policy
• certificate_constraints_policy
• client_secure_invocation_policy:requires
• client_secure_invocation_policy:supports
• max_chain_length_policy
• mechanism_policy:accept_v2_hellos
• mechanism_policy:ciphersuites
• mechanism_policy:protocol_version
• target_secure_invocation_policy:requires
• target_secure_invocation_policy:supports
• trusted_ca_list_policy
allow_unauthenticated_clients_policy
(Deprecated in favor of
policies:iiop_tls:allow_unauthenticated_clients_policy and
policies:https:allow_unauthenticated_clients_policy.)
A generic variable that sets this policy both for iiop_tls and https. The
recommended alternative is to use the variables prefixed by
policies:iiop_tls and policies:https instead, which take precedence
over this generic variable.
289
APPENDIX A | Security Configuration
certificate_constraints_policy
(Deprecated in favor of
policies:iiop_tls:certificate_constraints_policy and
policies:https:certificate_constraints_policy.)
A generic variable that sets this policy both for iiop_tls and https. The
recommended alternative is to use the variables prefixed by
policies:iiop_tls and policies:https instead, which take precedence
over this generic variable.
client_secure_invocation_policy:requires
(Deprecated in favor of
policies:iiop_tls:client_secure_invocation_policy:requires and
policies:https:client_secure_invocation_policy:requires.)
A generic variable that sets this policy both for iiop_tls and https. The
recommended alternative is to use the variables prefixed by
policies:iiop_tls and policies:https instead, which take precedence
over this generic variable.
client_secure_invocation_policy:supports
(Deprecated in favor of
policies:iiop_tls:client_secure_invocation_policy:supports and
policies:https:client_secure_invocation_policy:supports.)
A generic variable that sets this policy both for iiop_tls and https. The
recommended alternative is to use the variables prefixed by
policies:iiop_tls and policies:https instead, which take precedence
over this generic variable.
290
policies
max_chain_length_policy
(Deprecated in favor of policies:iiop_tls:max_chain_length_policy and
policies:https:max_chain_length_policy.)
max_chain_length_policy specifies the maximum certificate chain length
that an ORB will accept. The policy can also be set programmatically using
the IT_TLS_API::MaxChainLengthPolicy CORBA policy. Default is 2.
mechanism_policy:accept_v2_hellos
(See also policies:iiop_tls:mechanism_policy:accept_v2_hellos and
policies:https:mechanism_policy:accept_v2_hellos.)
The accept_v2_hellos policy is a special setting that facilitates
interoperability with older deployments of Orbix on z/OS. When true, the
Orbix application accepts V2 client hellos, but continues the handshake
using either the SSL_V3 or TLS_V1 protocol. When false, the Orbix
application throws an error, if it receives a V2 client hello. The default is
false. For example:
policies:mechanism_policy:accept_v2_hellos = "true";
mechanism_policy:ciphersuites
(Deprecated in favor of
policies:iiop_tls:mechanism_policy:ciphersuites and
policies:https:mechanism_policy:ciphersuites.)
291
APPENDIX A | Security Configuration
RSA_WITH_NULL_MD5 RSA_EXPORT_WITH_RC4_40_MD5
RSA_WITH_NULL_SHA RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
RSA_EXPORT_WITH_DES40_CBC_SHA
RSA_WITH_DES_CBC_SHA
RSA_WITH_3DES_EDE_CBC_SHA
If you do not specify the list of cipher suites explicitly, all of the null
encryption ciphers are disabled and all of the non-export strength ciphers
are supported by default.
mechanism_policy:protocol_version
(Deprecated in favor of
policies:iiop_tls:mechanism_policy:protocol_version and
policies:https:mechanism_policy:protocol_version.)
mechanism_policy:protocol_version specifies the list of protocol versions
used by a security capsule (ORB instance). The list can include one or more
of the values SSL_V3 and TLS_V1. For example:
policies:mechanism_policy:protocol_version=["TLS_V1", "SSL_V3"];
292
policies
target_secure_invocation_policy:requires
(Deprecated in favor of
policies:iiop_tls:target_secure_invocation_policy:requires and
policies:https:target_secure_invocation_policy:requires.)
target_secure_invocation_policy:requires specifies the minimum level
of security required by a server. The value of this variable is specified as a
list of association options.
target_secure_invocation_policy:supports
(Deprecated in favor of
policies:iiop_tls:target_secure_invocation_policy:supports and
policies:https:target_secure_invocation_policy:supports.)
supports specifies the maximum level of security supported by a server. The
value of this variable is specified as a list of association options. This policy
can be upgraded programmatically using either the QOP or the
EstablishTrust policies.
293
APPENDIX A | Security Configuration
trusted_ca_list_policy
(Deprecated in favor of policies:iiop_tls:trusted_ca_list_policy and
policies:https:trusted_ca_list_policy.)
trusted_ca_list_policy specifies a list of filenames, each of which
contains a concatenated list of CA certificates in PEM format. The aggregate
of the CAs in all of the listed files is the set of trusted CAs.
For example, you might specify two files containing CA lists as follows:
policies:trusted_ca_list_policy =
["install_dir/asp/version/etc/tls/x509/ca/ca_list1.pem",
"install_dir/asp/version/etc/tls/x509/ca/ca_list_extra.pem"];
The purpose of having more than one file containing a CA list is for
administrative convenience. It enables you to group CAs into different lists
and to select a particular set of CAs for a security domain by choosing the
appropriate CA lists.
294
policies:csi
policies:csi
The policies:csi namespace includes variables that specify settings for
Common Secure Interoperability version 2 (CSIv2):
• attribute_service:backward_trust:enabled
• attribute_service:client_supports
• attribute_service:target_supports
• auth_over_transport:authentication_service
• auth_over_transport:client_supports
• auth_over_transport:server_domain_name
• auth_over_transport:target_requires
• auth_over_transport:target_supports
attribute_service:backward_trust:enabled
(Obsolete)
attribute_service:client_supports
attribute_service:client_supports is a client-side policy that specifies
the association options supported by the CSIv2 attribute service (principal
propagation). The only assocation option that can be specified is
IdentityAssertion. This policy is normally specified in an intermediate
server so that it propagates CSIv2 identity tokens to a target server. For
example:
policies:csi:attribute_service:client_supports =
["IdentityAssertion"];
295
APPENDIX A | Security Configuration
attribute_service:target_supports
attribute_service:target_supports is a server-side policy that specifies
the association options supported by the CSIv2 attribute service (principal
propagation). The only assocation option that can be specified is
IdentityAssertion. For example:
policies:csi:attribute_service:target_supports =
["IdentityAssertion"];
auth_over_transport:authentication_service
(Java CSI plug-in only) The name of a Java class that implements the
IT_CSI::AuthenticateGSSUPCredentials IDL interface. The authentication
service is implemented as a callback object that plugs into the CSIv2
framework on the server side. By replacing this class with a custom
implementation, you could potentially implement a new security technology
domain for CSIv2.
By default, if no value for this variable is specified, the Java CSI plug-in uses
a default authentication object that always returns false when the
authenticate() operation is called.
auth_over_transport:client_supports
auth_over_transport:client_supports is a client-side policy that specifies
the association options supported by CSIv2 authorization over transport.
The only assocation option that can be specified is
EstablishTrustInClient. For example:
policies:csi:auth_over_transport:client_supports =
["EstablishTrustInClient"];
296
policies:csi
auth_over_transport:server_domain_name
The iSF security domain (CSIv2 authentication domain) to which this server
application belongs. The iSF security domains are administered within an
overall security technology domain.
The value of the server_domain_name variable will be embedded in the IORs
generated by the server. A CSIv2 client about to open a connection to this
server would check that the domain name in its own CSIv2 credentials
matches the domain name embedded in the IOR.
auth_over_transport:target_requires
auth_over_transport:target_requires is a server-side policy that
specifies the association options required for CSIv2 authorization over
transport. The only assocation option that can be specified is
EstablishTrustInClient. For example:
policies:csi:auth_over_transport:target_requires =
["EstablishTrustInClient"];
auth_over_transport:target_supports
auth_over_transport:target_supports is a server-side policy that
specifies the association options supported by CSIv2 authorization over
transport. The only assocation option that can be specified is
EstablishTrustInClient. For example:
policies:csi:auth_over_transport:target_supports =
["EstablishTrustInClient"];
297
APPENDIX A | Security Configuration
policies:https
The policies:https namespace contains variables used to configure the
https plugin. It contains the following variables:
• allow_unauthenticated_clients_policy
• browser_navigation:enabled
• certificate_constraints_policy
• client_secure_invocation_policy:requires
• client_secure_invocation_policy:supports
• max_chain_length_policy
• mechanism_policy:accept_v2_hellos
• mechanism_policy:ciphersuites
• mechanism_policy:protocol_version
• send_timeout
• session_caching_policy
• target_secure_invocation_policy:requires
• target_secure_invocation_policy:supports
• trace_requests:enabled
• trusted_ca_list_policy
allow_unauthenticated_clients_policy
A boolean variable that specifies whether a server will allow a client to
establish a secure connection without sending a certificate. Default is false.
This configuration variable is applicable only in the special case where the
target secure invocation policy is set to require NoProtection (a semi-secure
server).
298
policies:https
browser_navigation:enabled
Specifies whether you can use the browser interface to drill down to the list
of available Web service endpoints. The default value is true, which means
you can enter a high-level URL (for example, https://host:port), and click
through subsequent screens to view to the list of available services and the
associated WSDL.
certificate_constraints_policy
A list of constraints applied to peer certificates—see “Applying Constraints
to Certificates” on page 269 for the syntax of the pattern constraint
language. If a peer certificate fails to match any of the constraints, the
certificate validation step will fail.
The policy can also be set programmatically using the
IT_TLS_API::CertConstraintsPolicy CORBA policy. Default is no
constraints.
client_secure_invocation_policy:requires
Specifies the minimum level of security required by a client. The value of
this variable is specified as a list of association options—see the Orbix
Security Guide for details on how to set SSL/TLS association options.
client_secure_invocation_policy:supports
Specifies the initial maximum level of security supported by a client. The
value of this variable is specified as a list of association options—see the
Orbix Security Guide for details on how to set SSL/TLS association options.
Note: This policy can be upgraded programmatically using either the QOP
or the EstablishTrust policies.
299
APPENDIX A | Security Configuration
max_chain_length_policy
The maximum certificate chain length that an ORB will accept (see the
discussion of certificate chaining in the Orbix Security Guide).
The policy can also be set programmatically using the
IT_TLS_API::MaxChainLengthPolicy CORBA policy. Default is 2.
mechanism_policy:accept_v2_hellos
This HTTPS-specific policy overides the generic
policies:mechanism_policy:accept_v2_hellos policy.
The accept_v2_hellos policy is a special setting that facilitates HTTPS
interoperability with certain Web browsers. Many Web browsers send SSL
V2 client hellos, because they do not know what SSL version the server
supports.
When true, the Orbix server accepts V2 client hellos, but continues the
handshake using either the SSL_V3 or TLS_V1 protocol. When false, the
Orbix server throws an error, if it receives a V2 client hello. The default is
true.
For example:
policies:https:mechanism_policy:accept_v2_hellos = "true";
300
policies:https
mechanism_policy:ciphersuites
Specifies a list of cipher suites for the default mechanism policy. One or
more of the following cipher suites can be specified in this list:
RSA_WITH_NULL_MD5 RSA_EXPORT_WITH_RC4_40_MD5
RSA_WITH_NULL_SHA RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
RSA_EXPORT_WITH_DES40_CBC_SHA
RSA_WITH_DES_CBC_SHA
RSA_WITH_3DES_EDE_CBC_SHA
If you do not specify the list of cipher suites explicitly, all of the null
encryption ciphers are disabled and all of the non-export strength ciphers
are supported by default.
mechanism_policy:protocol_version
This HTTPS-specific policy overides the generic
policies:mechanism_policy:protocol_version policy.
Specifies the list of protocol versions used by a security capsule (ORB
instance). Can include one or more of the following values:
TLS_V1
SSL_V3
The default setting is SSL_V3 and TLS_V1.
For example:
policies:https:mechanism_policy:protocol_version = ["TLS_V1",
"SSL_V3"];
301
APPENDIX A | Security Configuration
send_timeout
Enables you to abort an HTTPS send reply attempt to the target Web service
consumer if this expiry setting times out. The value is expressed in
milliseconds. This setting relates to the time taken to send the entire HTTP
message to the remote Web service peer.
policies:https:send_timeout = "5000";
session_caching_policy
When this policy is set, the https plug-in reads this policy’s value instead of
the policies:session_caching policy’s value (C++) or
policies:session_caching_policy policy’s value (Java).
target_secure_invocation_policy:requires
Specifies the minimum level of security required by a server. The value of
this variable is specified as a list of association options—see the Orbix
Security Guide for more details about association options.
In accordance with CORBA security, this policy cannot be downgraded
programmatically by the application.
target_secure_invocation_policy:supports
Specifies the maximum level of security supported by a server. The value of
this variable is specified as a list of association options—see the Orbix
Security Guide for more details about association options.
This policy can be upgraded programmatically using either the QOP or the
EstablishTrust policies.
302
policies:https
trace_requests:enabled
Specifies whether the contents of each HTTPS message should be sent to
the event-log stream as INFO messages. If no value is specified for this
variable, it defaults to false, and no INFO messages are sent to the event
log stream.
trusted_ca_list_policy
Contains a list of filenames (or a single filename), each of which contains a
concatenated list of CA certificates in PEM format. The aggregate of the CAs
in all of the listed files is the set of trusted CAs.
For example, you might specify two files containing CA lists as follows:
policies:trusted_ca_list_policy =
["ASPInstallDir/asp/6.0/etc/tls/x509/ca/ca_list1.pem",
"ASPInstallDir/asp/6.0/etc/tls/x509/ca/ca_list_extra.pem"];
The purpose of having more than one file containing a CA list is for
administrative convenience. It enables you to group CAs into different lists
and to select a particular set of CAs for a security domain by choosing the
appropriate CA lists.
303
APPENDIX A | Security Configuration
policies:iiop_tls
The policies:iiop_tls namespace contains variables used to set
IIOP-related policies for a secure environment. These setting affect the
iiop_tls plugin. It contains the following variables:
• buffer_sizes_policy:default_buffer_size
• buffer_sizes_policy:max_buffer_size
• certificate_constraints_policy
• client_secure_invocation_policy:requires
• client_secure_invocation_policy:supports
• client_version_policy
• connection_attempts
• connection_retry_delay
• load_balancing_mechanism
• max_chain_length_policy
• mechanism_policy:accept_v2_hellos
• mechanism_policy:ciphersuites
• mechanism_policy:protocol_version
• server_address_mode_policy:local_domain
• server_address_mode_policy:local_hostname
• server_address_mode_policy:port_range
• server_address_mode_policy:publish_hostname
• server_version_policy
• target_secure_invocation_policy:requires
• target_secure_invocation_policy:supports
• tcp_options_policy:no_delay
• tcp_options_policy:recv_buffer_size
• tcp_options_policy:send_buffer_size
• trusted_ca_list_policy
304
policies:iiop_tls
buffer_sizes_policy:default_buffer_size
When this policy is set, the iiop_tls plug-in reads this policy’s value
instead of the policies:iiop:buffer_sizes_policy:default_buffer_size
policy’s value.
buffer_sizes_policy:default_buffer_size specifies, in bytes, the initial
size of the buffers allocated by IIOP. Defaults to 16000. This value must be
greater than 80 bytes, and must be evenly divisible by 8.
buffer_sizes_policy:max_buffer_size
When this policy is set, the iiop_tls plug-in reads this policy’s value
instead of the policies:iiop:buffer_sizes_policy:max_buffer_size
policy’s value.
buffer_sizes_policy:max_buffer_size specifies the maximum buffer size
permitted by IIOP, in kilobytes. Defaults to 512. A value of -1 indicates
unlimited size. If not unlimited, this value must be greater than 80.
certificate_constraints_policy
A list of constraints applied to peer certificates—see the discussion of
certificate constraints in the Orbix security guide for the syntax of the pattern
constraint language. If a peer certificate fails to match any of the
constraints, the certificate validation step will fail.
The policy can also be set programmatically using the
IT_TLS_API::CertConstraintsPolicy CORBA policy. Default is no
constraints.
client_secure_invocation_policy:requires
Specifies the minimum level of security required by a client. The value of
this variable is specified as a list of association options—see the Orbix
Security Guide for more details about association options.
In accordance with CORBA security, this policy cannot be downgraded
programmatically by the application.
305
APPENDIX A | Security Configuration
client_secure_invocation_policy:supports
Specifies the initial maximum level of security supported by a client. The
value of this variable is specified as a list of association options—see the
Orbix Security Guide for more details about association options.
This policy can be upgraded programmatically using either the QOP or the
EstablishTrust policies.
client_version_policy
client_version_policy specifies the highest IIOP version used by clients. A
client uses the version of IIOP specified by this variable, or the version
specified in the IOR profile, whichever is lower. Valid values for this variable
are: 1.0, 1.1, and 1.2.
For example, the following file-based configuration entry sets the server IIOP
version to 1.1.
policies:iiop:server_version_policy="1.1";
connection_attempts
connection_attempts specifies the number of connection attempts used
when creating a connected socket using a Java application. Defaults to 5.
connection_retry_delay
connection_retry_delay specifies the delay, in seconds, between
connection attempts when using a Java application. Defaults to 2.
306
policies:iiop_tls
load_balancing_mechanism
Specifies the load balancing mechanism for the client of a security service
cluster (see also plugins:gsp:use_client_load_balancing). In this
context, a client can also be an Orbix server. This policy only affects
connections made using IORs that contain multiple addresses. The
iiop_tls plug-in load balances over the addresses embedded in the IOR.
The following mechanisms are supported:
• random—choose one of the addresses embedded in the IOR at random
(this is the default).
• sequential—choose the first address embedded in the IOR, moving
on to the next address in the list only if the previous address could not
be reached.
max_chain_length_policy
This policy overides policies:max_chain_length_policy for the iiop_tls
plugin.
The maximum certificate chain length that an ORB will accept.
The policy can also be set programmatically using the
IT_TLS_API::MaxChainLengthPolicy CORBA policy. Default is 2.
mechanism_policy:accept_v2_hellos
This IIOP/TLS-specific policy overides the generic
policies:mechanism_policy:accept_v2_hellos policy.
The accept_v2_hellos policy is a special setting that facilitates
interoperability with older deployments of Orbix on z/OS.
Orbix security on the z/OS platform is based on IBM’s System/SSL toolkit,
which implements SSL version 3, but does so by using SSL version 2 hellos
as part of the handshake. This form of handshake causes interoperability
problems, because applications on other platforms identify the handshake
307
APPENDIX A | Security Configuration
For example:
policies:iiop_tls:mechanism_policy:accept_v2_hellos = "true";
mechanism_policy:ciphersuites
This policy overides policies:mechanism_policy:ciphersuites for the
iiop_tls plugin.
Specifies a list of cipher suites for the default mechanism policy. One or
more of the following cipher suites can be specified in this list:
RSA_WITH_NULL_MD5 RSA_EXPORT_WITH_RC4_40_MD5
RSA_WITH_NULL_SHA RSA_WITH_RC4_128_MD5
RSA_WITH_RC4_128_SHA
RSA_EXPORT_WITH_DES40_CBC_SHA
RSA_WITH_DES_CBC_SHA
RSA_WITH_3DES_EDE_CBC_SHA
308
policies:iiop_tls
If you do not specify the list of cipher suites explicitly, all of the null
encryption ciphers are disabled and all of the non-export strength ciphers
are supported by default.
mechanism_policy:protocol_version
This IIOP/TLS-specific policy overides the generic
policies:mechanism_policy:protocol_version policy.
Specifies the list of protocol versions used by a security capsule (ORB
instance). Can include one or more of the following values:
TLS_V1
SSL_V3
SSL_V2V3 (Deprecated)
The default setting is SSL_V3 and TLS_V1.
For example:
policies:iiop_tls:mechanism_policy:protocol_version = ["TLS_V1",
"SSL_V3"];
The SSL_V2V3 value is now deprecated. It was previously used to facilitate
interoperability with Orbix applications deployed on the z/OS platform. If you
have any legacy configuration that uses SSL_V2V3, you should replace it with
the following combination of settings:
policies:iiop_tls:mechanism_policy:protocol_version = ["SSL_V3",
"TLS_V1"];
policies:iiop_tls:mechanism_policy:accept_v2_hellos = "true";
server_address_mode_policy:local_domain
(Java only) When this policy is set, the iiop_tls plug-in reads this policy’s
value instead of the
policies:iiop:server_address_mode_policy:local_domain policy’s value.
309
APPENDIX A | Security Configuration
server_address_mode_policy:local_hostname
(Java only) When this policy is set, the iiop_tls plug-in reads this policy’s
value instead of the
policies:iiop:server_address_mode_policy:local_hostname policy’s
value.
server_address_mode_policy:local_hostname specifies the hostname
advertised by the locator daemon/configuration repository, and listened on
by server-side IIOP.
Some machines have multiple hostnames or IP addresses (for example,
those using multiple DNS aliases or multiple network cards). These
machines are often termed multi-homed hosts. The local_hostname
variable supports these type of machines by enabling you to explicitly
specify the host that servers listen on and publish in their IORs.
For example, if you have a machine with two network addresses
(207.45.52.34 and 207.45.52.35), you can explicitly set this variable to
either address:
policies:iiop:server_address_mode_policy:local_hostname =
"207.45.52.34";
server_address_mode_policy:port_range
(Java only) When this policy is set, the iiop_tls plug-in reads this policy’s
value instead of the
policies:iiop:server_address_mode_policy:port_range policy’s value.
server_address_mode_policy:port_range specifies the range of ports that
a server uses when there is no well-known addressing policy specified for
the port.
310
policies:iiop_tls
server_address_mode_policy:publish_hostname
When this policy is set, the iiop_tls plug-in reads this policy’s value
instead of the
policies:iiop:server_address_mode_policy:publish_hostname policy’s
value.
server_address_mode-policy:publish_hostname specifes whether IIOP
exports hostnames or IP addresses in published profiles. Defaults to false
(exports IP addresses, and does not export hostnames). To use hostnames
in object references, set this variable to true, as in the following file-based
configuration entry:
policies:iiop:server_address_mode_policy:publish_hostname=true
server_version_policy
When this policy is set, the iiop_tls plug-in reads this policy’s value
instead of the policies:iiop:server_version_policy policy’s value.
server_version_policy specifies the GIOP version published in IIOP
profiles. This variable takes a value of either 1.1 or 1.2. Orbix servers do not
publish IIOP 1.0 profiles. The default value is 1.2.
target_secure_invocation_policy:requires
This policy overides
policies:target_secure_invocation_policy:requires for the iiop_tls
plugin.
Specifies the minimum level of security required by a server. The value of
this variable is specified as a list of association options—see the Orbix
Security Guide for more details about association options.
In accordance with CORBA security, this policy cannot be downgraded
programmatically by the application.
311
APPENDIX A | Security Configuration
target_secure_invocation_policy:supports
This policy overides
policies:target_secure_invocation_policy:supports for the iiop_tls
plugin.
Specifies the maximum level of security supported by a server. The value of
this variable is specified as a list of association options—see the Orbix
Security Guide for more details about association options.
This policy can be upgraded programmatically using either the QOP or the
EstablishTrust policies.
tcp_options_policy:no_delay
When this policy is set, the iiop_tls plug-in reads this policy’s value
instead of the policies:iiop:tcp_options_policy:no_delay policy’s
value.
tcp_options_policy:no_delay specifies whether the TCP_NODELAY option
should be set on connections. Defaults to false.
tcp_options_policy:recv_buffer_size
When this policy is set, the iiop_tls plug-in reads this policy’s value
instead of the policies:iiop:tcp_options_policy:recv_buffer_size
policy’s value.
tcp_options_policy:recv_buffer_size specifies the size of the TCP
receive buffer. This variable can only be set to 0, which coresponds to using
the default size defined by the operating system.
312
policies:iiop_tls
tcp_options_policy:send_buffer_size
When this policy is set, the iiop_tls plug-in reads this policy’s value
instead of the policies:iiop:tcp_options_policy:send_buffer_size
policy’s value.
tcp_options_policy:send_buffer_size specifies the size of the TCP send
buffer. This variable can only be set to 0, which coresponds to using the
default size defined by the operating system.
trusted_ca_list_policy
This policy overides the policies:trusted_ca_list_policy for the
iiop_tls plugin.
Contains a list of filenames (or a single filename), each of which contains a
concatenated list of CA certificates in PEM format. The aggregate of the CAs
in all of the listed files is the set of trusted CAs.
For example, you might specify two files containing CA lists as follows:
policies:trusted_ca_list_policy =
["ASPInstallDir/asp/6.0/etc/tls/x509/ca/ca_list1.pem",
"ASPInstallDir/asp/6.0/etc/tls/x509/ca/ca_list_extra.pem"];
The purpose of having more than one file containing a CA list is for
administrative convenience. It enables you to group CAs into different lists
and to select a particular set of CAs for a security domain by choosing the
appropriate CA lists.
313
APPENDIX A | Security Configuration
principal_sponsor
The principal_sponsor namespace stores configuration information to be
used when obtaining credentials. Orbix provides an implementation of a
principal sponsor that creates credentials for applications automatically. The
principal sponsor automatically calls the authenticate() operation on the
PrincipalAuthenticator object after determining the data to supply.
Use of the PrincipalSponsor is disabled by default and can only be enabled
through configuration.
The PrincipalSponsor represents an entry point into the secure system. It
must be activated and authenticate the user, before any application-specific
logic executes. This allows unmodified, security-unaware applications to
have Credentials established transparently, prior to making invocations.
use_principal_sponsor
use_principal_sponsor specifies whether an attempt is made to obtain
credentials automatically. Defaults to false. If set to true, the following
principal_sponsor variables must contain data in order for anything to
actually happen.
314
principal_sponsor
auth_method_id
auth_method_id specifies the authentication method to be used. The
following authentication methods are available:
pkcs12_file The authentication method uses a PKCS#12 file.
Not supported in z/OS.
security_label z/OS only. The authentication data is specified by
supplying the name of a label in a key ring.
For example, you can select the pkcs12_file authentication method as
follows:
principal_sponsor:auth_method_id = "pkcs12_file";
auth_method_data
auth_method_data is a string array containing information to be interpreted
by the authentication method represented by the auth_method_id.
For the pkcs12_file authentication method, the following authentication
data can be provided in auth_method_data:
filename A PKCS#12 file that contains a certificate chain and
private key—required.
password A password for the private key—optional.
It is bad practice to supply the password from
configuration for deployed systems. If the password is not
supplied, the user is prompted for it.
password_file The name of a file containing the password for the private
key—optional.
This option is not recommended for deployed systems.
For the security_label authentication method on z/OS, the following
authentication data can be provided in auth_method_data:
label The name of a label in a key ring.
315
APPENDIX A | Security Configuration
principal_sponsor:auth_method_data =
["filename=c:\users\bob\bob.p12", "password=bobpass"];
316
principal_sponsor
callback_handler:ClassName
callback_handler:ClassName specifies the class name of an interface that
implements the interface com.iona.corba.tls.auth.CallbackHandler. This
variable is only used for Java clients.
login_attempts
login_attempts specifies how many times a user is prompted for
authentication data (usually a password). It applies for both internal and
custom CallbackHandlers; if a CallbackHandler is supplied, it is invoked
upon up to login_attempts times as long as the PrincipalAuthenticator
returns SecAuthFailure. This variable is only used by Java clients.
317
APPENDIX A | Security Configuration
principal_sponsor:csi
The principal_sponsor:csi namespace stores configuration information to
be used when obtaining CSI (Common Secure Interoperability) credentials.
It includes the following:
• use_existing_credentials
• use_principal_sponsor
• auth_method_data
• auth_method_id
use_existing_credentials
A boolean value that specifies whether ORBs that share credentials can also
share CSI credentials. If true, any CSI credentials loaded by one
credential-sharing ORB can be used by other credential-sharing ORBs
loaded after it; if false, CSI credentials are not shared.
This variable has no effect, unless the
plugins:security:share_credentials_across_orbs variable is also true.
Default is false.
use_principal_sponsor
use_principal_sponsor is a boolean value that switches the CSI principal
sponsor on or off.
If set to true, the CSI principal sponsor is enabled; if false, the CSI
principal sponsor is disabled and the remaining principal_sponsor:csi
variables are ignored. Defaults to false.
318
principal_sponsor:csi
auth_method_data
auth_method_data is a string array containing information to be interpreted
by the authentication method represented by the auth_method_id.
For the GSSUPMech authentication method, the following authentication
data can be provided in auth_method_data:
username The username for CSIv2 authorization. This is optional.
Authentication of CSIv2 usernames and passwords is
performed on the server side. The administration of
usernames depends on the particular security mechanism
that is plugged into the server side see
auth_over_transport:authentication_service.
password The password associated with username. This is optional. It is
bad practice to supply the password from configuration for
deployed systems. If the password is not supplied, the user is
prompted for it.
domain The CSIv2 authentication domain in which the
username/password pair is authenticated.
When the client is about to open a new connection, this
domain name is compared with the domain name embedded
in the relevant IOR (see
policies:csi:auth_over_transport:server_domain_name).
The domain names must match.
Note: If domain is an empty string, it matches any target
domain. That is, an empty domain string is equivalent to a
wildcard.
If any of the preceding data are omitted, the user is prompted to enter
authentication data when the application starts up.
For example, to log on to a CSIv2 application as the administrator user in
the US-SantaClara domain:
principal_sponsor:csi:auth_method_data =
["username=administrator", "domain=US-SantaClara"];
319
APPENDIX A | Security Configuration
When the application is started, the user is prompted for the administrator
password.
auth_method_id
auth_method_id specifies a string that selects the authentication method to
be used by the CSI application. The following authentication method is
available:
GSSUPMech The Generic Security Service Username/Password
(GSSUP) mechanism.
For example, you can select the GSSUPMech authentication method as
follows:
principal_sponsor:csi:auth_method_id = "GSSUPMech";
320
APPENDIX B
ASN.1 and
Distinguished
Names
The OSI Abstract Syntax Notation One (ASN.1) and X.500
Distinguished Names play an important role in the security
standards that define X.509 certificates and LDAP directories.
321
APPENDIX B | ASN.1 and Distinguished Names
ASN.1
Overview The Abstract Syntax Notation One (ASN.1) was defined by the OSI
standards body in the early 1980s to provide a way of defining data types
and structures that is independent of any particular machine hardware or
programming language. In many ways, ASN.1 can be considered a
forerunner of the OMG’s IDL, because both languages are concerned with
defining platform-independent data types.
ASN.1 is important, because it is widely used in the definition of standards
(for example, SNMP, X.509, and LDAP). In particular, ASN.1 is ubiquitous
in the field of security standards—the formal definitions of X.509 certificates
and distinguished names are described using ASN.1 syntax. You do not
require detailed knowledge of ASN.1 syntax to use these security standards,
but you need to be aware that ASN.1 is used for the basic definitions of
most security-related data types.
BER The OSI’s Basic Encoding Rules (BER) define how to translate an ASN.1
data type into a sequence of octets (binary representation). The role played
by BER with respect to ASN.1 is, therefore, similar to the role played by
GIOP with respect to the OMG IDL.
DER The OSI’s Distinguished Encoding Rules (DER) are a specialization of the
BER. The DER consists of the BER plus some additional rules to ensure that
the encoding is unique (BER encodings are not).
References You can read more about ASN.1 in the following standards documents:
• ASN.1 is defined in X.208.
• BER is defined in X.209.
322
Distinguished Names
Distinguished Names
Overview Historically, distinguished names (DN) were defined as the primary keys in
an X.500 directory structure. In the meantime, however, DNs have come to
be used in many other contexts as general purpose identifiers. In the IONA
Security Framework, DNs occur in the following contexts:
• X.509 certificates—for example, one of the DNs in a certificate
identifies the owner of the certificate (the security principal).
• LDAP—DNs are used to locate objects in an LDAP directory tree.
String representation of DN Although a DN is formally defined in ASN.1, there is also an LDAP standard
that defines a UTF-8 string representation of a DN (see RFC 2253). The
string representation provides a convenient basis for describing the structure
of a DN.
323
APPENDIX B | ASN.1 and Distinguished Names
Attribute types The variety of attribute types that could appear in a DN is theoretically
open-ended, but in practice only a small subset of attribute types are used.
Table 13 shows a selection of the attribute types that you are most likely to
encounter:
C countryName 2 2.5.4.6
STREET streetAddress
DC domainComponent
UID userid
324
Distinguished Names
325
APPENDIX B | ASN.1 and Distinguished Names
326
APPENDIX C
Association
Options
This appendix describes the semantics of all the association
options that are supported by Orbix.
327
APPENDIX C | Association Options
Table of association options Table 14 shows how the options affect client and target policies:
Integrity The client The client The target supports The target requires
supports integrity requires integrity protected messages to be
protected messages to be messages. integrity protected.
messages. integrity
protected.
328
Association Option Semantics
Confidentiali The client The client The target supports The target requires
ty supports requires confidentiality messages to be
confidentiality messages to be protected confidentiality
protected confidentiality messages. protected.
messages. protected.
DetectReplay The client can The client The target can The target requires
detect replay of requires detection detect replay of detection of
requests (and of message requests (and message replay.
request replay. request fragments).
fragments).
DetectMisorde The client can The client The target can The target requires
ring detect sequence requires detection detect sequence detection of
errors of requests of message errors of requests message
(and request mis-sequencing. (and request mis-sequencing.
fragments). fragments).
EstablishTrus The client is (This option is The target is The target requires
tInClient prepared to invalid). capable of establishment of
authenticate its authenticating the trust in the client’s
identity to the client. identity.
target.
329
APPENDIX C | Association Options
330
APPENDIX D
SSL/TLS Sample
Configurations
This appendix provides some SSL/TLS sample configurations
that you can use as a template for configuring your own
applications.
331
APPENDIX D | SSL/TLS Sample Configurations
Client configurations The following client configurations are included in Example 20:
• demos.tls.secure_client_with_cert
• demos.tls.semi_secure_client_with_cert
Server configurations The following server configurations are included in Example 20:
• demos.tls.secure_server_no_client_auth
• demos.tls.secure_server_enforce_client_auth
• demos.tls.semi_secure_server_no_client_auth
• demos.tls.semi_secure_server_enforce_client_auth
Sample configurations Example 20 shows a variety of sample SSL/TLS configurations that you can
copy or adapt for use in your own applications.
policies:target_secure_invocation_policy:requires =
["Confidentiality", "EstablishTrustInClient"];
policies:target_secure_invocation_policy:supports =
332
SSL/TLS Sample Configurations on z/OS
policies:client_secure_invocation_policy:requires =
["Confidentiality", "EstablishTrustInTarget"];
policies:client_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInClient",
"EstablishTrustInTarget"];
secure_client_with_cert
{
policies:client_secure_invocation_policy:requires =
["Confidentiality", "EstablishTrustInTarget"];
policies:client_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInClient",
"EstablishTrustInTarget"];
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_data =
["label=bank_server"];
plugins:systemssl_toolkit:saf_keyring = "ORBXRING";
};
semi_secure_client_with_cert
{
orb_plugins = ["local_log_stream", "iiop_profile",
"giop", "iiop", "iiop_tls"];
policies:client_secure_invocation_policy:requires =
["NoProtection"];
policies:client_secure_invocation_policy:supports =
333
APPENDIX D | SSL/TLS Sample Configurations
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_data =
["label=bank_server"];
plugins:systemssl_toolkit:saf_keyring = "ORBXRING";
};
secure_server_no_client_auth
{
policies:target_secure_invocation_policy:requires =
["Confidentiality"];
policies:target_secure_invocation_policy:supports =
["Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_data =
["label=bank_server"];
plugins:systemssl_toolkit:saf_keyring = "ORBXRING";
};
secure_server_enforce_client_auth
{
policies:target_secure_invocation_policy:requires =
["EstablishTrustInClient", "Confidentiality"];
policies:target_secure_invocation_policy:supports =
["EstablishTrustInClient", "Confidentiality", "Integrity",
"DetectReplay", "DetectMisordering",
"EstablishTrustInTarget"];
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_data =
["label=bank_server"];
plugins:systemssl_toolkit:saf_keyring = "ORBXRING";
};
semi_secure_server_no_client_auth
{
334
SSL/TLS Sample Configurations on z/OS
policies:target_secure_invocation_policy:requires =
["NoProtection"];
policies:target_secure_invocation_policy:supports =
["NoProtection", "Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInTarget"];
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_data =
["label=bank_server"];
plugins:systemssl_toolkit:saf_keyring = "ORBXRING";
};
semi_secure_server_enforce_client_auth
{
orb_plugins = ["iiop_profile", "giop", "iiop",
"iiop_tls", "local_log_stream"];
policies:target_secure_invocation_policy:requires =
["NoProtection"];
policies:target_secure_invocation_policy:supports =
["NoProtection", "Confidentiality", "Integrity", "DetectReplay",
"DetectMisordering", "EstablishTrustInClient",
"EstablishTrustInTarget"];
principal_sponsor:use_principal_sponsor = "true";
principal_sponsor:auth_method_data =
["label=bank_server"];
plugins:systemssl_toolkit:saf_keyring = "ORBXRING";
};
};
...
};
335
APPENDIX D | SSL/TLS Sample Configurations
336
APPENDIX E
Security
Recommendations
This appendix lists some general recommendations for
ensuring the effectiveness of Orbix security.
337
APPENDIX E | Security Recommendations
General Recommendations
List of recommendations The following general recommendations can help you secure your system
using Orbix applications
1. Use SSL security for every application wherever possible.
2. Use the strongest cipher suites available. There is little extra overhead
if you use 128 bit instead of 40 bit encryption for a typical connection.
3. If your application must connect to insecure applications, limit the
aspects of your system that use insecure communications to the
minimum necessary using policies and security aware code.
4. Treat any IOR received from an insecure endpoint as untrustworthy.
Set your policies so that you cannot use insecure IORs accidentally. Set
all communications in your ORBs to be secure by default and use the
appropriate policies to override these where necessary.
5. It is important to remember that the certificates supplied with Orbix are
for demonstration purposes only and must be replaced with a securely
generated set of real certificates before applications can run in a
production environment.
6. The contents of your trusted CA list files must only include CA
certificates that you trust.
7. Do not use passwords in the configuration file. This feature is only a
developer aid.
8. The security of all SSL/TLS programs is only as strong as the weakest
cipher suite that they support. Consider making stronger cipher suites
available as an optional service which may be availed of by
applications with stronger minimum security requirements.
The bad guys will of course choose to use the weakest cipher suites.
9. Depending on the sensitivity of your system an RSA key size greater
than 512 bits might be appropriate. 1024 bit keys are significantly
slower than 512 bit keys but are much more secure.
338
Orbix Services
Orbix Services
No authorization support for Orbix The Orbix services—that is, the locator, the node daemon, the naming
services service, and the interface repository (IFR)—are not to be considered as fully
secured in this release. While they can be configured to use SSL they do not
apply any authorization to operations that clients perform. This still applies,
to a lesser extent, even if the services are configured to only allow secure
connections and to enforce client authentication, because all clients with
trusted client certificates can modify the services at will. That is, the Orbix
services provide no way to distinguish between ordinary users and users
requiring administrative privileges (authorization is not supported by the
services).
339
APPENDIX E | Security Recommendations
340
APPENDIX F
Action-Role
Mapping DTD
This appendix presents the document type definition (DTD) for
the action-role mapping XML file.
Example 21:
341
CHAPTER F | Action-Role Mapping DTD
Action-role mapping elements The elements of the action-role mapping DTD can be described as follows:
<!ELEMENT action-name (#PCDATA)>
Specifies the action name to which permissions are assigned. The
interpretation of the action name depends on the type of application:
♦ CORBA server—for IDL operations, the action name corresponds
to the GIOP on-the-wire format of the operation name (usually the
same as it appears in IDL).
For IDL attributes, the accessor or modifier action name
corresponds to the GIOP on-the-wire format of the attribute
accessor or modifier. For example, an IDL attribute, foo, would
have an accessor, _get_foo, and a modifier, _set_foo.
♦ Artix server—for WSDL operations, the action name is equivalent
to a WSDL operation name; that is, the OperationName from a
tag, <operation name="OperationName">.
<!ELEMENT action-role (action-name, parameter-control*,
role-name+)>
Groups together a particular action and all of the roles permitted to
perform that action.
<!ELEMENT action-role-mapping (server-name, interface+)>
Contains all of the permissions that apply to a particular server
application.
<!ELEMENT allow-unlisted-interfaces (#PCDATA)>
Specifies the default access permissions that apply to interfaces not
explicitly listed in the action-role mapping file. The element contents
can have the following values:
♦ true—for any interfaces not listed, access to all of the interfaces’
actions is allowed for all roles. If the remote user is
unauthenticated (in the sense that no credentials are sent by the
client), access is also allowed.
342
♦ false—for any interfaces not listed, access to all of the interfaces’
actions is denied for all roles. Unauthenticated users are also
denied access.
Default is false.
<!ELEMENT interface (name, action-role+)>
In the case of a CORBA server, the interface element contains all of
the access permissions for one particular IDL interface.
In the case of an Artix server, the interface element contains all of the
access permissions for one particular WSDL port type.
You can also use the wildcard, *, to match any number of contiguous
characters in an interface name.
<!ELEMENT name (#PCDATA)>
Within the scope of an interface element, identifies the interface (IDL
interface or WSDL port type) with which permissions are being
associated. The format of the interface name depends on the type of
application, as follows:
♦ CORBA server—the name element identifies the IDL interface
using the interface’s OMG repository ID. The repository ID
normally consists of the characters IDL: followed by the fully
scoped name of the interface (using / instead of :: as the scoping
character), followed by the characters :1.0. Hence, the
Simple::SimpleObject IDL interface is identified by the
IDL:Simple/SimpleObject:1.0 repository ID.
343
CHAPTER F | Action-Role Mapping DTD
344
The server-name element specifies the configuration scope (that is, the
ORB name) used by the server in question. This is normally the value
of the -ORBname parameter passed to the server executable on the
command line.
You can also use the wildcard, *, to match any number of contiguous
characters in a configuration scope name.
345
CHAPTER F | Action-Role Mapping DTD
346
Index
Symbols and cipher suite constraints 144
#pragma prefix 86 and mechanism policy 134
<action-role-mapping> tag 86, 94 client secure invocation policy, default 130
<allow-unlisted-interfaces> tag 85 compatibility with cipher suites 145
<interface> tag 86 DetectMisordering 221
<name> tag 86 DetectReply 221
<server-name> tag 86, 92 EstablishTrustInClient 62, 77, 155
EstablishTrustInClient, CSIv2 180, 181
EstablishTrustInTarget 152, 155
A IdentityAssertion, CSIv2 201
AccessId credentials attribute 238 NoProtection 65
AccessId security attribute 238 rules of thumb 134
ACL SSL/TLS
<action-role-mapping> tag 86 Confidentiality 128
<allow-unlisted-interfaces> tag 85 DetectMisordering 128
<interface> tag 86 DetectReplay 128
<name> tag 86 EstablishTrustInClient 129
<server-name> tag 86 EstablishTrustInTarget 129
action_role_mapping configuration variable 84 Integrity 128
action-role mapping file 84 NoProtection 128
action-role mapping file, example 85 setting 126
centralized 88, 91 target secure invocation policy, default 132
ClientAccessDecision interface 90, 92, 97 Asymmetric cryptography 45
com.iona.isp.authz.adapters property 93 AttributeList type 237
localized 89 attribute service policy 200
plugins:gsp:acl_policy_data_id variable 95, 96 AttributeService policy data 223
plugins:gsp:action_role_mapping_file variable 89 Attribute value assertions, See AVA
plugins:gsp:authorization_policy_enforcement_poi authenticate() operation 227, 228
nt variable 93 Authentication 42, 44
plugins:gsp:authorization_policy_store_type authentication
variable 93 and mechanism policy 155
action_role_mapping configuration variable 84 caching of credentials 80
action-role mapping file CSIv2, client configuration 189
<action-role-mapping> tag 86 CSIv2, requiring 180
<allow-unlisted-interfaces> tag 85 CSIv2, sample configuration 188
<interface> tag 86 CSIv2, server configuration 191
<name> tag 86 CSIv2 client-side policy 222
<server-name> tag 86 CSIv2 server-side policy 222
CORBA EstablishTrustPolicy 219
configuring 84 GSSUP mechanism
example 85 invocation credentials 220
application-level security 166 iSF
ASN.1 100 process of 69
association options
347
INDEX
348
INDEX
349
INDEX
350
INDEX
351
INDEX
352
INDEX
353
INDEX
354
INDEX
355
INDEX
356
INDEX
CSIv2 Q
Java example 233 QOP enumerated type 218
definition 227 QOP policy
security capsule 227 restricting cipher suites 218
SSL/TLS QOPPolicy policy 218
C++ example 230 and interaction between policies 221
using 226 quality of protection 218
principal sponsor
CSIv2
client configuration 71 R
CSIv2, description 184 RACDCERT command 109, 111
CSIv2 and client authentication token 177 RACF 108
SSL/TLS allocating datasets 109
definition 158 creating certificates 114
enabling 63 importing certificates 109, 111
SSL/TLS, disabling 61 RACF certificates
principal_sponsor:csi:auth_method_data 319 password 112
principal_sponsor:csi:auth_method_data RACF key ring
configuration variable 185, 186 and Orbix configuration 115
principal_sponsor:csi:use_method_id configuration racf_keyring configuration variable 115
variable 184 RC4 48
principal_sponsor:csi:use_principal_sponsor 318 RC4 encryption 141
principal_sponsor:csi:use_principal_sponsor rebind policy
configuration variable 184, 186 interaction with target credentials 243
principal_sponsor Namespace Variables 314 received credentials
principal sponsors Current object 247
CSIv2, disabling 186 definition 237
CSIv2, enabling 184 identity assertion and 197
SSL/TLS, and CSIv2 179 retrieving 246
PrincipleAuthenticator interface 228, 231, 236 C++ example 247
principle_sponsor:auth_method_data 315 SSL/TLS
principle_sponsor:auth_method_id 315 parsing 248
principle_sponsor:callback_handler:ClassName 317 ReceivedCredentials interface 171, 237
principle_sponsor:login_attempts 317 Orbix-specific 238
principle_sponsor:use_principle_sponsor 314 parsing received credentials 248
Privacy 44 recv_buffer_size 312
private key remote method invocation, see RMI
in PKCS#12 file 157 Replay detection 128
Protocol, TLS handshake 45 repository ID
protocol version #pragma prefix 86
interoperability with OS/390 142 in action-role mapping file 86
protocol_version configuration variable 142 required security features 217
_Public credentials attribute 238 Rivest Shamir Adleman
public key 253 see RSA
Public key cryptography 45 Rivest Shamir Adleman cryptography. See RSA
public key encryption 140 cryptography
public keys 101 RMI/IIOP
_Public security attribute 238 and CSIv2 166
publish_hostname 311 root certificate directory 106
357
INDEX
358
INDEX
359
INDEX
V
validate_cert_chain() operation 260
W
well-known addressing policy 67
WellKnownAddressingPolicy policy 66
X
X.509
and PKCS#12 file 157
certificates. See certificates
Extension interface 254
ExtensionList interface 254
extensions 254
public key encryption 140
v3 extensions 253, 254
X.509 certificate
contents 253
definition 100
X.509 certificates 99
X509CertChain interface 263
X509CertificateFactory interface 263
X509Cert interface 263
360