blog.hugopoi.net/www/.content.EZtzwPjb/html/3112f67b842748d8a79884a524b...

853 lines
87 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="fr-FR">
<head>
<meta charset='UTF-8'>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="/xmlrpc.php">
<title>Secure Boot n&rsquo;est pas simple &#8211; HugoPoi</title>
<meta name='robots' content='max-image-preview:large' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="alternate" type="application/rss+xml" title="HugoPoi &raquo; Flux" href="/feed/" />
<link rel="alternate" type="application/rss+xml" title="HugoPoi &raquo; Flux des commentaires" href="/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="HugoPoi &raquo; Secure Boot n&rsquo;est pas simple Flux des commentaires" href="/2019/01/06/secure-boot-nest-pas-simple/feed/" />
<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/blog.hugopoi.net\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.8.4"}};
!function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([10084,65039,8205,55357,56613],[10084,65039,8203,55357,56613])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=5.8.4' type='text/css' media='all' />
<link rel='stylesheet' id='wp-syntax-css-css' href='/wp-content/plugins/wp-syntax/css/wp-syntax.css?ver=1.1' type='text/css' media='all' />
<link rel='stylesheet' id='bootstrap-css' href='/wp-content/themes/hestia/assets/bootstrap/css/bootstrap.min.css?ver=1.0.2' type='text/css' media='all' />
<link rel='stylesheet' id='hestia-font-sizes-css' href='/wp-content/themes/hestia/assets/css/font-sizes.min.css?ver=3.0.20' type='text/css' media='all' />
<link rel='stylesheet' id='hestia_style-css' href='/wp-content/themes/hestia/style.min.css?ver=3.0.20' type='text/css' media='all' />
<style id='hestia_style-inline-css' type='text/css'>
.hestia-top-bar, .hestia-top-bar .widget.widget_shopping_cart .cart_list {
background-color: #363537
}
.hestia-top-bar .widget .label-floating input[type=search]:-webkit-autofill {
-webkit-box-shadow: inset 0 0 0px 9999px #363537
}.hestia-top-bar, .hestia-top-bar .widget .label-floating input[type=search], .hestia-top-bar .widget.widget_search form.form-group:before, .hestia-top-bar .widget.widget_product_search form.form-group:before, .hestia-top-bar .widget.widget_shopping_cart:before {
color: #ffffff
}
.hestia-top-bar .widget .label-floating input[type=search]{
-webkit-text-fill-color:#ffffff !important
}
.hestia-top-bar div.widget.widget_shopping_cart:before, .hestia-top-bar .widget.widget_product_search form.form-group:before, .hestia-top-bar .widget.widget_search form.form-group:before{
background-color: #ffffff
}.hestia-top-bar a, .hestia-top-bar .top-bar-nav li a {
color: #ffffff
}
.hestia-top-bar ul li a[href*="mailto:"]:before, .hestia-top-bar ul li a[href*="tel:"]:before{
background-color: #ffffff
}
.hestia-top-bar a:hover, .hestia-top-bar .top-bar-nav li a:hover {
color: #eeeeee
}
.hestia-top-bar ul li:hover a[href*="mailto:"]:before, .hestia-top-bar ul li:hover a[href*="tel:"]:before{
background-color: #eeeeee
}
a,
.navbar .dropdown-menu li:hover > a,
.navbar .dropdown-menu li:focus > a,
.navbar .dropdown-menu li:active > a,
.navbar .navbar-nav > li .dropdown-menu li:hover > a,
body:not(.home) .navbar-default .navbar-nav > .active:not(.btn) > a,
body:not(.home) .navbar-default .navbar-nav > .active:not(.btn) > a:hover,
body:not(.home) .navbar-default .navbar-nav > .active:not(.btn) > a:focus,
a:hover,
.card-blog a.moretag:hover,
.card-blog a.more-link:hover,
.widget a:hover,
.has-text-color.has-accent-color,
p.has-text-color a {
color:#05ad13;
}
.svg-text-color{
fill:#05ad13;
}
.pagination span.current, .pagination span.current:focus, .pagination span.current:hover {
border-color:#05ad13
}
button,
button:hover,
.woocommerce .track_order button[type="submit"],
.woocommerce .track_order button[type="submit"]:hover,
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit,
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit:hover,
input[type="button"],
input[type="button"]:hover,
input[type="submit"],
input[type="submit"]:hover,
input#searchsubmit,
.pagination span.current,
.pagination span.current:focus,
.pagination span.current:hover,
.btn.btn-primary,
.btn.btn-primary:link,
.btn.btn-primary:hover,
.btn.btn-primary:focus,
.btn.btn-primary:active,
.btn.btn-primary.active,
.btn.btn-primary.active:focus,
.btn.btn-primary.active:hover,
.btn.btn-primary:active:hover,
.btn.btn-primary:active:focus,
.btn.btn-primary:active:hover,
.hestia-sidebar-open.btn.btn-rose,
.hestia-sidebar-close.btn.btn-rose,
.hestia-sidebar-open.btn.btn-rose:hover,
.hestia-sidebar-close.btn.btn-rose:hover,
.hestia-sidebar-open.btn.btn-rose:focus,
.hestia-sidebar-close.btn.btn-rose:focus,
.label.label-primary,
.hestia-work .portfolio-item:nth-child(6n+1) .label,
.nav-cart .nav-cart-content .widget .buttons .button,
.has-accent-background-color[class*="has-background"] {
background-color: #05ad13;
}
@media (max-width: 768px) {
.navbar-default .navbar-nav>li>a:hover,
.navbar-default .navbar-nav>li>a:focus,
.navbar .navbar-nav .dropdown .dropdown-menu li a:hover,
.navbar .navbar-nav .dropdown .dropdown-menu li a:focus,
.navbar button.navbar-toggle:hover,
.navbar .navbar-nav li:hover > a i {
color: #05ad13;
}
}
body:not(.woocommerce-page) button:not([class^="fl-"]):not(.hestia-scroll-to-top):not(.navbar-toggle):not(.close),
body:not(.woocommerce-page) .button:not([class^="fl-"]):not(hestia-scroll-to-top):not(.navbar-toggle):not(.add_to_cart_button):not(.product_type_grouped):not(.product_type_external),
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit,
input[type="submit"],
input[type="button"],
.btn.btn-primary,
.widget_product_search button[type="submit"],
.hestia-sidebar-open.btn.btn-rose,
.hestia-sidebar-close.btn.btn-rose,
.everest-forms button[type=submit].everest-forms-submit-button {
-webkit-box-shadow: 0 2px 2px 0 rgba(5,173,19,0.14),0 3px 1px -2px rgba(5,173,19,0.2),0 1px 5px 0 rgba(5,173,19,0.12);
box-shadow: 0 2px 2px 0 rgba(5,173,19,0.14),0 3px 1px -2px rgba(5,173,19,0.2),0 1px 5px 0 rgba(5,173,19,0.12);
}
.card .header-primary, .card .content-primary,
.everest-forms button[type=submit].everest-forms-submit-button {
background: #05ad13;
}
body:not(.woocommerce-page) .button:not([class^="fl-"]):not(.hestia-scroll-to-top):not(.navbar-toggle):not(.add_to_cart_button):hover,
body:not(.woocommerce-page) button:not([class^="fl-"]):not(.hestia-scroll-to-top):not(.navbar-toggle):not(.close):hover,
div.wpforms-container .wpforms-form button[type=submit].wpforms-submit:hover,
input[type="submit"]:hover,
input[type="button"]:hover,
input#searchsubmit:hover,
.widget_product_search button[type="submit"]:hover,
.pagination span.current,
.btn.btn-primary:hover,
.btn.btn-primary:focus,
.btn.btn-primary:active,
.btn.btn-primary.active,
.btn.btn-primary:active:focus,
.btn.btn-primary:active:hover,
.hestia-sidebar-open.btn.btn-rose:hover,
.hestia-sidebar-close.btn.btn-rose:hover,
.pagination span.current:hover,
.everest-forms button[type=submit].everest-forms-submit-button:hover,
.everest-forms button[type=submit].everest-forms-submit-button:focus,
.everest-forms button[type=submit].everest-forms-submit-button:active {
-webkit-box-shadow: 0 14px 26px -12px rgba(5,173,19,0.42),0 4px 23px 0 rgba(0,0,0,0.12),0 8px 10px -5px rgba(5,173,19,0.2);
box-shadow: 0 14px 26px -12px rgba(5,173,19,0.42),0 4px 23px 0 rgba(0,0,0,0.12),0 8px 10px -5px rgba(5,173,19,0.2);
color: #fff;
}
.form-group.is-focused .form-control {
background-image: -webkit-gradient(linear,left top, left bottom,from(#05ad13),to(#05ad13)),-webkit-gradient(linear,left top, left bottom,from(#d2d2d2),to(#d2d2d2));
background-image: -webkit-linear-gradient(linear,left top, left bottom,from(#05ad13),to(#05ad13)),-webkit-linear-gradient(linear,left top, left bottom,from(#d2d2d2),to(#d2d2d2));
background-image: linear-gradient(linear,left top, left bottom,from(#05ad13),to(#05ad13)),linear-gradient(linear,left top, left bottom,from(#d2d2d2),to(#d2d2d2));
}
.navbar:not(.navbar-transparent) li:not(.btn):hover > a,
.navbar li.on-section:not(.btn) > a,
.navbar.full-screen-menu.navbar-transparent li:not(.btn):hover > a,
.navbar.full-screen-menu .navbar-toggle:hover,
.navbar:not(.navbar-transparent) .nav-cart:hover,
.navbar:not(.navbar-transparent) .hestia-toggle-search:hover {
color:#05ad13
}
.header-filter-gradient {
background: linear-gradient(45deg, rgba(168,29,132,1) 0%, rgb(234,57,111) 100%);
}
.has-text-color.has-header-gradient-color { color: #a81d84; }
.has-header-gradient-background-color[class*="has-background"] { background-color: #a81d84; }
.has-text-color.has-background-color-color { color: #000000; }
.has-background-color-background-color[class*="has-background"] { background-color: #000000; }
.btn.btn-primary:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item), input[type="submit"]:not(.search-submit), body:not(.woocommerce-account) .woocommerce .button.woocommerce-Button, .woocommerce .product button.button, .woocommerce .product button.button.alt, .woocommerce .product #respond input#submit, .woocommerce-cart .blog-post .woocommerce .cart-collaterals .cart_totals .checkout-button, .woocommerce-checkout #payment #place_order, .woocommerce-account.woocommerce-page button.button, .woocommerce .track_order button[type="submit"], .nav-cart .nav-cart-content .widget .buttons .button, .woocommerce a.button.wc-backward, body.woocommerce .wccm-catalog-item a.button, body.woocommerce a.wccm-button.button, form.woocommerce-form-coupon button.button, div.wpforms-container .wpforms-form button[type=submit].wpforms-submit, div.woocommerce a.button.alt, div.woocommerce table.my_account_orders .button, .btn.colored-button, .btn.btn-left, .btn.btn-right, .btn:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item):not(.hestia-sidebar-open):not(.hestia-sidebar-close){ padding-top:15px; padding-bottom:15px; padding-left:33px; padding-right:33px; }
.btn.btn-primary:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item), input[type="submit"]:not(.search-submit), body:not(.woocommerce-account) .woocommerce .button.woocommerce-Button, .woocommerce .product button.button, .woocommerce .product button.button.alt, .woocommerce .product #respond input#submit, .woocommerce-cart .blog-post .woocommerce .cart-collaterals .cart_totals .checkout-button, .woocommerce-checkout #payment #place_order, .woocommerce-account.woocommerce-page button.button, .woocommerce .track_order button[type="submit"], .nav-cart .nav-cart-content .widget .buttons .button, .woocommerce a.button.wc-backward, body.woocommerce .wccm-catalog-item a.button, body.woocommerce a.wccm-button.button, form.woocommerce-form-coupon button.button, div.wpforms-container .wpforms-form button[type=submit].wpforms-submit, div.woocommerce a.button.alt, div.woocommerce table.my_account_orders .button, input[type="submit"].search-submit, .hestia-view-cart-wrapper .added_to_cart.wc-forward, .woocommerce-product-search button, .woocommerce-cart .actions .button, #secondary div[id^=woocommerce_price_filter] .button, .woocommerce div[id^=woocommerce_widget_cart].widget .buttons .button, .searchform input[type=submit], .searchform button, .search-form:not(.media-toolbar-primary) input[type=submit], .search-form:not(.media-toolbar-primary) button, .woocommerce-product-search input[type=submit], .btn.colored-button, .btn.btn-left, .btn.btn-right, .btn:not(.colored-button):not(.btn-left):not(.btn-right):not(.btn-just-icon):not(.menu-item):not(.hestia-sidebar-open):not(.hestia-sidebar-close){border-radius:3px;}
@media (min-width: 769px){
.page-header.header-small .hestia-title,
.page-header.header-small .title,
h1.hestia-title.title-in-content,
.main article.section .has-title-font-size {
font-size: 42px;
}}
</style>
<link rel='stylesheet' id='hestia_fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A300%2C400%2C500%2C700%7CRoboto+Slab%3A400%2C700&#038;subset=latin%2Clatin-ext&#038;ver=3.0.20' type='text/css' media='all' />
<script type='text/javascript' src='/wp-includes/js/jquery/jquery.min.js?ver=3.6.0' id='jquery-core-js'></script>
<script type='text/javascript' src='/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2' id='jquery-migrate-js'></script>
<link rel="https://api.w.org/" href="/wp-json/" /><link rel="alternate" type="application/json" href="/wp-json/wp/v2/posts/1068" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="/wp-includes/wlwmanifest.xml" />
<meta name="generator" content="WordPress 5.8.4" />
<link rel="canonical" href="/2019/01/06/secure-boot-nest-pas-simple/" />
<link rel='shortlink' href='/?p=1068' />
<link rel="alternate" type="application/json+oembed" href="/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.hugopoi.net%2F2019%2F01%2F06%2Fsecure-boot-nest-pas-simple%2F" />
<link rel="alternate" type="text/xml+oembed" href="/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.hugopoi.net%2F2019%2F01%2F06%2Fsecure-boot-nest-pas-simple%2F&#038;format=xml" />
<meta name="description" content="" />
<style type="text/css" id="custom-background-css">
body.custom-background { background-color: #000000; }
</style>
<style type="text/css" id="wp-custom-css">
@media only screen and (min-width:1440px){
/* styles for browsers larger than 1440px; */
.container{
width: 1600px;
}
}
.wp-block {
max-width: initial;
} </style>
</head>
<body class="post-template-default single single-post postid-1068 single-format-standard custom-background blog-post header-layout-default">
<div class="wrapper post-1068 post type-post status-publish format-standard has-post-thumbnail hentry category-aventure-pc category-logiciels default ">
<header class="header ">
<div style="display: none"></div> <nav class="navbar navbar-default navbar-fixed-top hestia_left navbar-not-transparent">
<div class="container">
<div class="navbar-header">
<div class="title-logo-wrapper">
<a class="navbar-brand" href="/"
title="HugoPoi">
<p>HugoPoi</p></a>
</div>
<div class="navbar-toggle-wrapper">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#main-navigation">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="sr-only">Déplier la navigation</span>
</button>
</div>
</div>
<div id="main-navigation" class="collapse navbar-collapse"><ul id="menu-main-menu" class="nav navbar-nav"><li id="menu-item-985" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-home menu-item-985"><a title="Home" href="/">Home</a></li>
<li id="menu-item-1281" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1281"><a title="Videos" href="https://stream.hugopoi.net/channel/1/">Videos</a></li>
<li id="menu-item-1332-fr" class="lang-item lang-item-204 lang-item-fr current-lang lang-item-first menu-item menu-item-type-custom menu-item-object-custom menu-item-1332-fr"><a title="Français" href="/2019/01/06/secure-boot-nest-pas-simple/" hreflang="fr-FR" lang="fr-FR">Français</a></li>
<li id="menu-item-1332-en" class="lang-item lang-item-206 lang-item-en no-translation menu-item menu-item-type-custom menu-item-object-custom menu-item-1332-en"><a title="English" href="/en/" hreflang="en-US" lang="en-US">English</a></li>
</ul></div> </div>
</nav>
</header>
<div id="primary" class="boxed-layout-header page-header header-small" data-parallax="active" ><div class="container"><div class="row"><div class="col-md-10 col-md-offset-1 text-center"><h1 class="hestia-title entry-title">Secure Boot n&rsquo;est pas simple</h1><h4 class="author">Publié par <a href="/author/hugopoi/" class="vcard author"><strong class="fn">HugoPoi</strong></a> le <time class="entry-date published" datetime="2019-01-06T11:38:00+01:00" content="2019-01-06">6 janvier 2019</time><time class="updated hestia-hidden" datetime="2019-01-06T12:02:56+01:00">6 janvier 2019</time></h4></div></div></div><div class="header-filter" style="background-image: url(/wp-content/uploads/2019/01/SecureBoots.jpg);"></div></div>
<div class="main main-raised ">
<div class="blog-post blog-post-wrapper">
<div class="container">
<article id="post-1068" class="section section-text">
<div class="row">
<div class="col-md-8 single-post-container" data-layout="sidebar-right">
<div class="single-post-wrap entry-content"><h2>1. Pourquoi cet article</h2>
<p>La sécurité de nos ordinateurs c&rsquo;est un peu amélioré si on sait ce qu&rsquo;on fait avec. Avant pour démarrer votre OS le BIOS utilisait un MBR Master Boot Record présent dans le premier secteur de votre disque-dur. Ce MBR pouvait être écrasé par n&rsquo;importe quel programme ayant accès au MBR, en général il faut être root sous linux pour installer un nouveau MBR. Donc malware ou virus disposant des droits d&rsquo;administration pouvait s&rsquo;installer en tant que MBR gagnant ainsi en persistance. Autre attaque possible est tout simplement un media USB qui démarre et écrase le MBR par un programme malveillant. Une fois votre machine redémarrer pas de possibilité de contrôler quel boot loader a été exécuté par votre BIOS. Et ça là qu&rsquo;entre en jeux SecureBoot introduit dans les machines disposant de firmware UEFI.</p>
<p>J&rsquo;ai trouvé des articles (<a href="https://soozx.fr/installation-archlinux-completement-chiffre-boot-compris-uefi/">exemple</a>) parlant de sécurité d&rsquo;OS avec la mise en place de chiffrement de disque complet, ou de partition avec LUKS sur LVM. C&rsquo;est une bonne chose de mettre en place ce genre solution surtout sur des ordinateurs portables. Problème ces articles ne parle pas de la sécurité de la machine dans son ensemble et prennent quelques raccourcis sur les bénéfices de chiffrer par exemple la partition /boot de votre linux.</p>
<p>Chiffrer votre partition de boot :</p>
<ul>
<li>NE VOUS PROTÈGE PAS DES ATTAQUES SUR LE BOOTLOADER ( écrasement du boot loader par un keylogger par exemple)</li>
<li>IL NE MASQUE PAS VRAIMENT l&rsquo;OS QUE VOUS UTILISEZ pour la simple et bonne raison que si votre boot loader est GRUB il y a de grande chance que ce soit du Linux derrière et uniquement avec le hash de votre bootloader on pourra identifier quel distribution vous utilisez et quel version.</li>
</ul>
<p>Dans la pratique si on peut compromettre la chaîne de démarrage en amont de loutil qui va déchiffrer/démarrer l&rsquo;OS, vous ne pouvez quasiment rien faire contre les attaques dont vous êtes la cible. Cela vous protège au moins contre le vol physique de votre machine si vous avez une passphrase suffisamment longue.</p>
<h2>2. Comment ça marche</h2>
<p>SecureBoot fonctionne à l&rsquo;aide de certificats X509 comme une <a href="https://fr.wikipedia.org/wiki/Infrastructure_%C3%A0_cl%C3%A9s_publiques">PKI</a>. Votre UEFI contient des clés publiques/certificats. Les chargeurs/loader/bootloader au format efi sont signés avec les clés privés correspondantes. Quand votre ordinateur démarre l&rsquo;UEFI se charge de vérifier que le bootloader suivant est bien signé avec une clé publique présente dans la <strong>DB</strong>.</p>
<p>SecureBoot fonctionne avec 4 types de clés.</p>
<p><strong>PK</strong> Platform Key sert à gérer les mise à jours de la clé KEK, c&rsquo;est la clé maîtresse. En général elle est pré-configuré avec une clé fournit par le fabricant de carte mère.</p>
<p><strong>KEK</strong> Key Exchange Key sert à gérer les mise à jours des clés suivantes. Peut en contenir plusieurs dont celle de Microsoft qui permet de mettre à jour les autres clés via un processus de MAJ automatique. Les clés qui sont ici vous permettent de mettre à jour la <strong>DB</strong> et la <strong>DBX</strong>.</p>
<p><strong>DB</strong> contient les clés publiques de confiance. Pré-chargé avec celles de Microsoft par défaut sur la majorité des PC. C&rsquo;est cette base de données qui va vérifier les signatures des bootloaders.</p>
<p><strong>DBX</strong> c&rsquo;est la liste noire pour les clés publiques que l&rsquo;on veut blacklister.</p>
<p><strong>MOK</strong> c&rsquo;est la même chose que la DB sauf que ce n&rsquo;est pas standard donc pas gérer/implémenté par votre UEFI mais par Shim et donc stocké dans une variable UEFI.</p>
<h2>3. Activer SecureBoot la méthode simple</h2>
<p>Vous avez peut-être sans le savoir, déjà SecureBoot d&rsquo;activé sur votre machine. Vous pouvez vérifier avec la commande <code>bootctl status --path /boot/efi</code>.</p>
<h3>3.1. Activer Secure Boot</h3>
<ol>
<li>Une installation qui démarre avec UEFI est un pré-requis.</li>
<li>Vous pouvez normalement installer Ubuntu et dérivé avec SecureBoot d&rsquo;activé cela devrait se charger de tout configurer automatiquement. ( Sous LinuxMint il demande de désactiver SecureBoot mais vous pouvez répondre non)</li>
<li>Sinon vous pouvez vérifier que vous avez les paquets <code>shim-signed grub-efi-amd64-signed</code> d&rsquo;installés à l&rsquo;aide de la commande <code>apt search signed | grep ^i</code>, installer ces paquets permet utiliser les clés de Microsoft pré-installés dans votre BIOS pour démarrer avec SecureBoot.</li>
<li>Une distribution qui dispose du loader Shim signé avec la clé de Microsoft Partner&rsquo;s. Normalement c&rsquo;est le cas pour Ubuntu, LinuxMint, OpenSuse et généralement les distributions connexe. Si c&rsquo;est le cas vous devriez avoir shimx64.efi dans le répertoire <code>/boot/efi/EFI/ubuntu/</code>. Vous pouvez vérifier qu&rsquo;il est signé avec <a href="https://sourceforge.net/p/refind/code/ci/master/tree/keys/microsoft-uefica-public.der">la clé de Microsoft</a> :
<div class="wp_syntax" style="position:relative;"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> https:<span style="color: #000000; font-weight: bold;">//</span>sourceforge.net<span style="color: #000000; font-weight: bold;">/</span>p<span style="color: #000000; font-weight: bold;">/</span>refind<span style="color: #000000; font-weight: bold;">/</span>code<span style="color: #000000; font-weight: bold;">/</span>ci<span style="color: #000000; font-weight: bold;">/</span>master<span style="color: #000000; font-weight: bold;">/</span>tree<span style="color: #000000; font-weight: bold;">/</span>keys<span style="color: #000000; font-weight: bold;">/</span>microsoft-uefica-public.der?<span style="color: #007800;">format</span>=raw <span style="color: #660033;">-O</span> microsoft-uefica-public.der
openssl x509 <span style="color: #660033;">-in</span> microsoft-uefica-public.der <span style="color: #660033;">-inform</span> der <span style="color: #660033;">-out</span> microsoft-uefica-public.crt
<span style="color: #c20cb9; font-weight: bold;">sudo</span> sbverify <span style="color: #660033;">--cert</span> microsoft-uefica-public.crt <span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>efi<span style="color: #000000; font-weight: bold;">/</span>EFI<span style="color: #000000; font-weight: bold;">/</span>BOOT<span style="color: #000000; font-weight: bold;">/</span>BOOTX64.EFI
<span style="color: #c20cb9; font-weight: bold;">sudo</span> sbverify <span style="color: #660033;">--cert</span> microsoft-uefica-public.crt <span style="color: #000000; font-weight: bold;">/</span>boot<span style="color: #000000; font-weight: bold;">/</span>efi<span style="color: #000000; font-weight: bold;">/</span>EFI<span style="color: #000000; font-weight: bold;">/</span>ubuntu<span style="color: #000000; font-weight: bold;">/</span>shimx64.EFI</pre></td></tr></table><p class="theCode" style="display:none;">wget https://sourceforge.net/p/refind/code/ci/master/tree/keys/microsoft-uefica-public.der?format=raw -O microsoft-uefica-public.der
openssl x509 -in microsoft-uefica-public.der -inform der -out microsoft-uefica-public.crt
sudo sbverify --cert microsoft-uefica-public.crt /boot/efi/EFI/BOOT/BOOTX64.EFI
sudo sbverify --cert microsoft-uefica-public.crt /boot/efi/EFI/ubuntu/shimx64.EFI</p></div>
</li>
<li>Une fois shim-signed installé et que vous avez vérifié ça signature, vous pouvez redémarrer <code>sudo systemctl reboot --firmware</code> pour activer SecureBoot dans votre UEFI.</li>
<li>Une fois Secure Boot activer dans votre UEFI/BIOS il devrait réussir à démarrer sur votre Linux sans problème.</li>
</ol>
<h3>3.2. MOK</h3>
<p><a href="/wp-content/uploads/2018/11/uefi-secure-boot-mok2.png"><img loading="lazy" src="/wp-content/uploads/2018/11/uefi-secure-boot-mok2.png" alt="" class="alignright size-full wp-image-1079" width="430" height="872" srcset="/wp-content/uploads/2018/11/uefi-secure-boot-mok2.png 430w, /wp-content/uploads/2018/11/uefi-secure-boot-mok2-148x300.png 148w" sizes="(max-width: 430px) 100vw, 430px" /></a>Maintenant vous avez normalement SecureBoot d&rsquo;activé. Cependant il se peut que vous utilisiez des drivers qui ne sont pas encore signés par des clés de confiances. Pour cela vous allez devoir utiliser MOK. Machine Owner Key est une juste une ou plusieurs clés que nous allons générer et utiliser pour signer les drivers. Pour cela vous allez devoir installer ou ré-installer les modules kernels qui doivent être signés. Ceci va normalement déclencher le processus d&rsquo;inscription d&rsquo;une clé MOK qui va être ajouter dans la chaîne de confiance de boot.</p>
<p><code>apt reinstall nvidia-dkms</code></p>
<p>Cette étape devrait demander un mot de passe qui vous sera redemander une seule et unique fois au redémarrage suivant.</p>
<p>Le processus est assez obscure mais le mot de passe donné sert à générer une demande d&rsquo;inscription. Au prochain redémarrage Shim va voir qu&rsquo;il y a une demande en attente et va lancer MokManager. Votre UEFI étant encore dans un état de pré-boot il peut enregistrer des variables de boot signées dans la NVRAM de votre UEFI. MokManager va allors confirmer que c&rsquo;est bien vous qui avez déclenché l&rsquo;inscription et va vous demandez de confirmer avec le mot de passe l&rsquo;inscription de la clé dans la base de donnée MOK qui est enregistré dans la NVRAM. La base MOK est stocké dans une variable « Boot Services Only Variables », et ne peut pas être édité une fois que Shim a lancé le bootloader suivant.</p>
<p>Pour résumer:</p>
<ol>
<li>Lancer <code>apt reinstall nvidia-dkms-390</code> et renseigner un mot de passe MOK.</li>
<li>Reboot</li>
<li>Au redémarrage MokManager devrait se lancer</li>
<li>Sélectionner Enroll MOK</li>
<li>Il vous présente la clé à ajouter</li>
<li>Confirmer avec le mot de passe</li>
</ol>
<style type="text/css">
#gallery-1 {
margin: auto;
}
#gallery-1 .gallery-item {
float: left;
margin-top: 10px;
text-align: center;
width: 25%;
}
#gallery-1 img {
border: 2px solid #cfcfcf;
}
#gallery-1 .gallery-caption {
margin-left: 0;
}
/* see gallery_shortcode() in wp-includes/media.php */
</style>
<div id='gallery-1' class='gallery galleryid-1068 gallery-columns-4 gallery-size-thumbnail'><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_185841/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_185841-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_185853/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_185853-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_190443/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_190443-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_190626/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_190626-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><br style="clear: both" /><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_190648/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_190648-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_190723/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_190723-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_190736/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_190736-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_linuxmint19-lxde-x64-clone-secureboot-test_2018-11-18_190747/'><img width="150" height="150" src="/wp-content/uploads/2018/11/Screenshot_LinuxMint19-LXDE-x64-clone-secureboot-test_2018-11-18_190747-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /></a>
</dt></dl><br style="clear: both" />
</div>
<p>Sous Mint la clé MOK est généré dans <code>/var/lib/shim-signed/mok/</code> au moment de l&rsquo;installation même si SecureBoot n&rsquo;est pas activé. Même comportement sur Ubuntu.</p>
<p>Vous pouvez générer une nouvelle clé MOK avec l&rsquo;aide de <code>update-secureboot-policy</code>. Autre point important les clés MOK ne sont PAS supprimés quand vous en importez une nouvelle donc il faut penser à faire le ménage à l&rsquo;aide de <code>mokutil</code>. Pensez à supprimer l&rsquo;ancienne d&rsquo;abord à l&rsquo;aide de <code>mokutil --delete MOK.der</code>. Supprimez ensuite manuellement les fichiers MOK.der et MOK.priv avant d&rsquo;utiliser la commande <code>update-secureboot-policy --new-key &amp;&amp; update-secureboot-policy --enroll-key</code>. Vous devrez ensuite signer à nouveau vos drivers.</p>
<h3>3.3. Les choses que vous DEVEZ faire avec SecureBoot activé</h3>
<ul>
<li>Ajouter un mot de passe sur la configuration de votre UEFI. Cela empêchera un attaquant de réinitialiser les clés présente dans le UEFI et aussi de désactiver SecureBoot.</li>
<li>Si possible désactiver dans votre UEFI toutes les entrées de démarrages autre que votre OS. Rend difficile le démarrage d&rsquo;une attaque physique via une clé USB ou autre media amovible.</li>
<li>Utiliser le chiffrement de disque pour /var au minimum car les clés MOK qui sont enroll n&rsquo;ont pas de passphrase, CE QUI EST TRES CON. Je vous recommande de toute façon d&rsquo;utiliser l&rsquo;option LVM + LUKS à l&rsquo;installation.</li>
<li>Utiliser sudo ou le compte root avec attention.</li>
</ul>
<h3>3.4. Les choses que vous devez savoir quand vous utilisez cette méthode</h3>
<p>Cela peut paraître con mais vous devez faire confiance à beaucoup de personne avec cette méthode.</p>
<div id="attachment_1072" style="width: 678px" class="wp-caption alignright"><a href="/wp-content/uploads/2018/11/trusting_schema_for_default_secureboot_configuration.png"><img aria-describedby="caption-attachment-1072" loading="lazy" src="/wp-content/uploads/2018/11/trusting_schema_for_default_secureboot_configuration-842x1024.png" alt="" class="wp-image-1072" width="668" height="812" srcset="/wp-content/uploads/2018/11/trusting_schema_for_default_secureboot_configuration-842x1024.png 842w, /wp-content/uploads/2018/11/trusting_schema_for_default_secureboot_configuration-247x300.png 247w, /wp-content/uploads/2018/11/trusting_schema_for_default_secureboot_configuration-768x934.png 768w, /wp-content/uploads/2018/11/trusting_schema_for_default_secureboot_configuration.png 929w" sizes="(max-width: 668px) 100vw, 668px" /></a><p id="caption-attachment-1072" class="wp-caption-text">Schéma de confiance des signatures pour Ubuntu et dérivés en utilisant Shim-signed</p></div>
<h4>Le fabricant de votre carte mère et de l&rsquo;UEFI ainsi que le fabricant de votre CPU</h4>
<p>Mise à part changer votre UEFI par une version libre (coreboot et seabios) et retirer I&rsquo;Intel Management Engine vous n&rsquo;avez pas trop le choix ici.</p>
<h4>Microsoft</h4>
<p>Votre UEFI à la clé principale de Microsoft pré-chargé donc n&rsquo;importe quel bootloader signé par Microsoft peut toujours démarrer sur votre machine. Surtout que Microsoft a merdé plusieurs fois et certaines versions de bootmgr.efi permettent d&rsquo;outrepassé les signatures. Ce problème peut-être palier par la méthode 2.</p>
<h4>Verisign</h4>
<p>La ça devient fun, oui votre UEFI vient généralement avec une deuxième clé qui est la clé « Microsoft for third-party applications and driver » cette clé sert pour signer les drivers qui se charge dans Windows ainsi que les ROM PXE par exemple. Cette clé est gérée par Verisign et <a href="http://www.rodsbooks.com/efi-bootloaders/secureboot.html#whatis">de ce que j&rsquo;ai lu</a> n&rsquo;importe qui peut demander à signer un programme pour la modique somme de 99$ donc LOL. C&rsquo;est aussi la clé qui est utilisé pour signer Shim. Ce problème peut-être palier par la méthode 2 mais certain matériel dépende de cette clé pour fonctionner correctement.</p>
<h4>Canonical</h4>
<p>Sous LinuxMint et Ubuntu le loader Shim est signé par la clé « Microsoft for third-party applications and driver » et contient la clé de Canonical pour pouvoir vérifier la signature de Grub ainsi que du kernel. Si vous utilisez les dépots de Ubuntu ou dérivé vous faites déjà confiance&#8230;</p>
<h4>Les logiciels que vous exécutez en root ou en temps que module kernel</h4>
<p>Derniers maillon de la chaîne les drivers chargés par le kernel nécessite dêtre signés. Ils sont compilés en tant que modules dkms au moment ou vous les installez. Ils seront alors signés par votre clé MOK. Toute la sécurité de la chaîne de démarrage peut-être compromise si un driver malveillant est signé avec votre clé MOK, il pourra alors lancer du code non-signé.</p>
<p>Et si vous êtes parano vous pouvez <a href="https://medium.com/s/story/i-am-a-computer-scientist-and-i-am-here-to-tell-you-to-never-trust-a-computer-with-anything-5a506c470d64">lire ça</a>.</p>
<h2>4. Activer SecureBoot la méthode compliqué</h2>
<h3>4.1. Générer ses propres clés</h3>
<p>Générer nos clés à l&rsquo;aide de openssl en utilisant le script suivant</p>
<p><code></code></p>
<div class="wp_syntax" style="position:relative;"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>code<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #666666; font-style: italic;"># Copyright (c) 2015 by Roderick W. Smith</span>
<span style="color: #666666; font-style: italic;"># Edited by Hugo P. Dec 2018</span>
<span style="color: #666666; font-style: italic;"># Licensed under the terms of the GPL v3</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">apt-get install</span> efitools openssl
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;Enter a Common Name to embed in the keys: &quot;</span>
<span style="color: #c20cb9; font-weight: bold;">read</span> NAME
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;Enter a password to protect the keys: &quot;</span>
<span style="color: #c20cb9; font-weight: bold;">read</span> PASSWORD
&nbsp;
openssl req <span style="color: #660033;">-new</span> <span style="color: #660033;">-x509</span> <span style="color: #660033;">-newkey</span> rsa:<span style="color: #000000;">2048</span> <span style="color: #660033;">-passout</span> pass:<span style="color: #007800;">$PASSWORD</span> <span style="color: #660033;">-subj</span> <span style="color: #ff0000;">&quot;/CN=<span style="color: #007800;">$NAME</span> PK/&quot;</span> <span style="color: #660033;">-keyout</span> PK.key \
<span style="color: #660033;">-out</span> PK.crt <span style="color: #660033;">-days</span> <span style="color: #000000;">3650</span> <span style="color: #660033;">-sha256</span>
openssl req <span style="color: #660033;">-new</span> <span style="color: #660033;">-x509</span> <span style="color: #660033;">-newkey</span> rsa:<span style="color: #000000;">2048</span> <span style="color: #660033;">-passout</span> pass:<span style="color: #007800;">$PASSWORD</span> <span style="color: #660033;">-subj</span> <span style="color: #ff0000;">&quot;/CN=<span style="color: #007800;">$NAME</span> KEK/&quot;</span> <span style="color: #660033;">-keyout</span> KEK.key \
<span style="color: #660033;">-out</span> KEK.crt <span style="color: #660033;">-days</span> <span style="color: #000000;">3650</span> <span style="color: #660033;">-sha256</span>
openssl req <span style="color: #660033;">-new</span> <span style="color: #660033;">-x509</span> <span style="color: #660033;">-newkey</span> rsa:<span style="color: #000000;">2048</span> <span style="color: #660033;">-passout</span> pass:<span style="color: #007800;">$PASSWORD</span> <span style="color: #660033;">-subj</span> <span style="color: #ff0000;">&quot;/CN=<span style="color: #007800;">$NAME</span> DB/&quot;</span> <span style="color: #660033;">-keyout</span> DB.key \
<span style="color: #660033;">-out</span> DB.crt <span style="color: #660033;">-days</span> <span style="color: #000000;">3650</span> <span style="color: #660033;">-sha256</span>
openssl x509 <span style="color: #660033;">-in</span> PK.crt <span style="color: #660033;">-out</span> PK.cer <span style="color: #660033;">-outform</span> DER
openssl x509 <span style="color: #660033;">-in</span> KEK.crt <span style="color: #660033;">-out</span> KEK.cer <span style="color: #660033;">-outform</span> DER
openssl x509 <span style="color: #660033;">-in</span> DB.crt <span style="color: #660033;">-out</span> DB.cer <span style="color: #660033;">-outform</span> DER
&nbsp;
<span style="color: #007800;">GUID</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">uuidgen</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$GUID</span> <span style="color: #000000; font-weight: bold;">&amp;</span>gt; myGUID.txt
&nbsp;
cert-to-efi-sig-list <span style="color: #660033;">-g</span> <span style="color: #007800;">$GUID</span> PK.crt PK.esl
cert-to-efi-sig-list <span style="color: #660033;">-g</span> <span style="color: #007800;">$GUID</span> KEK.crt KEK.esl
cert-to-efi-sig-list <span style="color: #660033;">-g</span> <span style="color: #007800;">$GUID</span> DB.crt DB.esl
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> noPK.esl
<span style="color: #c20cb9; font-weight: bold;">touch</span> noPK.esl
&nbsp;
sign-efi-sig-list <span style="color: #660033;">-t</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')</span>&quot;</span> \
<span style="color: #660033;">-k</span> PK.key <span style="color: #660033;">-c</span> PK.crt PK PK.esl PK.auth
&nbsp;
sign-efi-sig-list <span style="color: #660033;">-t</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')</span>&quot;</span> \
<span style="color: #660033;">-k</span> PK.key <span style="color: #660033;">-c</span> PK.crt KEK KEK.esl KEK.auth
sign-efi-sig-list <span style="color: #660033;">-t</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')</span>&quot;</span> \
<span style="color: #660033;">-k</span> KEK.key <span style="color: #660033;">-c</span> KEK.crt db DB.esl DB.auth
<span style="color: #666666; font-style: italic;"># This file is dangerous and must be kept in a safe place it can disable SecureBoot</span>
<span style="color: #666666; font-style: italic;"># sign-efi-sig-list -t &quot;$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')&quot; \</span>
<span style="color: #666666; font-style: italic;"># -k PK.key -c PK.crt PK noPK.esl noPK.auth</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">chmod</span> 0600 <span style="color: #000000; font-weight: bold;">*</span>.key
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;For use with KeyTool, copy the *.auth and *.esl files to a FAT USB&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;flash drive or to your EFI System Partition (ESP).&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;For use with most UEFIs' built-in key managers, copy the *.cer files.&quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;&quot;</span>
<span style="color: #000000; font-weight: bold;">&lt;/</span>code<span style="color: #000000; font-weight: bold;">&gt;</span></pre></td></tr></table><p class="theCode" style="display:none;">&lt;code&gt;#!/bin/bash
# Copyright (c) 2015 by Roderick W. Smith
# Edited by Hugo P. Dec 2018
# Licensed under the terms of the GPL v3
apt-get install efitools openssl
echo -n &quot;Enter a Common Name to embed in the keys: &quot;
read NAME
echo -n &quot;Enter a password to protect the keys: &quot;
read PASSWORD
openssl req -new -x509 -newkey rsa:2048 -passout pass:$PASSWORD -subj &quot;/CN=$NAME PK/&quot; -keyout PK.key \
-out PK.crt -days 3650 -sha256
openssl req -new -x509 -newkey rsa:2048 -passout pass:$PASSWORD -subj &quot;/CN=$NAME KEK/&quot; -keyout KEK.key \
-out KEK.crt -days 3650 -sha256
openssl req -new -x509 -newkey rsa:2048 -passout pass:$PASSWORD -subj &quot;/CN=$NAME DB/&quot; -keyout DB.key \
-out DB.crt -days 3650 -sha256
openssl x509 -in PK.crt -out PK.cer -outform DER
openssl x509 -in KEK.crt -out KEK.cer -outform DER
openssl x509 -in DB.crt -out DB.cer -outform DER
GUID=`uuidgen`
echo $GUID &amp;gt; myGUID.txt
cert-to-efi-sig-list -g $GUID PK.crt PK.esl
cert-to-efi-sig-list -g $GUID KEK.crt KEK.esl
cert-to-efi-sig-list -g $GUID DB.crt DB.esl
rm -f noPK.esl
touch noPK.esl
sign-efi-sig-list -t &quot;$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')&quot; \
-k PK.key -c PK.crt PK PK.esl PK.auth
sign-efi-sig-list -t &quot;$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')&quot; \
-k PK.key -c PK.crt KEK KEK.esl KEK.auth
sign-efi-sig-list -t &quot;$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')&quot; \
-k KEK.key -c KEK.crt db DB.esl DB.auth
# This file is dangerous and must be kept in a safe place it can disable SecureBoot
# sign-efi-sig-list -t &quot;$(date --date='1 second' +'%Y-%m-%d %H:%M:%S')&quot; \
# -k PK.key -c PK.crt PK noPK.esl noPK.auth
chmod 0600 *.key
echo &quot;&quot;
echo &quot;&quot;
echo &quot;For use with KeyTool, copy the *.auth and *.esl files to a FAT USB&quot;
echo &quot;flash drive or to your EFI System Partition (ESP).&quot;
echo &quot;For use with most UEFIs' built-in key managers, copy the *.cer files.&quot;
echo &quot;&quot;
&lt;/code&gt;</p></div>
<p><code><br />
</code></p>
<p><code></code></p>
<h3>4.2. Signer la chaine de démarrage</h3>
<p>Signer les trucs que l&rsquo;on a besoin pour booter avec (essentiellement shim et/ou grub)</p>
<pre>sbsign --key DB.key --cert DB.crt --output /boot/efi/EFI/ubuntu/shimx64-signed.efi /boot/efi/EFI/ubuntu/shimx64.efi</pre>
<h3>4.3. Installer les clés via l&rsquo;UEFI</h3>
<p>Le plus simple est généralement de passer par le firmware de votre carte-mère pour aller installer vos certificats.</p>
<p>Aller dans votre uefi et trouver le menu pour configurer SecureBoot ci-dessous le menu de OVMF. (Dans mon environnement de virtualisation)</p>
<p>Vous devez passer votre SecureBoot en mode Setup pour effacer les anciens certificats et installer les vôtres.</p>
<style type="text/css">
#gallery-2 {
margin: auto;
}
#gallery-2 .gallery-item {
float: left;
margin-top: 10px;
text-align: center;
width: 25%;
}
#gallery-2 img {
border: 2px solid #cfcfcf;
}
#gallery-2 .gallery-caption {
margin-left: 0;
}
/* see gallery_shortcode() in wp-includes/media.php */
</style>
<div id='gallery-2' class='gallery galleryid-1068 gallery-columns-4 gallery-size-thumbnail'><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_test-uefi-install-mok_2018-12-23_172902/'><img width="150" height="150" src="/wp-content/uploads/2018/12/Screenshot_test-uefi-install-mok_2018-12-23_172902-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" aria-describedby="gallery-2-1095" /></a>
</dt>
<dd class='wp-caption-text gallery-caption' id='gallery-2-1095'>
OVMF UEFI
</dd></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_test-uefi-install-mok_2018-12-23_172913/'><img width="150" height="150" src="/wp-content/uploads/2018/12/Screenshot_test-uefi-install-mok_2018-12-23_172913-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" aria-describedby="gallery-2-1094" /></a>
</dt>
<dd class='wp-caption-text gallery-caption' id='gallery-2-1094'>
Secure Boot Menu OVMF
</dd></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_test-uefi-install-mok_2018-12-23_173110/'><img width="150" height="150" src="/wp-content/uploads/2018/12/Screenshot_test-uefi-install-mok_2018-12-23_173110-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" aria-describedby="gallery-2-1093" /></a>
</dt>
<dd class='wp-caption-text gallery-caption' id='gallery-2-1093'>
Custom Mode Secure Boot Configuration Menu OVMF
</dd></dl><dl class='gallery-item'>
<dt class='gallery-icon landscape'>
<a href='/2019/01/06/secure-boot-nest-pas-simple/screenshot_test-uefi-install-mok_2018-12-23_173316/'><img width="150" height="150" src="/wp-content/uploads/2018/12/Screenshot_test-uefi-install-mok_2018-12-23_173316-150x150.png" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" aria-describedby="gallery-2-1092" /></a>
</dt>
<dd class='wp-caption-text gallery-caption' id='gallery-2-1092'>
OVMF UEFI Shell test loading some non signed stuff
</dd></dl><br style="clear: both" />
</div>
<p>Installer dans l&rsquo;ordre la DB, le KEK puis en dernier le certificat PK qui devrait suivant votre firmware passer votre SecureBoot en position « User mode » qui veut dire verrouillé.</p>
<p>Normalement passé cette étape votre machine peut uniquement lancer des programmes signé par votre clé DB.</p>
<p>Pour configurer SecureBoot sur votre machine vous avez 3 autres manières de procéder :</p>
<ul>
<li>Utiliser Keytool.efi présent dans le package efitools (/usr/share/efitools/efi/) vous permez de manager vos clés sans passer par votre UEFI pratique si votre UEFI est merdique à souhait cependant il vous faudra obligatoirement trouver l&rsquo;option pour passer en mode « Setup » pour pouvoir enregistrer votre PK.</li>
<li>Utiliser Lockdown.efi cet outils est une solution si vous voulez automatiser le processus de Setup Secure Boot sur beaucoup de machine, il vous faudra compiler le bordel pour insérer vos clés dans le binaire.</li>
<li>Dernière solution utiliser <b>efi-updatevar </b>utilitaire systeme pour configurer Secure Boot.</li>
</ul>
<div class="wp_syntax" style="position:relative;"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#In setup mode</span>
<span style="color: #c20cb9; font-weight: bold;">sudo</span> efi-updatevar <span style="color: #660033;">-e</span> <span style="color: #660033;">-f</span> DB.esl db
<span style="color: #c20cb9; font-weight: bold;">sudo</span> efi-updatevar <span style="color: #660033;">-e</span> <span style="color: #660033;">-f</span> KEK.esl kek
<span style="color: #c20cb9; font-weight: bold;">sudo</span> efi-updatevar <span style="color: #660033;">-f</span> PK.auth PK</pre></td></tr></table><p class="theCode" style="display:none;">#In setup mode
sudo efi-updatevar -e -f DB.esl db
sudo efi-updatevar -e -f KEK.esl kek
sudo efi-updatevar -f PK.auth PK</p></div>
<p>ET N&rsquo;OUBLIEZ DE FAIRE LES CHOSES INDIQUEES AU POINT 3.3</p>
<h2>5. Commandes utiles</h2>
<p>Vérifier la configuration de démarrage</p>
<p><code>sudo bootctl status --path /boot/efi</code></p>
<p>Vérifier que SecureBoot est activé ( Il doit y avoir un 1 en dernier sur le retour de la commande)</p>
<p><code>sudo od -An -t u1 /sys/firmware/efi/efivars/SecureBoot-*</code></p>
<p>Afficher la liste des certificats installer dans l&rsquo;UEFI</p>
<p><code>efi-readvar</code></p>
<p>Redémarrer dans le UEFI</p>
<p><code>systemctl reboot --firmware</code></p>
<p>Vérifier la signature d&rsquo;un programme efi avec une clé publique</p>
<p><code>sbverify --cert somecert.crt /boot/efi/EFI/BOOT/BOOTX64.EFI</code></p>
<p>Convertir une certificat du format x509 vers DER (utile pour charger les certificats dans votre UEFI, vous pouvez utiliser l&rsquo;extension .der ou .cer)</p>
<p><code>openssl x509 -in PK.crt -outform DER -out PK.cer</code></p>
<p>Signe un programme efi avec la clé DB</p>
<p><code>sbsign --key DB.key --cert DB.crt HelloWorld.efi --output HelloWorld-signed.efi</code></p>
<p>Affiche les clés de signatures acceptées et chargées pendant le boot dans le kernel</p>
<p><code>sudo cat /proc/keys | grep asymmetri<br />sudo keyctl list %:.secondary_trusted_keys</code></p>
<p>Afficher la Subject Key Identifier d&rsquo;un certificat (pour vérifier quel clé est chargée)</p>
<p><code>openssl x509 -inform DER -in /var/lib/shim-signed/mok.backup/MOK.der -text | grep -A1 'Subject Key'</code></p>
<p>Afficher les logs de démarrage concernant SecureBoot</p>
<p><code>dmesg | grep 'Loaded UEFI' -C 3</code></p>
<p>Vérifier les informations du certificat MOK généré</p>
<p><code>openssl x509 -subject -dates -fingerprint -inform DER -in /var/lib/shim-signed/mok/MOK.der</code></p>
<p>Régénérer une clé MOK manuellement</p>
<p><code>sudo update-secureboot-policy --help</code></p>
<p>Gérer les clés MOK</p>
<p><code>mokutil</code></p>
<h2>6. Liens / sources</h2>
<ul>
<li>Tous ce que j&rsquo;ai raconté en version anglophone introduction à SecureBoot <a href="http://www.rodsbooks.com/efi-bootloaders/secureboot.html">http://www.rodsbooks.com/efi-bootloaders/secureboot.html</a></li>
<li>Tous ce que j&rsquo;ai raconté en version anglophone installer vos clés <a href="http://www.rodsbooks.com/efi-bootloaders/controlling-sb.html">http://www.rodsbooks.com/efi-bootloaders/controlling-sb.html</a></li>
<li>Différentes clés publiques présentes dans les firmware UEFI <a href="https://sourceforge.net/p/refind/code/ci/master/tree/keys/">https://sourceforge.net/p/refind/code/ci/master/tree/keys/</a></li>
<li>Documentation de SecureBoot pour QEMU/KVM <a href="https://en.opensuse.org/openSUSE:UEFI_Secure_boot_using_qemu-kvm">https://en.opensuse.org/openSUSE:UEFI_Secure_boot_using_qemu-kvm</a></li>
<li>Article très complet sur comment marche un UEFI et SecureBoot <a href="https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_uefi_secboot.html">https://www.suse.com/documentation/sles11/book_sle_admin/data/sec_uefi_secboot.html</a></li>
<li>Comment installer ces propres clés SecureBoot <a href="https://community.linuxmint.com/tutorial/view/2360">https://community.linuxmint.com/tutorial/view/2360</a></li>
<li>Bon tutorial sur comment installer LinuxMint et autres avec partition chiffré en manuel <a href="https://community.linuxmint.com/tutorial/view/2061">https://community.linuxmint.com/tutorial/view/2061</a></li>
<li>Wiki de Ubuntu concernant SecureBoot ça parle un de comment c&rsquo;est géré chez eux mais aucun détails très claire, c&rsquo;est bof <a href="https://wiki.ubuntu.com/UEFI/SecureBoot">https://wiki.ubuntu.com/UEFI/SecureBoot</a></li>
<li>Le wiki de ArchLinux concernant SecureBoot très peu d&rsquo;explication juste des commandes <a href="https://wiki.archlinux.org/index.php/Secure_Boot">https://wiki.archlinux.org/index.php/Secure_Boot</a></li>
</ul>
<p></p>
</div>
<div class="section section-blog-info">
<div class="row">
<div class="col-md-6">
<div class="entry-categories">Catégories : <span class="label label-primary"><a href="/category/dossiers/aventure-pc/">Aventure PC</a></span><span class="label label-primary"><a href="/category/logiciels/">Logiciels</a></span> </div>
</div>
<div class="col-md-6">
<div class="entry-social">
<a target="_blank" rel="tooltip"
data-original-title="Partager sur Facebook"
class="btn btn-just-icon btn-round btn-facebook"
href="https://www.facebook.com/sharer.php?u=https://blog.hugopoi.net/2019/01/06/secure-boot-nest-pas-simple/">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" width="20" height="17"><path fill="currentColor" d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path></svg>
</a>
<a target="_blank" rel="tooltip"
data-original-title="Partager sur Twitter"
class="btn btn-just-icon btn-round btn-twitter"
href="http://twitter.com/share?url=https://blog.hugopoi.net/2019/01/06/secure-boot-nest-pas-simple/&#038;text=Secure%20Boot%20n%E2%80%99est%20pas%20simple">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="20" height="17"><path fill="currentColor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg>
</a>
<a rel="tooltip"
data-original-title=" Partager par e-mail"
class="btn btn-just-icon btn-round"
href="mailto:?subject=Secure%20Boot%20n%26rsquo;est%20pas%20simple&#038;body=https://blog.hugopoi.net/2019/01/06/secure-boot-nest-pas-simple/">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="20" height="17"><path fill="currentColor" d="M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z"></path></svg>
</a>
</div>
</div> </div>
<hr>
<div id="comments" class="section section-comments">
<div class="row">
<div class="col-md-12">
<div class="media-area">
<h3 class="hestia-title text-center">
2 commentaires </h3>
<div class="comment even thread-even depth-1 media" id="comment-31291">
<a class="pull-left" href=" ">
<div class="comment-author avatar vcard">
<img alt='' src='https://secure.gravatar.com/avatar/d06671751d36fd6b2bd4d2597a915a1d?s=64&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/d06671751d36fd6b2bd4d2597a915a1d?s=128&#038;d=mm&#038;r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy'/> </div>
</a>
<div class="media-body">
<h4 class="media-heading">
John Doe <small>
&#183; 24 septembre 2020 à 17 h 07 min </small>
</h4>
<p>T&rsquo;es un boss Hugo (sans jeu de mot), ya peu de doc, même en anglais qui résume aussi bien les pas pour en arriver a un truc pratiquement « secure » (les guillemets sont pas la par hasard, avec Coreboot ce serait la cerise sur le gâteau). Merci beaucoup pour ce super travail de recompilation.</p>
<div class="media-footer">
<a rel='nofollow' class='comment-reply-link' href='/2019/01/06/secure-boot-nest-pas-simple/?replytocom=31291#respond' data-commentid="31291" data-postid="1068" data-belowelement="comment-31291" data-respondelement="respond" data-replyto="Répondre à John Doe" aria-label='Répondre à John Doe'><svg class="svg-text-color" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="12px" height="12px"><path d="M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"></path></svg>
Répondre</a> </div>
</div>
</div>
</li><!-- #comment-## -->
<div class="comment odd alt thread-odd thread-alt depth-1 media" id="comment-31350">
<a class="pull-left" href=" ">
<div class="comment-author avatar vcard">
<img alt='' src='https://secure.gravatar.com/avatar/b482b0297fb704ca5ee56f1297924930?s=64&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/b482b0297fb704ca5ee56f1297924930?s=128&#038;d=mm&#038;r=g 2x' class='avatar avatar-64 photo' height='64' width='64' loading='lazy'/> </div>
</a>
<div class="media-body">
<h4 class="media-heading">
Pneuneige <small>
&#183; 18 décembre 2020 à 7 h 45 min </small>
</h4>
<p>Excellent guide, merci beaucoup, j&rsquo;ai enfin compris comment marche le secure boot. Si vous corrigez en plus les fautes d&rsquo;orthographe, le guide sera plus que parfait.</p>
<div class="media-footer">
<a rel='nofollow' class='comment-reply-link' href='/2019/01/06/secure-boot-nest-pas-simple/?replytocom=31350#respond' data-commentid="31350" data-postid="1068" data-belowelement="comment-31350" data-respondelement="respond" data-replyto="Répondre à Pneuneige" aria-label='Répondre à Pneuneige'><svg class="svg-text-color" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="12px" height="12px"><path d="M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z"></path></svg>
Répondre</a> </div>
</div>
</div>
</li><!-- #comment-## -->
</div>
<div class="media-body">
<div id="respond" class="comment-respond">
<h3 class="hestia-title text-center">Laisser un commentaire <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2019/01/06/secure-boot-nest-pas-simple/#respond" style="display:none;">Annuler la réponse</a></small></h3><span class="pull-left author"><div class="avatar"><img src="/wp-content/themes/hestia/assets/img/placeholder.jpg" alt="Avatar placeholder" height="64" width="64"/></div></span><form action="https://blog.hugopoi.net/wp-comments-post.php" method="post" id="commentform" class="form media-body"><p class="comment-notes"><span id="email-notes">Votre adresse e-mail ne sera pas publiée.</span> Les champs obligatoires sont indiqués avec <span class="required">*</span></p><div class="row"> <div class="col-md-4"> <div class="form-group label-floating is-empty"> <label class="control-label">Nom <span class="required">*</span></label><input id="author" name="author" class="form-control" type="text" aria-required='true' /> <span class="hestia-input"></span> </div> </div>
<div class="col-md-4"> <div class="form-group label-floating is-empty"> <label class="control-label">E-mail <span class="required">*</span></label><input id="email" name="email" class="form-control" type="email" aria-required='true' /> <span class="hestia-input"></span> </div> </div>
<div class="col-md-4"> <div class="form-group label-floating is-empty"> <label class="control-label">Site internet</label><input id="url" name="url" class="form-control" type="url" aria-required='true' /> <span class="hestia-input"></span> </div> </div> </div>
<div class="form-group label-floating is-empty"> <label class="control-label">Quavez vous à lesprit ?</label><textarea id="comment" name="comment" class="form-control" rows="6" aria-required="true"></textarea><span class="hestia-input"></span> </div><p class="form-submit"><input name="submit" type="submit" id="submit" class="btn btn-primary pull-right" value="Laisser un commentaire" /> <input type='hidden' name='comment_post_ID' value='1068' id='comment_post_ID' />
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
</p><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="2eb9f5d8ac" /></p><p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js" name="ak_js" value="9"/><script>document.getElementById( "ak_js" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div><!-- #respond -->
</div>
</div>
</div>
</div>
</div>
</div> <div class="col-md-3 blog-sidebar-wrapper col-md-offset-1">
<aside id="secondary" class="blog-sidebar" role="complementary">
<div id="text-2" class="widget widget_text"><h5>Edito</h5> <div class="textwidget">Bienvenu sur mon blog, ici je parle de bricolage, de web (version de base). Blog perso sans prétention je poste quand j'ai le temps en plus j'aime pas écrire.</div>
</div><div id="text-6" class="widget widget_text"><h5>Hébergé gracieusement par</h5> <div class="textwidget"><div style="text-align: center"><a href="http://www.majewan.fr"><img src="/wp-content/uploads/2015/01/path22.png" alt="logo Majewan Interactive" style="width: 50%; padding: 1em;"></a></div></div>
</div><div id="custom_html-2" class="widget_text widget widget_custom_html"><h5>MASTODON</h5><div class="textwidget custom-html-widget"><a rel="me" href="https://mastodon.hugopoi.net/@hugopoi">@Hugopoi</a></div></div><div id="twitter-2" class="widget widget_twitter"><div><h5><span class='twitterwidget twitterwidget-title'>Twitter: hugopoi</span></h5><ul><li><span class='entry-content'><a href="http://twitter.com/search?q=%23Biking" class="twitter-hashtag">#Biking</a> <a href="http://twitter.com/search?q=%23Rouen" class="twitter-hashtag">#Rouen</a> <a href="http://twitter.com/search?q=%23selfie" class="twitter-hashtag">#selfie</a> <a href="https://t.co/pfkaReX5A1">https://t.co/pfkaReX5A1</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1506319050573500421">07:17:02 mars 22, 2022</a></span> <span class='from-meta'>from <a href="https://crossposter.hugopoi.net/" rel="nofollow">Mastodon To Twitter HugoPoi</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1506319050573500421" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1506319050573500421" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1506319050573500421" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>RT <a href="http://twitter.com/codeursenseine" class="twitter-user">@codeursenseine</a>: 📢 - J-1 : Le <a href="http://twitter.com/search?q=%23meetup" class="twitter-hashtag">#meetup</a> Golang c'est demain ! 😱
Session <a href="http://twitter.com/search?q=%23livecoding" class="twitter-hashtag">#livecoding</a> autour d'un cidre et d'un camembert pour découvrir <a href="http://twitter.com/search?q=%23G" class="twitter-hashtag">#G</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1506176162132811784">09:49:15 mars 22, 2022</a></span> <span class='from-meta'>from <a href="https://github.com/TwidereProject" rel="nofollow">Twidere for Android</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1506176162132811784" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1506176162132811784" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1506176162132811784" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'><a href="http://twitter.com/search?q=%23Sunset" class="twitter-hashtag">#Sunset</a> <a href="http://twitter.com/search?q=%23holidays" class="twitter-hashtag">#holidays</a> <a href="https://t.co/eO23g9DlLw">https://t.co/eO23g9DlLw</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1497986139633901580">07:25:01 février 27, 2022</a></span> <span class='from-meta'>from <a href="https://crossposter.hugopoi.net/" rel="nofollow">Mastodon To Twitter HugoPoi</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1497986139633901580" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1497986139633901580" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1497986139633901580" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>[JOB] Je recrute chez <a href="http://twitter.com/search?q=%23monibrand" class="twitter-hashtag">#monibrand</a>
Developpeur Web Senior
Sysadmin Linux / Ops
Product Manager
<a href="https://t.co/ie5McoaC8i">https://t.co/ie5McoaC8i</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1496797049634836480">12:40:00 février 24, 2022</a></span> <span class='from-meta'>from <a href="https://crossposter.hugopoi.net/" rel="nofollow">Mastodon To Twitter HugoPoi</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1496797049634836480" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1496797049634836480" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1496797049634836480" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>RT <a href="http://twitter.com/MaryMbois" class="twitter-user">@MaryMbois</a>: Culture PUB❗😂😂😂
Vous imaginez-vous un slogan comme ça maintenant ??? 🤣🥳 <a href="https://t.co/lvW7UPpput">https://t.co/lvW7UPpput</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1496167441600290826">06:58:10 février 22, 2022</a></span> <span class='from-meta'>from <a href="https://github.com/TwidereProject" rel="nofollow">Twidere for Android</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1496167441600290826" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1496167441600290826" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1496167441600290826" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>[JOB] Je recrute dans mon équipe tech
Lead Dev
Product Manager
Sysadmin Linux
CDI entre Rouen et Paris avec possibilité full-remote</span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1491687129562456064">10:15:00 février 10, 2022</a></span> <span class='from-meta'>from <a href="https://crossposter.hugopoi.net/" rel="nofollow">Mastodon To Twitter HugoPoi</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1491687129562456064" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1491687129562456064" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1491687129562456064" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>Hello @ tous, JE RECRUTE chez <a href="http://twitter.com/search?q=%23monibrand" class="twitter-hashtag">#monibrand</a> à savoir :
Lead Developer
Product Manager
Sysadmin Linux Ops
Toute… <a href="https://t.co/Sz2MKHKFpv">https://t.co/Sz2MKHKFpv</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1491356209424785416">12:20:03 février 09, 2022</a></span> <span class='from-meta'>from <a href="https://crossposter.hugopoi.net/" rel="nofollow">Mastodon To Twitter HugoPoi</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1491356209424785416" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1491356209424785416" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1491356209424785416" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>RT <a href="http://twitter.com/Damkyan_Omega" class="twitter-user">@Damkyan_Omega</a>: Imaginez un site qui permettrait de télécharger gratuitement tous plein d'articles scientifique et de les lire facilemen…</span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1490978881951707139">11:20:41 février 08, 2022</a></span> <span class='from-meta'>from <a href="https://github.com/TwidereProject" rel="nofollow">Twidere for Android</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1490978881951707139" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1490978881951707139" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1490978881951707139" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li><li><span class='entry-content'>Il y a un niveau <a href="https://t.co/rq5xm63vmD">https://t.co/rq5xm63vmD</a></span> <span class='entry-meta'><span class='time-meta'><a href="http://twitter.com/HugoPoi/statuses/1490978785411440643">11:20:18 février 08, 2022</a></span> <span class='from-meta'>from <a href="https://github.com/TwidereProject" rel="nofollow">Twidere for Android</a></span></span> <span class="intent-meta"><a href="http://twitter.com/intent/tweet?in_reply_to=1490978785411440643" data-lang="fr" class="in-reply-to" title="Reply">Reply</a><a href="http://twitter.com/intent/retweet?tweet_id=1490978785411440643" data-lang="fr" class="retweet" title="Retweet">Retweet</a><a href="http://twitter.com/intent/favorite?tweet_id=1490978785411440643" data-lang="fr" class="favorite" title="Favorite">Favorite</a></span></li></ul><div class="follow-button"><a href="http://twitter.com/hugopoi" class="twitter-follow-button" title="Follow @hugopoi" data-lang="fr">@hugopoi</a></div></div></div><div id="categories-3" class="widget widget_categories"><h5>Catégories</h5>
<ul>
<li class="cat-item cat-item-136"><a href="/category/fail/">#FAIL</a> (1)
</li>
<li class="cat-item cat-item-51"><a href="/category/dossiers/aventure-pc/">Aventure PC</a> (15)
</li>
<li class="cat-item cat-item-57"><a href="/category/dossiers/aventure-serveur/">Aventure Serveur</a> (4)
</li>
<li class="cat-item cat-item-130"><a href="/category/bidouille/">Bidouille</a> (6)
</li>
<li class="cat-item cat-item-189"><a href="/category/cuisine/">Cuisine</a> (1)
</li>
<li class="cat-item cat-item-38"><a href="/category/developpement/">Développement</a> (2)
</li>
<li class="cat-item cat-item-10"><a href="/category/dossiers/">Dossiers</a> (9)
</li>
<li class="cat-item cat-item-149"><a href="/category/gaming/">Gaming</a> (1)
</li>
<li class="cat-item cat-item-6"><a href="/category/hadopi-2/">Hadopi</a> (5)
</li>
<li class="cat-item cat-item-18"><a href="/category/hardware/">Hardware</a> (21)
</li>
<li class="cat-item cat-item-12"><a href="/category/internet-2/">Internet</a> (9)
</li>
<li class="cat-item cat-item-11"><a href="/category/dossiers/ip-v6/">IP v6</a> (1)
</li>
<li class="cat-item cat-item-13"><a href="/category/logiciels/">Logiciels</a> (11)
</li>
<li class="cat-item cat-item-1"><a href="/category/news/" title="News générale de mon blog, les articles et brèves général.">News</a> (22)
</li>
<li class="cat-item cat-item-47"><a href="/category/test/">Test</a> (5)
</li>
</ul>
</div><div id="linkcat-2" class="widget widget_links"><h5>Blogs et Infos</h5>
<ul class='xoxo blogroll'>
<li><a href="http://blog.rom1v.com" title="Découverte récente, publication de qualité">®om&#039;s blog</a></li>
<li><a href="http://bluetouff.com" title="Un blog hacktiviste avec des idées et des compétences pas comme les autres." target="_blank">☠ Bluetouff</a></li>
<li><a href="http://www.korben.info/" title="Upgrade your Mind" target="_blank">Korben</a></li>
<li><a href="http://www.laquadrature.net/fr" title="La Quadrature du Net Fr" target="_blank">La Quadrature du Net</a></li>
<li><a href="https://www.nextinpact.com/" title="Actualité Informatique" target="_blank">NextInpact</a></li>
<li><a href="http://pixellibre.net/" title="Un petit blog de geek comme on les aime avec du hadopi, de l&rsquo;info et du troll" target="_blank">Pixel Libre.net</a></li>
<li><a href="http://reflets.info" title="Reflets.info fait le pari de devenir le reflet dune société, des individus qui la composent." target="_blank">Reflets</a></li>
<li><a href="http://blog.spyou.org/wordpress-mu/" rel="acquaintance" title="Fabriquer son internet" target="_blank">Turb(l)o(g)</a></li>
</ul>
</div>
<div id="linkcat-76" class="widget widget_links"><h5>Podcast</h5>
<ul class='xoxo blogroll'>
<li><a href="http://www.nowatch.net/category/nowatch-net/nowatch-fm/appload-nowatch-fm/" title="Des Apps pour votre mobile (un peu sponsorisé par Apple mais il y a du Android aussi)" target="_blank">AppLoad</a></li>
<li><a href="http://freepod.net/" title="Libère ton podcast, regroupement de podcast." target="_blank">Freepod</a></li>
<li><a href="http://www.geekinc.fr/" title="On partage la culture geek ! (sponsorisé par Apple mais j&rsquo;aime bien quand même)" target="_blank">GeekInc</a></li>
<li><a href="http://www.captainweb.net/" title="Podcast déjanté de l&rsquo;actu web, super ambiance !" target="_blank">L&#039;Apéro du Captainweb</a></li>
<li><a href="http://www.lagrottedubarbu.com/" title="Hack the technologie" target="_blank">La Grotte du Barbu</a></li>
<li><a href="http://www.poligeek.fr/" title= Un jour les geek domineront le monde, mais pas demain, ya une keynote de Steve Jobs »" target="_blank">PoliGeek</a></li>
<li><a href="http://quadratour.net/" title="Pour les vieux Geeks de l&rsquo;apocalypse…" target="_blank">Quadratour</a></li>
</ul>
</div>
</aside><!-- .sidebar .widget-area -->
</div>
</div>
</article>
</div>
</div>
</div>
<div class="section related-posts">
<div class="container">
<div class="row">
<div class="col-md-12">
<h2 class="hestia-title text-center">Articles similaires</h2>
<div class="row">
<div class="col-md-4">
<div class="card card-blog">
<div class="card-image">
<a href="/2021/01/16/linky-opendata-my-ass/" title="Linky opendata my ass">
<img width="360" height="240" src="/wp-content/uploads/2021/01/IMG_20210104_131322-360x240.jpg" class="attachment-hestia-blog size-hestia-blog wp-post-image" alt="Prototype téléinformation compteur linky" loading="lazy" /> </a>
</div>
<div class="content">
<h6 class="category text-info"><a href="/category/bidouille/" title="Voir tout les articles dans Bidouille" >Bidouille</a> </h6>
<h4 class="card-title">
<a class="blog-item-title-link" href="/2021/01/16/linky-opendata-my-ass/" title="Linky opendata my ass" rel="bookmark">
Linky opendata my ass </a>
</h4>
<p class="card-description">Pour résumer la seule API utilisable en production est l&rsquo;API Enedis qui est accèssible uniquement aux société (personne morale) ayant montré pate blanche auprès d&rsquo;Enedis. Si vous voulez la version longue c&rsquo;est ici. De ce<a class="moretag" href="/2021/01/16/linky-opendata-my-ass/"> Lire la suite&hellip;</a></p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card card-blog">
<div class="card-image">
<a href="/2019/03/30/le-cloud-maison/" title="Le cloud maison">
<img width="360" height="240" src="/wp-content/uploads/2019/03/IMG_7810-360x240.jpg" class="attachment-hestia-blog size-hestia-blog wp-post-image" alt="" loading="lazy" srcset="/wp-content/uploads/2019/03/IMG_7810-360x240.jpg 360w, /wp-content/uploads/2019/03/IMG_7810-300x200.jpg 300w, /wp-content/uploads/2019/03/IMG_7810-768x512.jpg 768w, /wp-content/uploads/2019/03/IMG_7810-1024x683.jpg 1024w" sizes="(max-width: 360px) 100vw, 360px" /> </a>
</div>
<div class="content">
<h6 class="category text-info"><a href="/category/dossiers/aventure-serveur/" title="Voir tout les articles dans Aventure Serveur" >Aventure Serveur</a> </h6>
<h4 class="card-title">
<a class="blog-item-title-link" href="/2019/03/30/le-cloud-maison/" title="Le cloud maison" rel="bookmark">
Le cloud maison </a>
</h4>
<p class="card-description">Voilà un petit moment que je me devais de faire cet article pour vous en dire un peu plus sur comment je gère mes données numériques au quotidien. Et après plusieurs essais et échecs, je<a class="moretag" href="/2019/03/30/le-cloud-maison/"> Lire la suite&hellip;</a></p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card card-blog">
<div class="card-image">
<a href="/2018/09/08/niquer-les-drms-damazon-aka-convertir-vos-ebook-vers-epub-sans-drm/" title="Niquer les DRMs d&rsquo;Amazon AKA convertir vos ebook vers EPUB sans DRM">
<img width="360" height="240" src="/wp-content/uploads/2018/09/anti-drm34-360x240.jpg" class="attachment-hestia-blog size-hestia-blog wp-post-image" alt="" loading="lazy" /> </a>
</div>
<div class="content">
<h6 class="category text-info"><a href="/category/dossiers/aventure-pc/" title="Voir tout les articles dans Aventure PC" >Aventure PC</a> </h6>
<h4 class="card-title">
<a class="blog-item-title-link" href="/2018/09/08/niquer-les-drms-damazon-aka-convertir-vos-ebook-vers-epub-sans-drm/" title="Niquer les DRMs d&rsquo;Amazon AKA convertir vos ebook vers EPUB sans DRM" rel="bookmark">
Niquer les DRMs d&rsquo;Amazon AKA convertir vos ebook vers EPUB sans DRM </a>
</h4>
<p class="card-description">Comment j&rsquo;en suis arrivé là Un jour dans une contrée de la blogosphère version 0.666 d&rsquo;Internet, je voulais acheter un livre  numérique car moins cher et puis ça pollue moins ça équivaut à un aller-retour<a class="moretag" href="/2018/09/08/niquer-les-drms-damazon-aka-convertir-vos-ebook-vers-epub-sans-drm/"> Lire la suite&hellip;</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer-wrapper">
<footer class="footer footer-black footer-big">
<div class="container">
<div class="hestia-bottom-footer-content"><ul class="footer-menu pull-left"><li class="page_item page-item-1232"><a href="/wishlist/">Wishlist</a></li>
</ul>
<div class="copyright pull-right">
Hestia | Développé par <a href="https://themeisle.com%20" rel="nofollow">ThemeIsle</a> </div>
</div> </div>
</footer>
</div>
</div>
<button class="hestia-scroll-to-top">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512" width="12.5px" height="20px"><path d="M177 255.7l136 136c9.4 9.4 9.4 24.6 0 33.9l-22.6 22.6c-9.4 9.4-24.6 9.4-33.9 0L160 351.9l-96.4 96.4c-9.4 9.4-24.6 9.4-33.9 0L7 425.7c-9.4-9.4-9.4-24.6 0-33.9l136-136c9.4-9.5 24.6-9.5 34-.1zm-34-192L7 199.7c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l96.4-96.4 96.4 96.4c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9l-136-136c-9.2-9.4-24.4-9.4-33.8 0z"></path></svg>
</button>
<!-- Matomo -->
<script type="text/javascript">
var _paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//blog.hugopoi.net/wp-content/plugins/wp-piwik/proxy/"
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.php'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script type='text/javascript' src='/wp-content/plugins/wp-syntax/js/wp-syntax.js?ver=1.1' id='wp-syntax-js-js'></script>
<script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=5.8.4' id='comment-reply-js'></script>
<script type='text/javascript' src='/wp-content/themes/hestia/assets/bootstrap/js/bootstrap.min.js?ver=1.0.2' id='jquery-bootstrap-js'></script>
<script type='text/javascript' src='/wp-includes/js/jquery/ui/core.min.js?ver=1.12.1' id='jquery-ui-core-js'></script>
<script type='text/javascript' id='hestia_scripts-js-extra'>
/* <![CDATA[ */
var requestpost = {"ajaxurl":"https:\/\/blog.hugopoi.net\/wp-admin\/admin-ajax.php","disable_autoslide":"","masonry":""};
/* ]]> */
</script>
<script type='text/javascript' src='/wp-content/themes/hestia/assets/js/script.min.js?ver=3.0.20' id='hestia_scripts-js'></script>
<script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=5.8.4' id='wp-embed-js'></script>
<script type='text/javascript' src='https://platform.twitter.com/widgets.js?ver=1.0.0' id='twitter-widgets-js'></script>
</body>
</html>