Nginx-gost: различия между версиями
(Новая страница: «Инструкция по настройке nginx, отдающим страницы с кодированием по ГОСТ-2012. 1. Установка apt…») |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
Инструкция по настройке nginx, отдающим страницы с кодированием по ГОСТ-2012. | Инструкция по настройке nginx, отдающим страницы с кодированием по ГОСТ-2012. | ||
1. Установка | 1. Установка nginx: | ||
:<source lang="text" highlight="1"># apt-get install nginx</source> | |||
2. Настройка OpenSSL | |||
:Подробно рассмотрено в статье [[ГОСТ в OpenSSL]]. | |||
3. Создание ключей | |||
:* Создаём закрытый ключ по алгоритму ГОСТ: | |||
:<source lang="text" highlight="1">$ openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out gost.example.com.key</source> | |||
:* Создаём запрос: | |||
:<source lang="text" highlight="1">$ openssl req -new -md_gost12_256 -key gost.example.com.key -out gost.example.com.csr -subj "/C=RU/L=Moscow/O=My site with GOST/CN=gost.example.com"</source> | |||
:*Подписываем запрос в УЦ, или подписываем запрос на сертификат своим "самоподписанным" ca.cer сертификатом и ключом ca.key ([[ГОСТ в OpenSSL]]): | |||
:<source lang="text" highlight="1">$ openssl x509 -req -in gost.example.com.csr -CA ca.cer -CAkey ca.key -CAcreateserial -out gost.example.com.cer -days 5000</source> | |||
4. Создаём каталог /etc/nginx/ssl и копируем туда файлы {{path|gost.example.com.cer}} и {{path|gost.example.com.key}}: | |||
:<source lang="text" highlight="1-3"># mkdir /etc/nginx/ssl | |||
# cp /home/user/gost.example.com.cer /etc/nginx/ssl/ | |||
# cp /home/user/gost.example.com.key /etc/nginx/ssl/</source> | |||
5. Создаём файл конфигурации {{path|/etc/nginx/sites-available.d/gost.conf}}: | |||
:<source lang="text">server { | |||
server_name gost.example.com; | |||
<source lang="text">server { | |||
server_name | |||
listen 443 ssl; | listen 443 ssl; | ||
ssl_certificate /etc/nginx/ssl/ | ssl_certificate /etc/nginx/ssl/gost.example.com.cer; | ||
ssl_certificate_key /etc/nginx/ssl/ | ssl_certificate_key /etc/nginx/ssl/gost.example.com.key; | ||
ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH:MEDIUM; | ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH:MEDIUM; | ||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ||
ssl_prefer_server_ciphers on; | ssl_prefer_server_ciphers on; | ||
location / { | location / { | ||
proxy_pass http:// | proxy_pass http://gost.example.com; | ||
} | } | ||
}</source> | }</source> | ||
{{Note|В примере указано имя сервера | {{Note|В примере указано имя сервера gost.example.com. Укажите имя своего сервера.}} | ||
6. Активируем конфигурацию: | |||
:<source lang="text" highlight="1-2"> | |||
# ln -s ../sites-available.d/default.conf /etc/nginx/sites-enabled.d/default.conf | |||
# ln -s ../sites-available.d/gost.conf /etc/nginx/sites-enabled.d/gost.conf</source> | |||
7. Запускаем nginx: | |||
:<source lang="text" highlight="1"> | |||
# systemctl start nginx</source> | |||
8. Проверяем подключение: | |||
<source lang="text" highlight="1">$ openssl s_client -connect gost.example.com:443 | |||
<source lang="text" highlight="1">$ openssl s_client -connect | |||
CONNECTED(00000003) | CONNECTED(00000003) | ||
depth=0 C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com | |||
depth=0 CN = | verify error:num=20:unable to get local issuer certificate | ||
verify error:num= | |||
verify return:1 | verify return:1 | ||
depth=0 CN = | depth=0 C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com | ||
verify error:num=21:unable to verify the first certificate | |||
verify return:1 | verify return:1 | ||
--- | --- | ||
Certificate chain | Certificate chain | ||
0 s:CN = | 0 s:C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com | ||
i:CN = | i:emailAddress = support@cryptopro.ru, C = RU, L = Moscow, O = CRYPTO-PRO LLC, CN = CRYPTO-PRO Test Center 2 | ||
--- | --- | ||
Server certificate | Server certificate | ||
-----BEGIN CERTIFICATE----- | -----BEGIN CERTIFICATE----- | ||
MIIDLDCCAtugAwIBAgITEgBDYxvRc5jX7HzAXAABAENjGzAIBgYqhQMCAgMwfzEj | |||
MCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJV | |||
MQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYD | |||
VQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMjAwNDE1MDc1OTI0WhcN | |||
MjAwNzE1MDgwOTI0WjBXMQswCQYDVQQGEwJSVTERMA8GA1UEBwwIS2VtZXJvdm8x | |||
GjAYBgNVBAoMEU15IHNpdGUgd2l0aCBHT1NUMRkwFwYDVQQDDBBnb3N0LmV4YW1w | |||
bGUuY29tMGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIDQwAEQOus | |||
D0k9picnsbVuCtks2W0z20ArSBC5MwImGeF3JM4UuQcf39qBFLuscbB6F3qe/Pbr | |||
TrxUDtgounhsgiG5sKSjggFRMIIBTTAdBgNVHQ4EFgQUl+b3HftI3NMo4vUc3A0a | |||
+LwrnOYwHwYDVR0jBBgwFoAUToM+FGnv7F16lStfEf43MhZJVSswXAYDVR0fBFUw | |||
UzBRoE+gTYZLaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC9D | |||
UllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIoMSkuY3JsMIGsBggrBgEFBQcB | |||
AQSBnzCBnDBkBggrBgEFBQcwAoZYaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUv | |||
Q2VydEVucm9sbC90ZXN0LWNhLTIwMTRfQ1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50 | |||
ZXIlMjAyKDEpLmNydDA0BggrBgEFBQcwAYYoaHR0cDovL3Rlc3RjYS5jcnlwdG9w | |||
cm8ucnUvb2NzcC9vY3NwLnNyZjAIBgYqhQMCAgMDQQA1gRqEqqTz7Ut3rxvodkFN | |||
Pa0OHXV8bx64Z+VAKAj0pLFmNwQil6zFCPeqLkEzTnvEZrZQOC/fW4XOBnRJe0a5 | |||
-----END CERTIFICATE----- | -----END CERTIFICATE----- | ||
subject=CN = | subject=C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com | ||
issuer=CN = | issuer=emailAddress = support@cryptopro.ru, C = RU, L = Moscow, O = CRYPTO-PRO LLC, CN = CRYPTO-PRO Test Center 2 | ||
--- | --- | ||
No client certificate CA names sent | No client certificate CA names sent | ||
--- | --- | ||
SSL handshake has read | SSL handshake has read 1160 bytes and written 543 bytes | ||
Verification error: | Verification error: unable to verify the first certificate | ||
--- | --- | ||
New, TLSv1.0, Cipher is GOST2012-GOST8912-GOST8912 | New, TLSv1.0, Cipher is GOST2012-GOST8912-GOST8912 | ||
Server public key is 256 bit | |||
Secure Renegotiation IS supported | |||
Compression: NONE | |||
Expansion: NONE | |||
No ALPN negotiated | |||
SSL-Session: | |||
Protocol : TLSv1.2 | |||
Cipher : GOST2012-GOST8912-GOST8912 | |||
...</source> | ...</source> | ||
Совет: для работы с таким сервером можно использовать [[chromium-gost]] | Совет: для работы с таким сервером можно использовать {{pkg|elinks}} или [[chromium-gost]]: | ||
[[Изображение:Nginx-gost.png|Страница в chromium-gost]] | |||
[[Категория:Руководства]] | [[Категория:Руководства]] |
Текущая версия от 13:14, 15 апреля 2020
Инструкция по настройке nginx, отдающим страницы с кодированием по ГОСТ-2012.
1. Установка nginx:
# apt-get install nginx
2. Настройка OpenSSL
- Подробно рассмотрено в статье ГОСТ в OpenSSL.
3. Создание ключей
- Создаём закрытый ключ по алгоритму ГОСТ:
$ openssl genpkey -algorithm gost2012_256 -pkeyopt paramset:A -out gost.example.com.key
- Создаём запрос:
$ openssl req -new -md_gost12_256 -key gost.example.com.key -out gost.example.com.csr -subj "/C=RU/L=Moscow/O=My site with GOST/CN=gost.example.com"
- Подписываем запрос в УЦ, или подписываем запрос на сертификат своим "самоподписанным" ca.cer сертификатом и ключом ca.key (ГОСТ в OpenSSL):
$ openssl x509 -req -in gost.example.com.csr -CA ca.cer -CAkey ca.key -CAcreateserial -out gost.example.com.cer -days 5000
4. Создаём каталог /etc/nginx/ssl и копируем туда файлы gost.example.com.cer и gost.example.com.key:
# mkdir /etc/nginx/ssl # cp /home/user/gost.example.com.cer /etc/nginx/ssl/ # cp /home/user/gost.example.com.key /etc/nginx/ssl/
5. Создаём файл конфигурации /etc/nginx/sites-available.d/gost.conf:
server { server_name gost.example.com; listen 443 ssl; ssl_certificate /etc/nginx/ssl/gost.example.com.cer; ssl_certificate_key /etc/nginx/ssl/gost.example.com.key; ssl_ciphers GOST2012-GOST8912-GOST8912:HIGH:MEDIUM; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://gost.example.com; } }
Примечание: В примере указано имя сервера gost.example.com. Укажите имя своего сервера.
6. Активируем конфигурацию:
# ln -s ../sites-available.d/default.conf /etc/nginx/sites-enabled.d/default.conf # ln -s ../sites-available.d/gost.conf /etc/nginx/sites-enabled.d/gost.conf
7. Запускаем nginx:
# systemctl start nginx
8. Проверяем подключение:
$ openssl s_client -connect gost.example.com:443
CONNECTED(00000003)
depth=0 C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com
i:emailAddress = support@cryptopro.ru, C = RU, L = Moscow, O = CRYPTO-PRO LLC, CN = CRYPTO-PRO Test Center 2
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDLDCCAtugAwIBAgITEgBDYxvRc5jX7HzAXAABAENjGzAIBgYqhQMCAgMwfzEj
MCEGCSqGSIb3DQEJARYUc3VwcG9ydEBjcnlwdG9wcm8ucnUxCzAJBgNVBAYTAlJV
MQ8wDQYDVQQHEwZNb3Njb3cxFzAVBgNVBAoTDkNSWVBUTy1QUk8gTExDMSEwHwYD
VQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDIwHhcNMjAwNDE1MDc1OTI0WhcN
MjAwNzE1MDgwOTI0WjBXMQswCQYDVQQGEwJSVTERMA8GA1UEBwwIS2VtZXJvdm8x
GjAYBgNVBAoMEU15IHNpdGUgd2l0aCBHT1NUMRkwFwYDVQQDDBBnb3N0LmV4YW1w
bGUuY29tMGYwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIDQwAEQOus
D0k9picnsbVuCtks2W0z20ArSBC5MwImGeF3JM4UuQcf39qBFLuscbB6F3qe/Pbr
TrxUDtgounhsgiG5sKSjggFRMIIBTTAdBgNVHQ4EFgQUl+b3HftI3NMo4vUc3A0a
+LwrnOYwHwYDVR0jBBgwFoAUToM+FGnv7F16lStfEf43MhZJVSswXAYDVR0fBFUw
UzBRoE+gTYZLaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUvQ2VydEVucm9sbC9D
UllQVE8tUFJPJTIwVGVzdCUyMENlbnRlciUyMDIoMSkuY3JsMIGsBggrBgEFBQcB
AQSBnzCBnDBkBggrBgEFBQcwAoZYaHR0cDovL3Rlc3RjYS5jcnlwdG9wcm8ucnUv
Q2VydEVucm9sbC90ZXN0LWNhLTIwMTRfQ1JZUFRPLVBSTyUyMFRlc3QlMjBDZW50
ZXIlMjAyKDEpLmNydDA0BggrBgEFBQcwAYYoaHR0cDovL3Rlc3RjYS5jcnlwdG9w
cm8ucnUvb2NzcC9vY3NwLnNyZjAIBgYqhQMCAgMDQQA1gRqEqqTz7Ut3rxvodkFN
Pa0OHXV8bx64Z+VAKAj0pLFmNwQil6zFCPeqLkEzTnvEZrZQOC/fW4XOBnRJe0a5
-----END CERTIFICATE-----
subject=C = RU, L = Moscow, O = My site with GOST, CN = gost.example.com
issuer=emailAddress = support@cryptopro.ru, C = RU, L = Moscow, O = CRYPTO-PRO LLC, CN = CRYPTO-PRO Test Center 2
---
No client certificate CA names sent
---
SSL handshake has read 1160 bytes and written 543 bytes
Verification error: unable to verify the first certificate
---
New, TLSv1.0, Cipher is GOST2012-GOST8912-GOST8912
Server public key is 256 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : GOST2012-GOST8912-GOST8912
...
Совет: для работы с таким сервером можно использовать elinks или chromium-gost: