J'ai couru à seulement quelques tests, et l'inscription de votre sélection de CA dans le ca_certs
paramètres est exactement ce dont vous avez besoin.
Le système sur lequel j'ai essayé est Linux avec Python 2.6. Si vous n'utilisez pas ca_certs
, il ne vous utilisez laissez pas cert_reqs=ssl.CERT_REQUIRED
:
Traceback (most recent call last):
File "sockettest.py", line 18, in <module>
cert_reqs=ssl.CERT_REQUIRED, ssl_version=ssl.PROTOCOL_TLSv1)
File "/usr/lib/python2.6/ssl.py", line 350, in wrap_socket
suppress_ragged_eofs=suppress_ragged_eofs)
File "/usr/lib/python2.6/ssl.py", line 113, in __init__
cert_reqs, ssl_version, ca_certs)
ssl.SSLError: _ssl.c:317: No root certificates specified for verification of other-side certificates.
J'ai aussi essayé d'utiliser un client d'envoyer un certificat qui est pas d'un CA dans le paramètre ca_certs
, et je reçois ssl_error_unknown_ca_alert
(comme prévu). Notez que de toute façon, il n'y a pas de liste d'autorité de certification client d'envoi (dans la liste certificate_authorities
dans le message TLS CertificateRequest
), mais cela ne serait pas nécessaire. C'est seulement utile pour aider le client à choisir le certificat.
Pourquoi? Ce genre de chose se produit généralement lorsque vous essayez de faire l'authentification faire le travail d'autorisation. Ce ne sont pas la même chose. – EJP
@EJP, cela peut être utile si vous ne voulez pas que la liste 'certificate_authorities' du message TLS' CertificateRequest' (celui qui demande le certificat client) inclue la liste que vous ne voulez pas (cette liste de DNs tend être rempli à partir de la liste des autorités de certification disponibles par défaut). En outre, il se peut que vous ne fassiez pas confiance à des autorités de certification par défaut sur votre système, même pour l'authentification uniquement. – Bruno
J'utilise SSL pour authentifier les clients sur un réseau «fermé»: I (eh bien, mon autorité de certification) va signer tous leurs certificats, il n'y a donc aucune raison de faire confiance à une autre autorité de certification. –