.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.29) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "fr::ssl::SSL_CTX_set_generate_session_id 3SSL" .TH fr::ssl::SSL_CTX_set_generate_session_id 3SSL "2015-12-31" "1.0.2a 1.0.2c" "OpenSSL" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NOM" .IX Header "NOM" SSL_CTX_set_generate_session_id, SSL_set_generate_session_id, SSL_has_matching_session_id \- Contrôler la création d’identifiant de session \&\s-1SSL \s0(serveur uniquement) .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fB #include \fR .PP \&\fB typedef int (*GEN_SESSION_CB)(const \s-1SSL\s0 *\fR\fIssl\fR\fB, unsigned char *\fR\fIid\fR\fB,\fR \fBunsigned int *\fR\fIid_long\fR)\fB;\fR .PP \&\fB int SSL_CTX_set_generate_session_id(\s-1SSL_CTX\s0 *\fR\fIctx\fR\fB, \s-1GEN_SESSION_CB\s0\fR \fIcb\fR\fB);\fR \fBint SSL_set_generate_session_id(\s-1SSL\s0 *\fR\fIssl\fR\fB, \s-1GEN_SESSION_CB,\s0\fR \fIcb\fR\fB);\fR \fBint SSL_has_matching_session_id(const \s-1SSL\s0 *\fR\fIssl\fR\fB, const unsigned char *\fR\fIid\fR\fB,\fR \fBunsigned int\fR \fIid_long\fR\fB);\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBSSL_CTX_set_generate_session_id\fR() définit la fonction de rappel pour la création d’identifiants de nouvelles sessions \s-1SSL/TLS\s0 pour \fIctx\fR à \fIcb\fR. .PP \&\fBSSL_CTX_set_generate_session_id\fR() définit la fonction de rappel pour la création d’identifiants de nouvelles sessions \s-1SSL/TLS\s0 pour \fIssl\fR à \fIcb\fR. .PP \&\fBSSL_has_matching_session_id\fR() vérifie si une session d’identifiant \fIid\fR (de longueur \fIid_long\fR) est déjà contenue dans le cache interne de session du contexte parent de \fIssl\fR. .SH "NOTES" .IX Header "NOTES" Quand une nouvelle session est établie entre client et serveur, le serveur crée un identifiant de session. Celui-ci est une séquence arbitraire d’octets. La longueur de l’identifiant est de 16 octets pour les sessions SSLv2 et entre 1 et 32 octets pour celles SSLv3/TLSv1. L’identifiant n’est pas critique pour la sécurité mais doit être unique pour le serveur. De plus l’identifiant est transmis en clair, aussi ne doit-il pas contenir d’informations sensibles. .PP Sans rappel défini, un serveur OpenSSL créera un seul identifiant de session à partir de nombres pseudo\-aléatoires de la longueur la plus grande possible. En utilisant la fonction de rappel, l’identifiant peut être changé et contenir des informations supplémentaires, comme par exemple un identifiant d’hôte pour améliorer la répartition de charge ou les techniques de cache externe. .PP La fonction de rappel reçoit un pointeur vers l’emplacement mémoire où mettre \fIid\fR et un autre vers la longueur maximale admise \fIid_long\fR. Le tampon à l’emplacement \fIid\fR est seulement sûr d’avoir la taille de \&\fIid_long\fR. Le rappel est seulement autorisé à créer un identifiant plus petit et à réduire \fIid_long\fR ; le rappel \fBne doit jamais\fR augmenter \&\fIid_long\fR ou écrire dans l’emplacement \fIid\fR en dépassant la limite donnée. .PP Si un identifiant de session SSLv2 est créé et \fIid_long\fR réduit, il sera restauré après la fin du rappel et l’identifiant empli avec des 0x00. Changer \fIid_long\fR n’est pas recommandé pour des sessions SSLv2. Le rappel peut utiliser la fonction \fBSSL_get_version\fR(3) pour vérifier si la fonction est de type SSLv2. .PP L’emplacement \fIid\fR est empli avec des 0x00 avant l’appel du rappel, aussi le rappel peut seulement remplir une partie de la longueur possible et laisse \fIid_long\fR inchangé tout en maintenant la reproductibilité. .PP Puisque les sessions doivent pouvoir être distinguées, les identifiants de session doivent être uniques. En dehors du rappel, un nombre aléatoire est utilisé, aussi la possibilité de créer un même identifiant est extrêmement faible (2^128 identifiants possibles pour une session SSLv2 , 2^256 pour SSLv3/TLSv1). Dans le but d’assurer l’unicité de l’identifiant créé, le rappel doit appeler \fBSSL_has_matching_session_id\fR() et créer un autre identifiant si un conflit se produit. Si un conflit d’identifiant apparait, l’initiation de connexion échouera. Si l’application code par exemple un identifiant unique d’hôte, un numéro unique de processus et un numéro unique de suite dans l’identifiant de session, l’unicité peut facilement être parachevée sans caractères aléatoires ajoutés (en prenant soin qu’aucune information confidentielle ne puisse être divulguée). Si l’application ne peut garantir l’unicité, l’utilisation du maximum de \fIid_long\fR est recommandée ainsi que remplir les octets, non utilisés pour coder une information particulière, avec des données aléatoires pour éviter un conflit. .PP \&\fBSSL_has_matching_session_id\fR() interrogera le cache interne de session mais pas celui externe. Puisque l’identifiant de session est créé avant que l’initiation ne soit terminée, il n’est pas ajouté immédiatement au cache. Si un autre processus utilise le même cache interne de session, une situation de compétition peut survenir si cet autre processus crée le même identifiant. Des conflits peuvent survenir lors de l’utilisation du cache de session externe puisque celui-ci n’est pas vérifié avec \&\fBSSL_has_matching_session_id\fR(), et la même situation de compétition existe. .PP Lors de l’appel de \fBSSL_has_matching_session_id\fR()pour une session SSLv2 avec \fIid_long\fR réduit, la correspondance sera réalisée en utilisant la longueur demandée et l’identifiant emplit de 0x00. .PP Le rappel doit renvoyer \fB0\fR si un identifiant ne peut être créé pour n’importe quelle raison et \fB1\fR en cas de réussite. .SH "EXEMPLES" .IX Header "EXEMPLES" La fonction de rappel doit créé un identifiant de session avec l’identifiant de serveur fourni, et compléter le reste avec des octets pseudo\-aléatoires. .PP .Vb 1 \& const char session_id_prefix = "www\-18"; \& \& #define MAX_SESSION_ID_ATTEMPTS 10 \& static int generate_session_id(const SSL *ssl, unsigned char *id, \& unsigned int *id_long) \& { \& unsigned int count = 0; \& const char *version; \& \& version = SSL_get_version(ssl); \& if (!strcmp(version, "SSLv2")) \& /* ne pas changer id_long */; \& \& do { \& RAND_pseudo_bytes(id, *id_len); \& /* Préfixer le session_id avec le préfixe demandé. \& * Avertissement : si le préfixe est trop long, rognez\-le \& * — des effets pervers sont possibles, par exemple, \& * le serveur peut créer un identifiant de session \& * (c’est\-à\-dire le préfixe) de telle sorte que toutes \& * les négociations de sessions suivante échoueront à \& * cause des conflits. */ \& memcpy(id, session_id_prefix, \& (strlen(session_id_prefix) < *id_long) ? \& strlen(session_id_prefix) : *id_long); \& } \& while(SSL_has_matching_session_id(ssl, id, *id_long) && \& (++count < MAX_SESSION_ID_ATTEMPTS)); \& if(count >= MAX_SESSION_ID_ATTEMPTS) \& return 0; \& return 1; \& } .Ve .SH "VALEURS DE RETOUR" .IX Header "VALEURS DE RETOUR" \&\fBSSL_CTX_set_generate_session_id\fR() et \fBSSL_set_generate_session_id\fR() renvoient \fB1\fR. .PP \&\fBSSL_has_matching_session_id\fR() renvoie \fB1\fR si une autre session avec le même identifiant est déjà dans le cache. .SH "VOIR AUSSI" .IX Header "VOIR AUSSI" \&\fBssl\fR(3), \fBSSL_get_version\fR(3) .SH "HISTORIQUE" .IX Header "HISTORIQUE" \&\fBSSL_CTX_set_generate_session_id\fR(), \fBSSL_set_generate_session_id\fR() et \&\fBSSL_has_matching_session_id\fR() ont été introduits dans OpenSSL 0.9.7. .SH "TRADUCTION" .IX Header "TRADUCTION" La traduction de cette page de manuel est maintenue par les membres de la liste . Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.