MokaByte 91- Dicembre 2004 
IIOP over SSL
I parte: la teoria
di

S. Rossini
A. D'Angeli


Negli articoli dedicati all'integrazione di applicazioni Enterprise (vedere [MOKA_INT1] e successivi) si era visto come permettere la comunicazione con EJB sfruttando l'interoperabilità del protocollo IIOP.
In questo articolo si vedrà come esporre, in modo sicuro, oggetti accessibili da remoto attra-verso il protocollo IIOP over SSL.


Introduzione
In [MOKA_INT2] si è visto come l'integrazione Object/RPC consenta l'invocazione remota dei metodi degli oggetti distribuiti (EJB, CORBA, DCOM, …). Si è visto come sia possibile utilizzare RMI-IIOP al posto dei vari protocolli proprietari (JNP di JBoss o T3 di Weblogic, …) in modo da permettere la comunicazione in modo interoperabile (ossia vendor independent).
In particolare si è visto in [MOKA_INT3] come, esportando un EJB con protocollo IIOP, sia possibile invocarlo da un client Java che utilizza l'ORB Jacorb (vedere[JACORB]) oppure l'ORB Sun o anche da un client CORBA C++ che utilizza l'ORB MICO (vedere [MICO]).
Il servizio di business utilizzato nell'esempio è costituito da un semplice EJB Session Stateless Calculator che espone il seguente metodo di business:

public interface Calculator extends EJBObject {
public int getStringLength(String a) throws RemoteException;
}

con le seguente semplice implementazione che ritorna la lunghezza della stringa ricevuta come parametro:

public int getStringLength(String a) {
return a.length();
}

Con la versione 3.2.x di JBoss (che integra l'ORB di JacORB) per esportare un EJB in IIOP bisogna specificare nel file DD l'attributo <invoker-proxy-binding-name> con valore iiop.

<session>
<ejb-name> CalculatorBean </ejb-name>
<jndi-name> MokaCalculator </jndi-name>
<configuration-name>Standard Stateless SessionBean</configuration-name>
<invoker-bindings>
<invoker>
<invoker-proxy-binding-name>iiop</invoker-proxy-binding-name>
</invoker>
</invoker-bindings>
</session>

Il client Java per invocare l'EJB crea un contesto JNDI, effettua la lookup e narrow della Home interface, crea una Remote interface per poi invocare il metodo di business getStringLength():

public class CalculatorTestClient {
. . . . .
public void test(String jndiName) {
try {
Context ctx = new InitialContext();
//look up jndi name
Object ref = ctx.lookup(jndiName);
Object obj = PortableRemoteObject.narrow(ref, CalculatorHome.class);
CalculatorHome home = (CalculatorHome) obj;
Calculator calculator = home.create();
System.out.println("Risultato: " + calculator.getStringLength("Ciao a tutti!"));
……

Il client può quindi localizzare l'EJB mediante IIOP specificando le seguenti proprietà JNDI:

  • java.naming.factory.initial=com.sun.jndi.cosnaming.CNCtxFactory
  • java.naming.provider.url= corbaloc:iiop:<<SERVER>>:3528/JBoss/Naming/root

Con queste proprietà impostate, il client potrà utilizzare le API JNDI come un Wrapper per accedere al servizio di CORBA Naming Service fornito dal server che si desidera contattare.
Per quanto riguarda l'implementazione di ORB utilizzata, per default il client utilizza l'implementazione ORB di SUN del J2SDK: la classe com.sun.corba.se.internal.iiop.ORB.

E' però possibile fare in modo che il client utilizzi un diverso ORB impostando le proprietà org.omg.CORBA.ORBClass e org.omg.CORBA.ORBSingletonClass.
Ad esempio per utilizzare l'ORB di JacORB (sempre a parità di bytecode!) si deve includere nel classpath il jar di JacORB e specificare le seguenti proprietà:

  • Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
  • Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton

Per effettuare la prova con Jacorb è inoltre necessario configurare il Security Manager sul client specificando le proprietà di sicurezza java.security.manager e java.security.policy al fine di permettere al network classloader lo scaricamento degli stub (di default il network classloader è disabilitato causando un ClassCastException con il PortableRemoteObject.narrow())

Oltre a consentire l'interoperabilità tra client Java che utilizzano l'ORB Sun o l'ORB Jacorb, i benefici dell'utilizzo di IIOP si sono visti in modo chiaro utilizzando un client C++ che, mediante l'ORB MICO, è in grado di comunicare con l'EJB Calculator installato su JBoss.


Figura 1: Interoperabilità IIOP

L'esempio che si è fin qui richiamato, che sintetizza quanto descritto in [MOKA_INT3] non prende in considerazione alcuna istanza di sicurezza nella comunicazione fra il client e l'oggetto remoto: si assume infatti che il livello di sicurezza sia a monte dell'EJB e che le interazioni fra oggetti Corba avvengano entro un ambiente protetto da intrusioni e intercettazioni da parte di estranei.
Generalmente per fare questo si installa un Firewall in ingresso al sistema con un'unica porta aperta (la porta 80) del Web Server e si utilizza il protocollo HTTPS per la comunicazione tra la zona demilitarizzata e la zona sicura.

In questo modo l'EJB potrà essere utilizzato solo da una risorsa Web previa opportuna autenticazione e autorizzazione.


Figura 2: Sicurezza lato Web

In questo scenario dunque, gli EJB sono esposti esclusivamente all'interno della Zona Privata, che è quindi sicura. Tuttavia, potrebbe esserci la necessità di rendere accessibili direttamente gli EJB (ad esempio per comunicazioni B2B) o avere esigenze di proteggere l'accesso ad alcuni EJB da usi impropri e/o fraudolenti che potrebbero provenire dall'interno della stessa Zona Privata o da eventuali violazioni della sicurezza a monte.


Figura 3: Scenario B2C e B2B


Per venire incontro a queste esigenze, è necessario dotare il protocollo IIOP di un livello di sicurezza.
Introduzione a IIOP/SSL

Fino a qualche anno fa, non esistevano standard che permettessero interoperabilità sicura nel mondo CORBA e tanto meno quando fossero coinvolti componenti EJB. Da un po' di tempo la situazione è fortunatamente più chiara: per quanto riguarda il mondo CORBA, esiste oggi una specifica denominata Common Secure Interoperability (CSI) che definisce precisi livelli di conformità dei vari vendor ai requisiti di interoperabilità sicura. Tale specifica è giunta ora alla seconda versione (denominata CSIv2) ed è descritta nella specifica ufficiale di CORBA 3.02 (vedere [CORBA3.02_SPEC] Capitolo 24). CSIv2 prevede 3 livelli di conformità, che i vari vendor possono supportare: dal livello zero (CVIv2Lev0) che è quello meno stringente in quanto pone meno requisiti e supporta meno funzionalità, fino al livello 2 che è il più ricco e completo (vedere [DF_CSIV2]). Semplificando molto, troviamo:

  • CSIv2- Lev. 0 prevede il solo supporto all'interoperabilità sicura senza alcun meccanismo di delega
  • CSIv2- Lev. 1 richiede anche il supporto alla delega, ma senza possibilità di imporre restrizioni al potere di delega che si conferisce
  • CSIv2- Lev. 2 infine prevede oltre a quanto richiesto dal Livello 1 anche il supporto per un controllo più fine del potere di delega che si conferisce

Per spiegare il meccanismo della delega dei privilegi, facciamo riferimento ad un esempio. Supponiamo di avere un oggetto client che invoca, un oggetto Intermediate che infine invoca e infine un oggetto target. L'oggetto client si presenterà all'intermediate con le proprie credenziali (identità, password, certificati...). Quando l'Intermediate invoca a sua volta l'oggetto Target può presentarsi con le proprie credenziali (e in questo caso vuol dire che non si sta utilizzando la delega) oppure può presentarsi con le credenziali del client (in tutto o in parte) e questo richiede che il client gli abbia delegato le proprie credenziali.

E' importante osservare che la conformità al supporto CSIv2 - almeno al livello 0 - è un requisito delle specifiche J2EE a partire dalla versione 1.3 (vedere [EJB2.0] - par 19.8.2). Quindi un AS certificato conforme a J2EE 1.3 deve fornire il supporto per l'interoperabilità sicura in conformità alle specifiche CSIv2.

Esistono due architetture di protocolli che consentono di introdurre i requisiti di sicurezza nelle transazioni IIOP:

  • SSLIOP: utilizza SSL/TLS come trasporto sicuro in luogo del semplice trasporto TCP. E' oggi l'approccio maggiormente utilizzato.
  • SECIOP: è più complesso, ma più versatile in quanto può utilizzare diversi meccanismi di sicurezza (GSS-UP / Kerberos / ECMA-CSI).

In ambedue i casi, al di sopra del layer di trasporto sicuro, CSIv2 prevede in aggiunta un servizio Corba apposito denominato SAS (Secure Attribute Service) che consente di definire e trasmettere tra oggetti Corba informazioni inerenti le credenziali, i privilegi, i ruoli ecc. Tale servizio ha anche lo scopo di supplire ad eventuali deficienze del trasporto sicuro (ad esempio: SSL non prevede - come vedremo presto - la possibilità che sia il client a richiedere obbligatoriamente la propria autenticazione.
La nostra trattazione e le prove pratiche che eseguiremo si concentreranno sull'uso di SSLIOP.
Introduzione a SSL.
SSL è un protocollo che fornisce uno strato di estensioni alla suite standard TCP/IP in modo da aggiungere funzionalità inerenti la sicurezza.
Nello schema che descrive lo stack di protocolli della suite, il livello Secure Socket Layer (SSL) occupa il posto compreso tra il trasporto standard TCP (affidabile ma non "sicuro") ed il livello applicativo (HTTP, NNTP, LDAP,…).


Figura 4 : TCP/IP Stack & SSL


Le problematiche di sicurezza affrontate in SSL sono le seguenti:

  • Riservatezza: Evitare che estranei possano leggere il contenuto della trasmissione
  • Autenticazione: ovvero come avere la garanzia che la controparte con cui si interagisce sia effettivamente chi dichiara di essere
  • Integrità del messaggio: evitare che un attacker possa modificare il contenuto della trasmissione

Per raggiungere i tre obiettivi sopra descritti, SSL si avvale di altrettanti meccanismi:

  • La Crittografia a chiave segreta (o simmetrica): viene impiegata per ottenere la privacy nella comunicazione. Possono essere utilizzati diversi algoritmi quali ad esempio DES o RC4 (vedere [SEC_ALG]).
  • La Crittografia a chiave pubblica (o asimmetrica): viene utilizzata al duplice scopo di ottenere un canale sicuro attraverso il quale permettere lo scambio della chiave segreta di sessione e per permettere l'autenticazione delle controparti.
  • Funzioni di Hash sicure: quali MD5, SHA, vengono impiegate per calcolare una sorta di checksum sul messaggio da trasmettere denominato Message Authentication Code (MAC). Il MAC viene trasmesso contestualmente al messaggio; il ricevente ricalcola il MAC e lo confronta con quello trasmesso: se si rileva una differenza, il messaggio è stato manomesso (tampered).

 

Autenticazione
Per quanto riguarda le problematiche di autenticazione, bisogna distinguere tra

  • Autenticazione del Target
  • Autenticazione del Client

L'autenticazione del target, nell'utilizzo classico di SSL (ad esempio, abbinato con HTTP nelle applicazioni Web: HTTPS) è quella che riveste la maggior importanza ed interesse. Si tratta della possibilità di essere certi che quando si invoca un Server Remoto (il Target) chi ci risponde sia effettivamente quello che ci aspettiamo. Si pensi ad esempio ad un Sito Web di eCommerce: alla fine della transazione di acquisto il server ci richiederà verosimilmente il numero di carta di credito ed ovviamente noi (il client) vogliamo essere certi che questi nostri dati sensibili non finiscano in mano di malintenzionati.
L'autenticazione del client invece assomiglia di più al caso classico del problema della login: ossia accertarsi che il client che richiede un certo servizio da un Server remoto sia riconosciuto da questo come un'entità autorizzata a fruirne. Nel caso delle applicazioni WEB, questo scenario si incontra quando si vuole riservare l'accesso ad una zona particolare di un Sito soltanto a particolari client (i Browser in possesso delle opportune credenziali).
Sicuramente in uno scenario di comunicazioni diretta fra oggetti (Business to Business - B2B) possono essere rilevanti ambedue le tipologie di problema, autenticazione del target e del client, cioè una mutua autenticazione.

 

Handshake SLL
Nella figura 5 si riporta lo schema dell'handshake del protocollo SSL.


Figura 5: Handshake SSL


Esaminiamo rapidamente questo schema soffermandoci sui passaggi più rilevanti.
I primi due messaggi scambiati, denominati 'hello' (messaggio '1' e '2'), permettono a client e target di stabilire l'accordo sulle feature di sicurezza. Attraverso questi messaggi vengono concordate la versione di protocollo, il session ID, la suite di cifratura impiegata ed il metodo di compressione.
Successivamente (messaggio '3') il server invia il proprio Certificato. Questo passo è segnato come opzionale perché non in tutte le interazioni SSL è necessariamente mandatoria l'Autenticazione del Target.
Analogamente al passo '7' vediamo il client inviare il proprio certificato: anche questo passo può essere omesso, qualora non sia prevista l'autenticazione del client. Nel caso di SSL, è sempre e solo il Target che decide se sia necessario o meno richiedere l'autenticazione del client: se questa è richiesta, il target emette il messaggio 4 (Request Client Certificate) ed il client dovrà a sua volta inviare il proprio certificato per permettere al Target di autenticarlo.

 

Crittografia a chiave pubblica in SSL
Come si è accennato, il protocollo SSL si basa su un'infrastruttura a chiave pubblica (PKI) per il duplice scopo di autenticare le controparti e permettere lo scambio sicuro delle chiavi di sessione. Questo meccanismo prevede che ogni partecipante alla comunicazione si doti di una coppia di chiavi, distinte ma correlate: una pubblica ed una privata. La chiave privata viene tenuta gelosamente custodita e mai rivelata ad estranei; viceversa, la chiave pubblica corrispondente può - anzi deve - essere liberamente distribuita. Una caratteristica comune a molti algoritmi a chiave pubblica (ad esempio RSA) è che i messaggi crittografati con la chiave pubblica possono essere decrittati solo con la chiave privata corrispondente e viceversa. Vedremo ora attraverso degli esempi che in effetti per ottenere la riservatezza del canale di trasmissione si adopera la chiave pubblica per crittografare il messaggio e la privata per decrittarli. Ma vedremo anche che grazie alla proprietà di simmetria sopra citata, la chiave privata può essere usata per asserire la propria identità e la corrispondente chiave pubblica per verificarla.
Esamineremo in particolare tre scenari che dimostrano separatamente gli impieghi della PKI che avvengono in modo combinato nelle interazioni SSL.

 

Riservatezza (senza autenticazione)
Supponiamo che due controparti Alice e Bob debbano scambiare un messaggio in modo sicuro. Ciascuno avrà la propria coppia di chiavi pubblica e privata. Quando Alice vuole trasmettere un messaggio a Bob, usa la chiave pubblica di Bob (liberamente accessibile), codifica con essa il messaggio e lo trasmette. Quando Bob riceve il messaggio, userà la propria chiave privata per leggerlo. Poiché solo Bob possiede la sua chiave privata, nessun altro potrà aver letto il messaggio. Con questo meccanismo si è così conseguito un canale che tutela la riservatezza delle informazioni trasmesse. Il motivo per cui in SSL non si crittografino tutti i messaggi con questo meccanismo ma venga usato solo per scambiare le chiavi di sessione è dovuto alla sua relativa pesantezza dal punto di vista computazionale. E' quindi conveniente adottare la cifratura simmetrica (ossia basata su un'unica chiave segreta concordata tra le parti) per cifrare in modo efficiente i messaggi.
Per combinare il meccanismo di cifratura a chiave pubblica con quello a chiave simmetrica. Bob dovrà procedere in questo modo:

  1. Preparare il messaggio
  2. cifrare il messaggio con le tecniche di cifratura simmetrica attraverso una chiave di sessione usata una sola volta
  3. cifrare la chiave di sessione con la chiave pubblica di Alice
  4. accludere la chiave di sessione cifrata al messaggio ed inviare il tutto ad Alice


Figura 6
: Riservatezza (senza autenticazione)

 

Autenticazione (senza riservatezza)
Vedremo ora una diversa modalità di utilizzo della PKI, volta allo scopo di dare garanzia all'interlocutore della nostra identità. Supponiamo quindi che Bob voglia inviare ad Alice un messaggio volendo assicurare Alice che il mittente è proprio lui e non un impostore. Tale messaggio potrebbe essere letto anche da altri utenti della rete per cui non dovrà contenere dati sensibili. In questo scenario Bob spedirà ad Alice due copie di tale messaggio: una in chiaro ed una crittografata con la propria chiave privata. Quando Alice riceve il messaggio, decifra la parte crittografata utilizzando la chiave pubblica di Bob: se ritrova il messaggio in chiaro inviato, dedurrà che il mittente non può essere stato che Bob, in quanto nessun altro avrebbe potuto cifrarlo in quel modo, non possedendo la sua chiave privata. Quindi, il messaggio in chiaro, abbinato a quello codificato con la chiave privata, funge da firma digitale. Così si è visto in questo scenario come la PKI possa essere impiegata per verificare l'identità di una controparte.


Figura 7: Autenticazione (senza riservatezza)

 

Distribuzione delle chiavi pubbliche
Resta ora da risolvere un problema pratico: come fa Alice ad entrare in possesso della chiave pubblica di Bob? Il metodo più sicuro sarebbe certamente che sia Bob stesso a consegnarla ad Alice di persona, ma di certo questa strada non è affatto pratica e per di più presuppone che Alice sia in grado di riconoscere Bob (il che non è sempre possibile o meglio richiede un ulteriore meccanismo di verifica dell'identità). Un ulteriore difficoltà è data dal fatto che se Alice desidera comunicare con molte controparti, dovrà dotarsi di un archivio di chiavi pubbliche considerevole, ciascuna delle quali le sarà stata fornita dal rispettivo interlocutore. Un tale vasto archivio di chiavi pubbliche rappresenta un problema di gestione notevole anche perché un'entità che oggi è considerata fidata può non esserlo più domani.
La soluzione a queste difficoltà risiede ancora una volta nell'utilizzo della crittografia a chiave pubblica: Bob provvede a spedire, nel corso dello handshake SSL, la propria chiave pubblica entro un apposito messaggio detto certificato che sarà stato siglato con la firma digitale di una Certification Authority (CA) quale Verisign e serve appunto ad attestare la bontà della chiave pubblica contenuta Queste CA sono entità fidate e riconosciute a livello internazionale e le loro public Key sono normalmente preinstallate nei pacchetti software che utilizzano SSL (ad esempio i Browser Internet). Nella terminologia di SSL, un repository di chiavi pubbliche viene denominato trustStore, in quanto possedere la chiave pubblica di qualcuno vuol dire in sostanza ritenere fidata (trusted) quella controparte. La JVM per default utilizza come trustore contenente le chiavi pubbliche delle CA il file %JAVA_HOME%\jre\lib\security\cacerts.
Quindi Alice è in grado di riconoscere che la firma digitale apposta al certificato proviene da una CA ed è pertanto attendibile. Poiché la CA è fidata, Alice può contare sulla bontà della chiave pubblica contenuta nel certificato.
In definitiva, i certificati rappresentano un modo pratico per distribuire le chiavi pubbliche. Il formato dei certificati utilizzati nella pratica è descritto nella raccomandazione X.509 (vedere [RFC_X509]).

 

Certificati selfsigned
In generale, i certificati firmati dalle CA si pagano. La procedura di acquisto comporta una verifica diretta dell'identità dell'acquirente da parte della Certification Authority. Benché sia possibile ottenere gratuitamente un certificato di prova da una CA per un periodo limitato abbiamo preferito basare le nostre prove creando dei certificati selfsigned. Con questo meccanismo, chiaramente adatto solo alla sperimentazione e non alle situazioni reali, il possessore della chiave pubblica fa anche le veci della CA e firma il suo stesso certificato. Per quanto abbiamo detto, questa configurazione richiede che, chi vuole interoperare con il possessore di un certificato selfsigned, dovrà specificare un truststore alternativo che comprenda la chiave pubblica corrispondente, in modo da considerarlo alla stregua di una CA.


Figura 8: Creazione certificate con keytool JDK

 

Abilitare IIOP/SSL su JBoss
Vediamo quindi quali sono gli step necessari per abilitare il trasporto sicuro SSL nell'esposizione di un EJB con JBoss (vedere [JBOSS]). Ovviamente, si farà riferimento alla Server Configuration 'all' di JBoss che è quella che contiene il supporto per l'esposizione attraverso IIOP e quindi i necessari file di configurazione per poter abilitare anche il supporto a IIOP/SSL (vedere [MOKA_INT_3]).
Innanzi tutto è bene precisare che le operazioni necessarie per abilitare l'SSL non richiedono nessuna modifica a livello di sorgente Java.
Vediamo i passi salienti per esporre l'EJB Calculator in modo sicuro con JBoss (verranno descritti in modo dettagliato nel prossimo articolo).
Come primo passo bisogna editare il file <<JBOSS_HOME>>/server/all/deploy/iiop-service.xml e scommentare le sezioni specificate all'inizio del file per abilitare il supporto SSL: si tratta innanzitutto di scommentare l'MBean JaasSecurityDomain

<!-- (uncomment to use IIOP over SSL)
-->
<mbean code="org.jboss.security.plugins.JaasSecurityDomain"
name="jboss.security:service=JaasSecurityDomain,domain=IIOP+SSL">
<constructor>
<arg type="java.lang.String" value="IIOP+SSL"/>
</constructor>
<attribute name="KeyStoreURL">YOURKEYSTORE</attribute>
<attribute name="KeyStorePass">YOURKEYSTOREPASS</attribute>
</mbean>

Al posto delle stringhe YOURKEYSTORE, YOURKEYSTOREPASS, dovrete inserire ri-spettivamente un URL che punti al file di keystore che il server dovrà utilizzare e la relativa password che nel nostro caso sono rispettivamente
'file://C:/mokabyte/moka_iiop_over_ssl/cert/trust_in_target/mokakeystore.ks'e 'alberto'.

Configurato il keystore, si deve procedere a scommentare l'attributo 'SecurityDomain' ed il relativo elemento innestato 'depends' presente nel MBean CorbaORBService nello stesso file

<mbean code="org.jboss.iiop.CorbaORBService"
name="jboss:service=CorbaORB">
<attribute name="ORBClass">org.jacorb.orb.ORB</attribute>
<attribute name="ORBSingletonClass">org.jboss.system.ORBSingleton</attribute>
<attribute name="ORBSingletonDelegate">org.jacorb.orb.ORBSingleton</attribute>
<attribute name="ORBPropertiesFileName">jacorb.properties</attribute>
<attribute name="PortableInterceptorInitializers">
<interceptor-initializers>
<initializer>org.jboss.iiop.codebase.CodebaseInterceptorInitializer</initializer>
</interceptor-initializers>
</attribute>
<!-- (uncomment to use IIOP over SSL)
-->
<attribute name="SecurityDomain">java:/jaas/IIOP+SSL</attribute>
<depends>jboss.security:service=JaasSecurityDomain,domain=IIOP+SSL</depends>
</mbean>

Come secondo passo bisogna editare il file <<JBOSS_HOME>>/server/all/conf/jacorb.properties che contiene i settaggi dell'ORB Jacorb integrato in JBoss.
Dovrete anzitutto impostare la property:

jacorb.security.support_ssl=on (per default è impostata a off)

Poi bisognerà impostare le property seguenti o con valore 20 (EstablishTrustInTarget-Autenticazione del Target), 40 (EstablishTrustInClient-Autenticazione del Client) e 60 (mutual authenticationmutua autenticazione).

Es:
jacorb.security.ssl.client.supported_options=20
jacorb.security.ssl.client.required_options=0
jacorb.security.ssl.server.supported_options=20
jacorb.security.ssl.server.required_options=20

Adesso che è stata attivata la "protezione" sul Server, proviamo quindi a vedere se i client Java utilizzati in precedenza con l'Application Server senza SSL, riescono a collegarsi nuovamente all'Application Server che ha l'SSL abilitato.
Il client fallisce perché il proprio truststore non contiene la chiave pubblica del server contattato. Non è quindi in grado di riconoscere il certificato fornito dal server come valido e pertanto non accetta il dialogo con l'oggetto target.
(org.omg.CORBA.NO_PERMISSION: vmcid: 0x0 minor code: 3 completed: No).


Figura 9: Comunicazione senza certificati


Bisogna quindi procedere a installare e configurare l'opportuno certificato sul client in modo tale che l'handshake SSL vada a buon fine.

Per indicare al client si dovrà prendere il certificato contenuto pub_mokakeystore.ks mediante le proprietà javax.net.ssl.trustStore:

-Djavax.net.ssl.trustStore=C:/mokabyte/moka_iiop_over_ssl/cert/pub_mokakeystore.ks

Lanciando il client otteniamo che la comunicazione avviene con successo.


Figura 10: Comunicazione con certificati

Conclusioni
In questo articolo si è parlato di come sia possibile comunicare con oggetti remoti mediante il protocollo sicuro SSLIOP.
Nel prossimo articolo verranno esemplificati i concetti fino ad ora spiegati.

 

Bibliografia
[MOKA_INT1] S.Rossini: Integrazione di applicazioni Enterprise (I) MokabyteN.71-Aprile 2003
[MOKA_INT2] S.Rossini: Integrazione di applicazioni Enterprise (II) MokabyteN.72-Maggio 2003
[MOKA_INT3] S.Rossini, A. D'Angeli: Integrazione di applicazioni Enterprise (III) Moka-byte N.73-Giugno 2003
[MOKA_INT4] S.Rossini: Integrazione di applicazioni Enterprise (IV) MokabyteN.74-Luglio/Agosto 2003
[MOKA_INT5] S.Rossini, A. D'Angeli: Integrazione di applicazioni Enterprise (V) Moka-byteN.74-Settembre 2003
[MOKA_INT6] S.Rossini : Integrazione di applicazioni Enterprise (VI) MokabyteN.83-Marzo 2004
[MOKA_IIOP-1] S. Rossini: "RMI-IIOP I parte", Mokabyte N.44, Settembre 2000
[MOKA_IIOP-2] S. Rossini: "RMI-IIOP II parte", Mokabyte N.45, Ottobre 2000
[MOKA_IIOP-3] G. Puliti: "RMI over IIOP", Mokabyte N.70, Gennaio 2003
[CORBA3.02_SPEC] http://www.omg.org/technology/documents/corba_spec_catalog.htm
[DF_CSIV2] Don Flinn: CSIv2 Presentation
http://www.omg.org/news/meetings/workshops/presentations/
docsec_2001_present/3-3%20Flinn%202_CSIv2.pdf
[SSL_SPEC] SSL 3.0 SPECIFICATION: http://wp.netscape.com/eng/ssl3
[MODSSL] http://www.modssl.org/docs/2.8/ssl_intro.html
[EJB-2.0] http://java.sun.com/products/ejb/docs.html
[SEC_ALG] http://www.ssh.fi/support/cryptography/algorithms
[RFC_X509] RFC 2459 - Internet X.509 Public Key Infrastructure Certificate and CRL Profile
[JBOSS] http://www.jboss.org
[JACORB] http:// www.jacorb.org

 


MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it