Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
certificats
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Yannick Perret
certificats
Commits
b03a38b6
Commit
b03a38b6
authored
5 years ago
by
Yannick Perret
Browse files
Options
Downloads
Patches
Plain Diff
readme
parent
9fe42c4f
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
README.md
+44
-0
44 additions, 0 deletions
README.md
vp12.php
+1
-1
1 addition, 1 deletion
vp12.php
with
45 additions
and
1 deletion
README.md
+
44
−
0
View file @
b03a38b6
...
...
@@ -26,3 +26,47 @@ se fait à partir des données du script sans passer par le disque (script `JS`)
*
`vp12.php`
: valide les informations reçues, puis effectue les conversions vers le format P12 en
utilisant l'extension
`openssl`
. Au final propose de télécharger le résultat
# Technique
## Zones de saisie / upload de données
Ce sont des
`textarea`
sur lesquelles un bouton (en fait un
`input`
de type
`file`
) permet de lancer
une sélection et un chargement de fichier.
Voir dans le
`JS`
la fonction
`getFile()`
(associé à l'événement
`change`
de l'
`input`
`file`
) qui utilise
la fonction
`placeFileContent()`
qui utilise
`readFileContent()`
.
## Zone de récupération / download du résultat
Le résultat (format P12) étant binaire, il n'est pas possible de passer par une
`textarea`
.
La récupération passe par un lien (
`a`
, avec le type
`application/octet-stream`
, et dont l'aspect est « maquillé »
en bouton via la classe
`btn`
). Le script
`JS`
qui suit crée un
`Blob`
à partir des données du certificat P12,
et fait pointer le
`href`
du
`a`
dessus (URL virtuelle).
La création du
`Blob`
passe par une conversion de/vers le format base64, car il n'est pas possible de mettre
une chaîne binaire dans du code
`HTML`
/
`JS`
.
## Commandes openssl
La conversion utilise l'extension
`openssl`
. Les commandes :
*
`openssl_pkey_get_private($key, $password)`
: charge la clé (
`$key`
, format PEM) protégée par le mot de passe
`$password`
et retourne une « ressource de clé » (format anonyme interne à
`openssl`
)
*
`openssl_pkcs12_export($cert, $cres, $skey, $password2)`
: exporte le certificat PEM
`$cert`
et sa clé associée
`$skey`
(voir juste au dessus) au format P12 (PKCS12) en le protégeant avec le mot de passe
`$password2`
. Le
résultat (binaire, format P12) est rangé dans
`$cres`
## Général
Cet outil utilise l'authentification Apache via le LDAP du LIRIS. La vérification du _login_ n'est pas strictement
nécessaire. Toutefois ça permet :
*
de limiter l'accès aux membres du laboratoire (ce n'est pas un outil public actuellement)
*
de pouvoir proposer un nom de fichier pour la récupération du résultat (
`$login.p12`
)
# Licence
Copyright Yannick Perret / LIRIS, 2019-2020.
GPLv3. Ce code est réutilisable, sans garantie quelconque (à vos risques et périls… :)). Si vous réutilisez ce code
merci de m'en informer (yannick.perret@liris.cnrs.fr).
This diff is collapsed.
Click to expand it.
vp12.php
+
1
−
1
View file @
b03a38b6
...
...
@@ -55,12 +55,12 @@ importer votre certificat dans un outil (navigateur…).</p>
<p>Vous référer à la documentation pour l'import d'un certificat :
<a href='https://INSEREZ.VOTRE.DOC'>https://INSEREZ.VOTRE.DOC</a></p>
<a id='a' class='btn' download='$login.p12' type='application/octet-stream'>Télécharger le certificat format P12</a>
<script>
_EOT_;
// partie pour encoder le contenu ($cres) en base64 (on ne peut pas mettre du binaire directement
// dans le code HTML) puis inversement, et permet le téléchargement
echo
<<<EOF
<script>
/**
* Convert a base64 string to an ArrayBuffer
*/
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment