Creo que la clave es darse cuenta de la diferencia entre aceptabilidad y preferencias. Cada lado tiene un conjunto de conjuntos de cifrado aceptados y un orden de preferencia entre esos conjuntos de cifrado. Los conjuntos de cifrados no aceptados no se consideran para preferencias en absoluto.
Debido al diseño del protocolo TLS, el cliente envía su conjunto de conjuntos de cifrado aceptados al servidor. Envía este conjunto como una lista ordenada, y el orden indica las preferencias del cliente. El servidor nunca muestra al cliente lo que acepta o cuáles son sus preferencias. Hace una selección y le dice al cliente qué es esa selección. Es por eso que el servidor tiene la autoridad final para seleccionar el conjunto de cifrado. Sin embargo, el servidor no tiene autoridad completa: no puede hacer que el cliente use un sistema de cifrado que el cliente no quiere.
Desde la perspectiva del cliente, el servidor no tiene un conjunto o preferencias aceptables. Todo lo que el cliente sabe es que el servidor eligió un conjunto de cifrado particular entre los que ofrecía el cliente.
El servidor debe seleccionar un conjunto de cifrado que sea aceptable tanto para el cliente como para el servidor. Si hay algún conjunto de cifrado que el cliente acepta pero el servidor no, el servidor no lo considerará en absoluto. Del mismo modo, si hay algún conjunto de cifrado que el servidor acepta pero no el cliente, entonces el servidor no puede seleccionarlo (eso violaría el protocolo y el cliente cerraría la conexión).
Cualquier conjunto de cifrado que se encuentre tanto en la lista de preferencias del cliente como en la lista de preferencias del servidor es, por construcción, aceptable para ambas partes. Entre los conjuntos de cifrado mutuamente aceptables, el servidor tiene autoridad para decidir cuál elegir.
Podría elegir uno al azar, o en función de la fase de la luna, o podría tomar un hash de la concatenación de las dos listas de módulos del tamaño del conjunto mutuamente aceptable y usar eso como un índice en el mutuamente Lista aceptable ordenada en orden alfabético inverso de la transformación rot13 de los nombres oficiales de conjuntos de cifrado. O puede hacer su elección de una manera más sensata, y OpenSSL ofrece las dos formas que realmente tienen sentido: entre el conjunto mutuamente aceptable, elija la que más prefiera el servidor o la que más prefiera el cliente.