Afficher les derniers auteurs
1 Mise en place d'un transport sécurisé (SSL) pour les services web Adélia Studio.
2
3 La configuration de la consommation d'un service web avec Adélia Studio s'appuie sur le fichier cfgWebServices.xml.
4 Dans un contexte d'exécution C/Windows, il est possible de renseigner le nom d'un fichier certificat au format .pem.
5 Dans un contexte d'exécution Java, il est possible de renseigner le nom d'un fichier (keystore) au format .jks ou également (à partir d'Adélia Studio V12 PTF04) un fichier .pem.
6
7 Note : Depuis la version d'Adélia Studio 12 PTF04, la connexion SSL est établie automatiquement en se basant sur le fichier %adeliws%/certifs/cacert.pem pour un contexte C/Windows et
8 sur le fichier %java_home%/lib/jre/security/cacerts pour un contexte java.
9 Le fichier %adeliws%/certifs/cacert.pem (C/windows) peut - si nécessaire - être mis à jour à partir du lien suivant : [[https://curl.haxx.se/docs/caextract.html>>url:https://curl.haxx.se/docs/caextract.html]]
10
11
12 Si la connexion échoue, il est possible d'activer le mode mode ServerCertAuto : <Transport><SSLCertificate><ServerCertAuto>true</ServerCertAuto></SSLCertificate></Transport>
13 pour forcer la récupération d'un certificat depuis le serveur (utilisation dans le cas d'un certificat auto-signé).
14
15 (((
16 == Guide détaillé pour la création de fichiers certificats spécifiques ==
17 )))
18
19 **(% style="color: rgb(0,51,102);" %)//Authentification serveur (SSL 1-way//(%%))
20 **Le client doit s'assurer que le serveur est bien celui qu'il prétend être.
21 Pour cela le serveur dispose d'un certificat signé par un CA assurant son authenticité (Pour une plate-forme de tests, il est possible d'utiliser un certificat auto-signé. Les exemples qui suivent utilisent ce type de certificat).**
22 **
23 Configuration du serveur (tomcat) / mise en place d'une connexion sécurisée**
24 * Création d'un certificat auto-signé (self signed) + clé privée ~=> keystore
25
26
27
28 {{code language="none"}}
29 "%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
30 {{/code}}
31
32
33 Création par défaut du keystore //.keystore// (si inexistant) dans le répertoire %userprofile% au format JKS (JavaKeyStore) (password par défaut "changeit")
34
35
36
37 * Déclaration d'un connector https dans le fichier //server.xml// (utilisant les valeurs par défaut du keystore, keystoreFile~="%userprofile%/.keystore", keystorePass~="changeit", keystoreType~="JKS") :
38
39
40
41 {{code language="none"}}
42 <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150"
43 minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
44 disableUploadTimeout="true" acceptCount="20" scheme="https"
45 secure="true" clientAuth="false" sslProtocol="TLS"/>
46 {{/code}}
47
48
49 ou
50 * Déclaration d'un connector https dans le fichier //server.xml// faisant référence à un keystore particulier "c:\keystore\.keystore":
51
52
53
54 {{code language="none"}}
55 <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150"
56 minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
57 disableUploadTimeout="true" acceptCount="20" scheme="https"
58 secure="true" clientAuth="false" sslProtocol="TLS"
59 keystoreFile="c:/keystore/.keystore" keystorePass="pwd"/>
60 {{/code}}
61
62
63
64
65 * Configuration du web.xml de l'application web hébergeant le service web ~=> toutes les ressources sont sécurisées :
66
67
68
69 {{code language="none"}}
70 <security-constraint>
71 <web-resource-collection>
72 <web-resource-name>Wildcard means whole app requires authentication</web-resource-name>
73 <url-pattern>/*</url-pattern>
74 </web-resource-collection>
75 <user-data-constraint>
76 <transport-guarantee>CONFIDENTIAL</transport-guarantee>
77 </user-data-constraint>
78 </security-constraint>
79 {{/code}}
80
81
82
83
84
85 **Rappel** : Le fichier de configuration Axis2.xml se trouvant dans l'application web hôte doit déclarer un <transportSender> et un <transportReceiver> pour le protocole https.
86
87
88 ******Consommation d'un service avec la connexion sécurisée
89 Plate-forme C/Windows**
90 * Récupération du certificat (auto-signé) du serveur pour valider la connexion avec le serveur (handshake SSL)
91
92
93 Pour que le client accepte/valide le certificat (self-signed) du serveur, le client doit passer à ce dernier ce même certificat. Il faut récupérer ce certificat dans un format PEM (texte encodé en base64) et non au format JKS (format binaire standard java).
94 Il est possible de récupérer ce certificat depuis le client à l'aide de la commande //openssl// suivante :
95
96
97 {{code language="none"}}
98 openssl s_client -connect serveur:port > svca.pem
99 {{/code}}
100
101
102
103
104
105 Il faut alors éditer le fichier Cerfile.pem et conserver uniquement la partie entre les bornes -----BEGIN CERTIFICATE----- et -----END CERTIFICATE-----
106
107 Note : les bornes doivent figurer dans le fichier.
108
109
110 On peut alors tester la validité du certificat avec la commande suivante :
111
112
113 {{code language="none"}}
114 Openssl s_client -connect serveur:port –CAfile svca.pem
115 {{/code}}
116
117
118 La commande doit se terminer par ~=> Verify return code: 0 (ok)
119
120
121
122 * Configuration : utilisation du certificat pour invoquer le service web
123
124
125 Pour utiliser le certificat lors de l'invocation du service, il faut préciser le nom du fichier dans l'élément <server_cert> du fichier //cfgWebServices.xml//.
126
127 Exemple :
128
129
130 {{code language="none"}}
131 <Service>
132 <AdeliaName>AX2_DOL</AdeliaName>
133 <Epr>https://vmwas7:8443/axis2/services/AX2_DOL</Epr>
134 <Transport>
135 <SSLCertificate>
136 <ServerCertFile>c:\certifs\svca.pem</ServerCertFile>
137 </SSLCertificate>
138 </Transport>
139 </Service>
140 {{/code}}
141
142
143
144
145
146 Rappel : Le fichier de configuration Axis2.xml présent sur le client (%adeliws%/axis2) doit déclarer un <transportSender> et <transportReceiver> pour le protocole https.
147
148 **Plate-forme Java
149 **
150
151 Pour que le client accepte/valide le certificat (self-signed) du serveur, le client doit passer à ce dernier ce même certificat. Il faut récupérer ce certificat dans un format JKS (exporté depuis le keystore du serveur) et l'ajouter dans le keystore du poste client.
152 * Récupération du certificat (auto-signé) du serveur pour valider la connexion avec le serveur (handshake SSL).
153
154
155
156 {{code language="none"}}
157 <serveur> keytool -export -keystore c:\keystore\.keystore -alias tomcat -file tomcat.crt
158 {{/code}}
159
160 * Si besoin créer un keystore sur le client (si absent) :
161
162
163
164 {{code language="none"}}
165 <client> keytool -genkey -alias salias -keyalg RSA -keystore keystore.jks
166 {{/code}}
167
168 * Importer le certifcat dans le keystore client (avec un alias différent de celui utilisé pour stocker la clé privée) :
169
170
171
172 {{code language="none"}}
173 <client> keytool -import -alias websvc -file tomcat.crt -keystore keystore.jks
174 {{/code}}
175
176 * Configuration : utilisation du certificat pour invoquer le service web (configuration //cfgWebServices.xml)//
177
178
179 Exemple :
180
181
182 {{code language="none"}}
183 <Service>
184 <AdeliaName>AX2_DOL</AdeliaName>
185 <Epr>https://vmwas7:8443/axis2/services/AX2_DOL</Epr>
186 <Transport>
187 <SSLCertificate>
188 <TruststoreName>c:/certifs/java/keystore.jks</TruststoreName>
189 <TruststorePwd>
190 <Encrypted>false</Encrypted>
191 <Password>changeit</Password>
192 </TruststorePwd>
193 </SSLCertificate>
194 </Transport>
195 </Service>
196 {{/code}}
197
198
199 **Remarques : **
200 * Il est également possible de récupérer le fichier certificat (au format .pem) à l'aide de la commande openssl (Cf.Plate-forme C/Windows); de convertir le fichier .pem au format .der
201
202
203 {{code language="none"}}
204 openssl x509 -outform der -in certificate.pem -out certificate.der
205 {{/code}}
206
207
208 puis de l'enregistrer dans le keystore.
209
210
211 {{code language="none"}}
212 keytool -import -alias your-alias -keystore cacerts -file certificate.der
213 {{/code}}
214
215
216
217 * si le pwd est crypté pour le truststore, alors la clé de cryptage est le truststorename.
218
219
220
221
222 **(% style="color: rgb(0,51,102);" %)//Authentification serveur + client (SSL 2-ways)//(%%)**
223
224 Le client doit s'assurer que le serveur est bien celui qu'il prétend être.
225 Le serveur doit s'assurer que le client est bien celui qu'il prétend être.****En plus de la configuration présentée dans le paragraphe précédent, il faut :
226
227 **(% style="color: rgb(0,51,102);" %) (%%)****Configuration du client
228
229 Plate-forme C/Windows**
230 Créer un certificat (self-signed ou non) + clé privée.
231 Utilisation des éléments KEY_FILE (fichier PEM contenant le certificat + la clé privée ~= certificate chain file) et SSL_PASSPHRASE pour l'accès à la clé privée ( ~= passphrase demandé lors de la création de la clé privée avec l'option //–des3//).
232 Création du fichier (certificate chain file) via openssl :
233
234
235 {{code language="none"}}
236 openssl req -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem
237 {{/code}}
238
239
240 **** La commande crée un certificat (self-signed) dans le fichier hostcert.pem et une clé privée dans hostkey.pem.
241 Il suffit de concaténer le fichier //hostkey.pem// au fichier //hostcert.pem// pour obtenir un nouveau fichier qui est le certificate chain file.
242
243 ****Remarque : la commande recherche la présence du fichier de configuration //openssl.cnf//. Pour préciser l'emplacement de ce fichier, il faut fixer la variable d'environnement OPENSSL_CONF (sans guillemet sinon cela ne fonctionne pas).
244 Exemple : set OPENSSL_CONF~=d:\devnet\openssl-1.0.0d\bin\openssl.cnf
245
246 ****//**Plate-forme Java**//
247 Créer un certificat (self-signed ou non) + clé privée dans un keystore :
248
249
250 {{code language="none"}}
251 %JAVA_HOME%\bin\keytool -genkey -alias key1 -keyalg RSA -keystore keystore.jks
252 {{/code}}
253
254
255 ****Exporter le certificat pour l'ajouter au truststore du serveur (tomcat) :
256
257
258 {{code language="none"}}
259 %JAVA_HOME%\bin\keytool -export -alias key1 -keystore keystore.jks -file svcli.cer
260 {{/code}}
261
262
263 **(% style="color: rgb(0,51,102);" %)
264 (%%)****Configuration du serveur (tomcat)**
265 * Au niveau du connecteur https, activer l'authentification cliente : clientAuth~="**true**"
266
267
268 {{code language="none"}}
269 <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150"
270 minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
271 disableUploadTimeout="true" acceptCount="20" scheme="https"
272 secure="true" clientAuth="true" sslProtocol="TLS"/>
273 {{/code}}
274
275
276
277
278 * Référence au //truststore// (<truststoreFile><truststorePass><truststoreType>) utilisé pour valider les certificats clients (et non au keystore qui lui est utilisé pour les certificats serveurs : le keystore et trustore utilisent par défaut le même format [JKS] et peuvent donc faire référence à un même fichier).
279
280
281 {{code language="none"}}
282 <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150"
283 minSpareThreads="25" maxSpareThreads="75" enableLookups="false"
284 disableUploadTimeout="true" acceptCount="20" scheme="https"
285 secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="c:\keystore\.keystore" truststoreFile="c:\keystore\.keystore" />
286 {{/code}}
287
288
289
290
291 * Inscrire dans le truststore de tomcat le certificat client auto-signé :
292
293 (% style="list-style-type: none;background-image: none;" %)
294 * ** Certificat au format PEM (créé par openssl)*** récupérer le certificat sur le client (fichier au format PEM)
295 Importer le certificat (PEM) dans le truststore de tomcat (avec conversion en JKS):
296
297
298 {{code language="none"}}
299 keytool -import -v -trustcacerts -alias <your alias> -file <your file>.pem -keystore <your key store>.jks -
300 storepass <your storepass>
301 {{/code}}
302
303
304 L'option <trustcacerts> n'est pas obligatoire.
305
306 ** Certificat au format JKS (sans conversion)***
307
308 {{code language="none"}}
309 keytool -import -v -alias <your alias> -file <your file>.cer -keystore <your key store>.jks -
310 storepass <your storepass>
311 {{/code}}
312
313
314
315
316
317
318
319 Exemples : nouvelle entrée dans le trustore de tomcat pour le certificat client de PS658.
320
321
322 {{code language="none"}}
323 keytool -import -v -trustcacerts -alias PS658 -file ps658.pem -keystore c:\keystore\.keystore -storepass changeit
324
325 keytool -import -v -alias svcli -file svcli.cer -keystore c:\keystore\.keystore -storepass changeit
326 {{/code}}
327
328
329 ****Note : Problème avec les certificats auto-signés ~=> il faut importer dans le truststore de tomcat un certificat pour chaque client. La solution est donc de signer les certificats des clients par un même CA (le truststore tomcat incorporant alors uniquement le certificat de ce CA) : possibilité d'utiliser un CA gratuit du style de //startcom.org//.
330
331 ****Signer les certificats clients avec ce CA et importer le certificat racine StartCom dans le trustore tomcat ~=> ajuster la configuration du connecteur tomcat pour faire référence au truststore (emplacement, mot de passe).
332 (((
333 == Articles connexes ==
334 )))
335
336 Les articles connexes apparaissent ici en fonction des étiquettes que vous avez sélectionnées. Cliquez pour modifier la macro et ajouter ou modifier des étiquettes.
337
338 {{liveData sort="doc.date:desc" source="liveTable" properties="doc.title,doc.date,doc.author" description="Recently updated" limit="5" filters="tag=service web https certificat" sourceParameters="translationPrefix=platform.index."}}{{/liveData}}
339