J'ai porté la même clé/certificat de travail SSL et la même règle /etc/apt/apt.conf.d/01_https_client_cert
depuis une 14.04 (fonctionnelle) VM vers une nouvelle installation 16.04.
Je suis en mesure d'utiliser le certificat de client SSL pour accéder au référentiel apt via curl
mais apt-get update
se plaint de cette erreur:
6% [Working]* Hostname example.com was found in DNS cache
* Trying 11.22.33.44...
* Connected to example.com (11.22.33.44) port 443 (#29)
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* found 697 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* error reading X.509 key or certificate file: Error while reading file.
* Closing connection 29
Ign:5 https://example.com/apt release/main all Packages
/etc/apt/apt.conf.d/01_ssl_client_auth
est identique sur les deux systèmes:
Debug::Acquire::https "true";
Acquire::https::example.com::SslCert "/opt/example/keyring/ssl_client.crt";
Acquire::https::example.com::SslKey "/opt/example/keyring/ssl_client.key";
Les autorisations sont les mêmes sur les deux machines:
ubuntu@ubuntu:~$ namei -mo /opt/example/keyring/ssl_client.crt
f: /opt/example/keyring/ssl_client.crt
drwxr-xr-x root root /
drwxr-sr-x ubuntu ubuntu opt
drwxrwsr-x ubuntu ubuntu example
drwxrws--- ubuntu ubuntu keyring
-rw-rw---- ubuntu ubuntu ssl_client.crt
Trivia:
La suppression de la règle 01_ssl_client_auth
renvoie la réponse interdite attendue 403
(le repo nécessite un certificat client).
curl
fonctionne très bien comme ceci:
curl --cert /opt/example/keyring/ssl_client.crt --key /opt/example/keyring/ssl_client.key https://example.com/apt/
Connected to example.com (11.22.33.44) port 443 (#0)
found 173 certificates in /etc/ssl/certs/ca-certificates.crt
found 697 certificates in /etc/ssl/certs
ALPN, offering http/1.1
SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
server certificate verification OK
server certificate status verification SKIPPED
common name: *.example.com (matched)
server certificate expiration date OK
server certificate activation date OK
certificate public key: RSA
(snip)
ALPN, server did not agree to a protocol
GET /apt/ HTTP/1.1
Host: example.com
User-Agent: curl/7.47.0
Accept: */*
HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu)
Date: Wed, 18 May 2016 01:18:30 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Et bien sûr, apt-get
et curl
fonctionnent tous deux sur le système d'origine avec le même apt.conf.d
et cert ...
Quelque chose d'autre que je devrais regarder? Y at-il eu un changement de crt/key en pem dans apt-get ou quelque chose du genre?
Vous devriez pouvoir trouver plus de détails sur https://wiki.ubuntu.com/XenialXerus/ReleaseNotes#Apt_1.2
Le paramètre recommandé est de copier le certificat et les clés dans un répertoire différent et de modifier les autorisations de l’utilisateur en
_apt: nogroup
et configurer
apt_transport_https
configuration pour utiliser le nouveau chemin.
Acquire::https::cdn-mirror.insnw.net::CaInfo "/new/path/ca.crt";
Acquire::https::cdn-mirror.insnw.net::SslCert "/new/path.crt";
Acquire::https::cdn-mirror.insnw.net::SslKey "/new/path.key"";
Apt s'efforce de supprimer les autorisations et de s'exécuter en tant qu'utilisateur _apt
. Je ne me souviens pas de la date à laquelle ce changement a eu lieu, mais c’est assez récent (c’est-à-dire probablement après le 14.04). Donc, après avoir corrigé mon problème similaire de la même façon que vous (en vous assurant que a+rx
était disponible sur tous les répertoires menant au certificat que je voulais utiliser _apt
), je pense que vous pouvez le dire en toute sécurité ' J'ai identifié le problème correctement.