İmzalı HTTP Değişimleri (SXG) kullanıcıların içerik oluşturucuları içerik dağıtıcılardan ayırt etmesini kolaylaştıran yeni bir web teknolojisidir. Bu kılavuz size SXG’yi nasıl kuracağınızı gösterir.
Tarayıcılar arası destek #
Google Chrome, Samsung Internet ve Microsoft Edge dahil olmak üzere birkaç Chromium tabanlı tarayıcı SXG’yi destekler. Uzlaşı ve Standardizasyon bölümüne bakın. Kaynak İmzalı HTTP Değişimleri daha güncel bilgiler için.
Önkoşullar #
SXG’yi web sitenize uygulamak için şunları yapmalısınız:
- DNS girişleri dahil olmak üzere alan adınız üzerinde kontrole sahip olun.
- Sertifikalar alın. SXG, özel bir sertifikanın verilmesini gerektirir. Özellikle, TLS anahtarınızı veya sertifikanızı yeniden kullanamazsınız.
- HTTPS üzerinden SXG oluşturabilen ve sunabilen bir HTTP sunucusuna sahip olun.
varsayımlar #
Bu kılavuz aşağıdakileri yaptığınızı varsayar:
- OpenSSL 1.1.1 ortamına sahip olun. Bu kılavuz, amd64 ISA’da Ubuntu 18.04 LTS ile yazılmıştır.
- Koşma yeteneğine sahip olmak
sudo
yürütülebilir dosyaları yüklemek için. - Kullanmak
nginx
HTTP sunucusu olarak. - Şu anda bu uzantıları destekleyen tek sağlayıcı gibi göründüğü için, SXG ile ilgili uzantıları içeren sertifikalar oluşturmak için DigiCert kullanıyorlar.
Ayrıca, bu makaledeki örnek komutlar, etki alanınızın website.test
yani değiştirmeniz gerekecek website.test
gerçek alan adınızla.
1. Adım: SXG için sertifikanızı alın #
SXG oluşturmak için şu özelliklere sahip bir TLS sertifikasına ihtiyacınız vardır: CanSignHttpExchanges
uzantının yanı sıra belirli bir anahtar türü. DigiCert, bu uzantıya sahip sertifikalar sağlar. Sertifika vermek için bir CSR dosyasına ihtiyacınız var, bu yüzden aşağıdaki komutlarla oluşturun:
openssl ecparam -genkey -name prime256v1 -out mySxg.key
openssl req -new -key mySxg.key -nodes -out mySxg.csr -subj "/O=Test/C=US/CN=website.test"
Aşağıdakine benzeyen bir CSR dosyası alacaksınız:
-----BEGIN CERTIFICATE REQUEST-----
MIHuMIGVAgEAMDMxDTALBgNVBAoMBFRlc3QxCzAJBgNVBAYTAlVTMRUwEwYDVQQD
DAx3ZWJzaXRlLnRlc3QwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS7IVaeMvid
S5UO7BspzSe5eqT5Qk6X6dCggUiV/vyqQaFDjA/ALyTofgXpbCaksorPaDhdA+f9
APdHWkTbbdv1oAAwCgYIKoZIzj0EAwIDSAAwRQIhAIb7n7Kcc6Y6pU3vFr8SDNkB
kEadlVKNA24SVZ/hn3fjAiAS2tWXhYdJX6xjf2+DL/smB36MKbXg7VWy0K1tWmFi
Sg==
-----END CERTIFICATE REQUEST-----
Emin olun:
- Geçerlilik süresi 90 günü geçmez.
- bu CanSignHttpExchanges uzantısını sertifikaya dahil edin Ek Sertifika Seçenekleri altında bulunan onay kutusu etkinleştirilir.
Sertifikanız bu koşullara uymuyorsa, tarayıcılar ve distribütörler güvenlik nedeniyle SXG’nizi reddedecektir. Bu kılavuz, DigiCert’ten aldığınız sertifikanın dosya adının mySxg.pem
.
2. Adım: Kurun libsxg
#
SXG formatı karmaşıktır ve araç kullanmadan oluşturulması zordur. SXG oluşturmak için aşağıdaki seçeneklerden birini kullanabilirsiniz:
Bu kılavuz kullanır libsxg
.
1. Seçenek: Yükle libsxg
bir Debian paketinden #
Paketi, OpenSSL (libssl-dev
) sürüm eşleşir.
sudo apt install -y libssl-dev
wget https://github.com/google/libsxg/releases/download/v0.2/libsxg0_0.2-1_amd64.deb
wget https://github.com/google/libsxg/releases/download/v0.2/libsxg-dev_0.2-1_amd64.deb
sudo dpkg -i libsxg0_0.2-1_amd64.deb
sudo dpkg -i libsxg-dev_0.2-1_amd64.deb
2. Seçenek: Oluştur libsxg
elle #
ile uyumlu bir ortam kullanmıyorsanız .deb
dosyalar, oluşturabilirsiniz libsxg
kendin. Bir ön koşul olarak yüklemeniz gerekir git
, cmake
, openssl
Ve gcc
.
git clone https://github.com/google/libsxg
mkdir libsxg/build
cd libsxg/build
cmake .. -DRUN_TEST=false -DCMAKE_BUILD_TYPE=Release
make
sudo make install
3. Adım: Kurun nginx
Eklenti #
bu nginx
eklenti, SXG’leri sunmadan önce statik olarak oluşturmak yerine dinamik olarak oluşturmanıza olanak tanır.
1. Seçenek: Eklentiyi bir Debian paketinden kurun #
bu için SXG modülü nginx
GitHub’da dağıtılmaktadır. Debian tabanlı sistemlerde ikili paket olarak kurabilirsiniz:
sudo apt install -y nginx=1.15.9-0
wget https://github.com/google/nginx-sxg-module/releases/download/v0.1/libnginx-mod-http-sxg-filter_1.15.9-0ubuntu1.1_amd64.deb
sudo dpkg -i libnginx-mod-http-sxg-filter_1.15.9-0ubuntu1.1_amd64.deb
2. Seçenek: Eklentiyi manuel olarak oluşturun #
inşa etmek nginx
modülü gerektirir nginx
kaynak kodu. Aşağıdaki komutları kullanarak tarball’ı alabilir ve SXG dinamik modülüyle birlikte oluşturabilirsiniz:
git clone https://github.com/google/nginx-sxg-module
wget https://nginx.org/download/nginx-1.17.5.tar.gz
tar xvf nginx-1.17.5.tar.gz
cd nginx-1.17.5
./configure --prefix=/opt/nginx --add-dynamic-module=../nginx-sxg-module --without-http_rewrite_module --with-http_ssl_module
make
sudo make install
bu nginx
yapılandırma büyük bir esnekliğe sahiptir. Düzenlemek nginx
sisteminizin herhangi bir yerinde, ardından ilgili bir yol belirtin module/config/log/pidfile
. Bu kılavuz, onu şuraya yüklediğinizi varsayar: /opt/nginx
.
4. Adım: nginx
SXG ile çalışmak için eklenti #
1. Seçenek: Debian’dan yüklenen bir yapılandırmayı yapılandırın nginx
modül #
kullandıysanız bu talimatları izleyin. Adım 3, Seçenek 1 daha erken.
SXG içeriği sunmak için HTTPS gerekir. DigiCert, Let’s Encrypt ve diğer hizmetlerden bir SSL/TLS sertifikası alabilirsiniz. SSL için bir SXG sertifikası KULLANAMAZSINIZ, bu nedenle iki sertifikaya ihtiyacınız olacaktır. içindeki yapılandırma dosyası /etc/nginx/nginx.conf
SSL anahtarı/sertifika çiftini girdiğiniz varsayılarak aşağıdakine benzer görünmelidir. /path/to/ssl/
ve SXG anahtarı/sertifika çifti /path/to/sxg/
:
user www-data;
include /etc/nginx/modules-enabled/*.conf;events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
add_header X-Content-Type-Options nosniff;
server {
listen 443 ssl;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
server_name website.test;
sxg on;
sxg_certificate /path/to/sxg/mySxg.pem;
sxg_certificate_key /path/to/sxg/mySxg.key;
sxg_cert_url certs/cert.cbor;
sxg_validity_url validity/resource.msg;
sxg_cert_path /certs/cert.cbor;
root /var/www/html;
}
}
sxg_cert_url
sertifika zincirini bulduğu için tarayıcıların SXG’yi düzgün bir şekilde yüklemesi çok önemlidir. Sertifika zinciri, cbor formatında sertifika ve OCSP zımbalama bilgilerini içerir. hizmet etmek zorunda olmadığınızı unutmayın.cert.cbor
aynı kaynaktan dosya. HTTPS’yi desteklediği sürece herhangi bir CDN’ler veya diğer statik dosya sunma hizmetleri aracılığıyla sunabilirsiniz.sxg_validitiy_url
SXG-imza başlığıyla ilgili bilgileri sunması planlanmıştır. Bir sayfa son SXG’den bu yana değiştirilmemişse, teknik olarak tüm SXG dosyasının indirilmesi gerekmez. Bu nedenle, yalnızca imza başlığı bilgilerinin güncellenmesinin ağ trafiğini azaltması beklenir. Ancak detaylar henüz uygulanmadı.
Başlangıç nginx
ve SXG’ye hizmet etmeye hazırsınız!
sudo systemctl start nginx.service
curl -H"Accept: application/signed-exchange;v=b3" > index.html.sxg
cat index.html.sxg
sxg1-b3......(omit)
2. Seçenek: Kaynaktan yerleşik yapılandırma nginx
modül #
kullandıysanız bu talimatları izleyin. Adım 3, Seçenek 2 daha erken.
yapılandırın nginx
altında kurulan sistem /opt/nginx
aşağıdaki örneğe benzer görünmek için:
load_module "/opt/nginx/modules/ngx_http_sxg_filter_module.so";events {
worker_connections 768;
}
http {
include mime.types;
default_type application/octet-stream;
add_header X-Content-Type-Options nosniff;
server {
listen 443 ssl;
ssl_certificate /path/to/ssl/fullchain.pem;
ssl_certificate_key /path/to/ssl/privkey.pem;
server_name example.com;
sxg on;
sxg_certificate /path/to/sxg/mySxg.pem;
sxg_certificate_key /path/to/sxg/mySxg.key;
sxg_cert_url certs/cert.cbor;
sxg_validity_url validity/resource.msg;
sxg_cert_path /certs/cert.cbor;
root /opt/nginx/html;
}
}
Sonra başlat nginx
. Artık SXG’nizi alabilirsiniz!
cd /opt/nginx/sbin
sudo ./nginx
curl -H "Accept: application/signed-exchange;v=b3" > index.html.sxg
less index.html.sxg
sxg1-b3......(omit)
5. Adım: Uygulamanızın arka ucunu sunun #
Yukarıdaki örneklerde, nginx
kök dizinde statik dosyalar sunar, ancak uygulamalarınız için yukarı akış yönergelerini kullanarak isteğe bağlı web uygulaması arka uçları (Ruby on Rails, Django veya Express gibi) için SXG yapın. nginx
ön HTTP(S) sunucusu olarak çalışır.
upstream app {
server 127.0.0.1:8080;
}server {
location / {
proxy_pass http://app;
}
}
6. Adım: Test edin #
Kullan dump-signedexchange aracı sunulan SXG’lerin doğru olduğunu test etmek, hiçbir hatanın bildirilmediğinden emin olmak ve başlıkların ve gövdenin beklendiği gibi olduğunu doğrulamak için.
go get -u github.com/WICG/webpackage/go/signedexchange/cmd/dump-signedexchange
export PATH=$PATH:~/go/bin
dump-signedexchange -verify -uri | less
Geribildirim yolla #
SXG üzerinde çalışan Chromium mühendisleri, webpackage-dev@chromium.org adresinden geri bildiriminizi duymak istiyor. Ayrıca katılabilirsiniz spesifikasyon tartışmasıveya hata bildir takıma Geri bildiriminiz, standardizasyon sürecine büyük ölçüde yardımcı olacak ve ayrıca uygulama sorunlarının ele alınmasına yardımcı olacaktır. Teşekkür ederim!