Skip to main content

Организовать API с 1С

Apache

Качаем Apache, копируем на диск C

httpd.conf

# === Основные настройки ===
Define SRVROOT "C:/Apache24"
ServerRoot ${SRVROOT}
Listen 4453
ServerAdmin admin@example.org
ServerName terminal.example.org

# === Размер тела запроса (100MB) ===
LimitRequestBody 104857600

# === Поддержка Keep-Alive для долгих запросов 1С ===
KeepAlive On
MaxKeepAliveRequests 1000
KeepAliveTimeout 300
Timeout 600

# === Настройки ядра ===
AcceptFilter https none 
AcceptFilter http none 
EnableSendfile Off 
EnableMMAP Off 

# === Загрузка необходимых модулей ===
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule _1cws_module "C:/Program Files/1cv8/8.3.27.1859/bin/wsap24.dll"
LoadModule headers_module modules/mod_headers.so
LoadModule alias_module modules/mod_alias.so

# === Корневая директория ===
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# === Запрет доступа к системным файлам ===
<Files ".ht*">
    Require all denied
</Files>
<DirectoryMatch "^.*/\



..+"> Require all denied </DirectoryMatch> # === Логи === ErrorLog "logs/error.log" LogLevel warn CustomLog "logs/access.log" common # === SSL === <IfModule ssl_module> SSLEngine On SSLCertificateFile conf/ssl/cert.pem SSLCertificateKeyFile conf/ssl/key.pem SSLCACertificateFile conf/ssl/ca.crt SSLProtocol -all +TLSv1.2 SSLCipherSuite HIGH:!aNULL:!MD5 SSLHonorCipherOrder On #SSLOpenSSLConfCmd CertificateVerification require SSLSessionCache "shmcb:${SRVROOT}/logs/ssl_scache(2048000)" SSLSessionCacheTimeout 300 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl CustomLog "${SRVROOT}/logs/ssl_request.log" \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" env=HTTPS </IfModule> # === Публикация базы 1С === Alias "/post4egor" "bases/post4egor" <Directory "bases/post4egor"> AllowOverride None Options None Require all granted SetHandler 1c-application ManagedApplicationDescriptor "bases/post4egor/default.vrd" #Header set Cache-Control "no-store, no-cache, must-revalidate" #Header set Pragma "no-cache" SSLVerifyClient require SSLRequire %{SSL_CLIENT_S_DN_CN} eq "Apache1CPub" </Directory> # === Индексный файл === <IfModule dir_module> DirectoryIndex index.html </IfModule>

default.vrd

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		base="/post4egor"
		ib="Srvr=&quot;onec&quot;;Ref=&quot;post4egor&quot;;usr=&quot;1CAPIUser&quot;;pwd=&quot;keef9yooy3Ze1itiexie&quot;;">
		<httpServices publishByDefault="false">
		<service name="Api"
			rootUrl="api"
			enable="true"
			reuseSessions="autouse"
			sessionMaxAge="60"
			poolSize="20"
			poolTimeout="10">
		</service>
	</httpServices>
</point>

Выпускаем себе сертификат для веб-сервера:

openssl req -x509 -nodes -days 3650 -newkey rsa:20483072 \
  -keyout key.pem \
  -out cert.pem \
  -subj "/C=RU/ST=Moscow/L=Moscow/O=Company Name/Company/OU=IT Department/IT/CN=localhost"

Выпускаем CA для подписания клиентских сертификатов

openssl req -new -newkey rsa:20483072 -nodes -keyout ca.key -x509 -days 3650 \
          -subj /C=RU/ST=Msk/L=Msk/O=MyOrg/OU=MyUnit/CN=IT/emailAddress=usr@localhost \
          -out ca.crt

О том, как выпустить клиентские сертификаты в Apache написано тут:
https://www.opennet.ru/base/sec/ssl_cert.txt.html
Добавляю свой CA и выпущенный ключ ApachePub. Для доступа в windows, mac os, android достаточно установить полученный p12 файл