Konfiguracja techniczna aplikacji
System archITekt wykorzystuje własny mechanizm konfiguracji aplikacji, będący rozszerzeniem standardowego mechanizmu konfiguracji aplikacji .NET, dzięki któremu konfiguracja i wdrożenie aplikacji końcowej jest prostsze.
Mechanizm konfiguracji technicznej:
- Umożliwia centralną konfigurację aplikacji oraz korzystanie ze zmiennych i wyrażeń w plikach
*.configaplikacji .NET - Udostępnia wbudowany mechanizm Health Check dla komponentów aplikacji
Mechanizm konfiguracji aplikacji
- Działanie mechanizmu konfiguracji aplikacji opiera się o stosowanie zmiennych i wyrażeń w plikach
*.configuruchamianej aplikacji. - W momencie uruchamiania aplikacji rozwiązywane są wartości zmiennych i wyrażeń w taki sposób, że wewnętrzny mechanizm konfiguracji .NET otrzymuje już właściwe wartości w plikach konfiguracyjnych.
- Rozwiązywanie zmiennych działa wyłącznie na samym początku uruchomienia aplikacji, na etapie, gdy konfiguracja jeszcze nie została wczytana przez wewnętrzne mechanizmy .NET i nie ingeruje w późniejszym czasie w konfigurację aplikacji.
- Oznacza to, że zmiana konfiguracji aplikacji wymaga jej restartu, analogicznie jak w przypadku korzystania ze standardowego mechanizmu konfiguracji .NET.
Użycie zmiennych w aplikacji
Chcąc wykorzystać zmienną w pliku konfiguracyjnym (*.config) zapisujemy jej nazwę korzystając z notacji {nazwa_zmiennej}
Poniżej przykład zapisu sekcji ConnectionStrings, w której użyto kilku zmiennych do zdefiniowania połączeń do baz danych:
<connectionStrings>
<add name=”CONNECT_STRING”
connectionString=”{common.connection.db_data}”
providerName=”System.Data.SqlClient” />
>add name=”VSFE.CONFIG_DB”
providerName=”System.Data.SqlClient”
connectionString=”{common.connection.db_config}” />
<add name=”ADConnectionString”
connectionString=”{common.connection.provider_ad}” />
[..]
W przypadku niektórych sekcji, mechanizm konfiguracji .NET wykonuje walidację typów i wartości wpisanych do konfiguracji i zastosowanie mechanizmu nawiasów klamrowych jest niemożliwe (kończy się rzuceniem wyjątku). W tych szczególnych przypadkach zmuszeni jesteśmy do skorzystania z alternatywnego sposobu zapisu konfiguracji – jako atrybuty ukryte w komentarzu do danego elementu.
Poniżej przykład konfiguracji sekcji Security.config korzystającej z mechanizmu komentarzy:
<SecurityConfig RedirectWhiteList=””
ForceHttps=”false”
EnableBusinessLimitsFilter=”false”
RunDiagnosticsMethods=”true”
ErrorLevel=”Normal”
SecureCookies=”__RequestVerificationToken,ASP.NET_SessionId,.AspNet.ApplicationCookie”>
<!--VCONFIG EnableBusinessLimitsFilter = {www.param.enable_business_limits_filter}-->
<!--VCONFIG ForceHttps = {common.param.force_https}-->
<!--VCONFIG RunDiagnosticsMethods = {common.param.run_diagnostics_methods}-->
<!--VCONFIG ErrorLevel = {www.param.security_error_level}-->
</SecurityConfig>
W powyższym przykładzie wartości atrybutów zostaną zastąpione wartościami zmiennych zapisanych w tagach komentarza zaczynających się od !--VSONFIG. Przykładowo, zgodnie z zaznaczeniem - wartość atrybutu ForeHttps zostanie zastąpiona wartością zmiennej common.param.force_https.
Zmienne i wyrażenia
W ramach mechanizmu zmiennych konfiguracyjnych możemy korzystać z:
- wartości zmiennych np.
{common.param_forece.https}, której wartość musi być zdefiniowana w źródłach zmiennych, - wywołania statycznego property klasy np.
{#System.DateTime.UtcNow}– w tym przypadku zostanie zwrócona aktualna data UTC, - wyrażenia np.
{#IsHttps({adres}) ? ‘bindingDlaHttps’ : ‘bindingDlaHttp’}- w tym przypadku działanie będzie identyczne jak dla operatora<warunek>?<prawda>:<fałsz>znanego z języka C#.
Poniżej praktyczne przykłady użycia powyższych zapisów:
Użycie zmiennej:
<appSettings>
<add key=”WINDOWS_AUTHENTICATION” value=”{www.param.windows_authentication}” />
Dla powyższego:
www.param.windows_authentication– zmienna równa „true”- wartość klucza
VSFE.NODE_NAMEbędzie równa „true”
Użycie statycznego property z kodu:
<appSettings>
<add key=”VSFE.NODE_NAME”
value=”{#VSoft.Framework.Environment.Environment.PhysicalMachineName}_VBP_WEB” />
Dla powyższego:
VSoft.Framework.Environment.Environment.PhysicalMachineName- statyczne property w kodzie zwracające „MOJ_KOMPUTER”- wartość klucza
VSFE.NODE_NAMEbędzie równa „MOJ_KOMPUTER_VBP_WEB”
Użycie wyrażenia:
<client>
<endpoint address= ”http://invalid.url/”
bindingConfiguration=”webHttp”
binding=”wsHttpBinding”
contract=”EntryPointService”’
name=”EntryPointService”>
<!--VCONFIG: bindingConfiguration={IsHttps({specyfic.url})?’webHttp’:’webHttpSecure’}-->
<!--VCONFIG: address={specyfic.url}/WebServices/EntryPoint.svc-->
</endpoint>
Dla powyższego:
specyfic.url– zmienna o wartościhttps://my.address.com- wartość wyrażenia
IsHttps({specyfic.url})to „true” - wartość atrybutu
bindingConfigurationbędzie równawebHttpSecure
W powyższym przykładzie dla atrybutów address i bindingConfiguration podano inicjalne formalnie prawidłowe wartości, które w momencie startu konfiguracji będą wymieniane na wartości docelowe.
Takie podejście jest wymagane, ponieważ część konfiguracji jest sprawdzana przez wewnętrzny kod .NET (niezarządzany lub zarządzany) jeszcze przed uruchomieniem mechanizmu podmiany wartości i napotkanie w podmienianych atrybutach wartości niepoprawnych powodują zatrzymanie programu na starcie.
W tym konkretnym przypadku:
- property
adressjest typu URI w obiektowym modelu konfiguracji nie toleruje znaku{na początku tekstu, - property
bindingConfiguration(czy tez behavior) odnoszące się do innych plików muszą początkowo mieć wartości prowadzące do istniejących wpisów w innych częściach konfiguracji.
W przypadku wyrażeń możliwe do użycia są funkcje:
IsHttps(…)- sprawdza czy podany adres jest chroniony SSL („https://”) czy nie („http://”). Zwraca true jeśli adres rozpoczyna się od „https://”IsEmpty(…)– czy argument jest rozwiązywalny do pustego napisu (null lub whitespace). Działa analogicznie jak metoda .NET Framework „String.IsNullOrWhiteSpace()”IsBraced(…)– czy podany argument jest rozpoznanym kluczem konfiguracji technicznej. Uwaga! Funkcja eksperymentalna.
Mechanizm nie udostępnia możliwości dopisywania własnych funkcji przez dewelopera.
Definiowanie wartości zmiennych
Zmienne używane na potrzeby mechanizmu konfiguracji odczytywane są z:
- pliku
[nazwa aplikacji].exe.config.ini, - bazy danych konfiguracyjnej,
- sekcji
appSettingskonfiguracji lokalnej, W tym przypadku nazwą zmiennej będzie wartość atrybutukey, a wartością zmiennej wartość atrybutuvalue. - sekcji
connectionStringskonfiguracji lokalnej. W tym przypadku nazwą zmiennej będzie wartość atrybutuname, a wartością zmiennej wartość atrybutuconnectionString. - zmiennych środowiskowych – po ustawieniu klucza
appSettingsVSFE.CONFIG_ENV_ORDER:
- na wartość „First” – wówczas ich wartość jest ważniejsza niż wartości z .ini
- na wartość „Last” – wówczas kolejność rozwiązywania wartości przypada po źródle bazodanowym
Brak ustawienia klucza VSFE.CONFIG_ENV_ORDER powoduje brak włączenia tego dostawcy zmiennych.
Wykorzystanie zmiennych środowiskowych można też włączyć w kodzie ustawiając bardzo wcześnie właściwość ConfigReplacer.EnvReplacerOrder
- Powyższa lista została posortowana w kolejności ważności wpisów.
- Wpisy znajdujące się w źródle wymienionym na wyższej pozycji nadpisują definicję zmiennej znajdującą się w źródle znajdującym się na niższej pozycji.
- Przykładowo, jeśli zmienna
environmentNamezostanie zdefiniowana a sekcjiappConfigoraz w pliku
[nazwa aplikacji].exe.config.inito w aplikacji zostanie wykorzystana wartość z pliku[nazwa aplikacji].exe.config.ini.
Definiowanie wartości zmiennych w pliku .config.ini
W przypadku gdy w katalogu aplikacji znajdzie się plik o nazwie „[nazwa aplikacji].exe.config.ini” (czyli np. dla aplikacji WWW będzie to plik „Web.config.ini”) to zostaną z niego pobrane wartości zmiennych.
Przykład sposobu budowy pliku:
; Ten plik ma postać linii Klucz=Wartość
; W standardowej konfiguracji .NET (xml) można używać {Kluczy} i zostaną one podmienione na starcie.
; Klucze o zawartości wrażliwej (z hasłami itp..) należy umieścić w sekcji [SecuritySensitive]
; Klucze mogą mieć też postać odwołań .NET, np.:
; {#System.Environment.MachineName}
; {#System.AppDomain.CurrentDomain.BaseDirectory} -- katalog, z którego wystartował program/moduł
; {#System.DateTime.Now} -- bieżąca data i godzina
; {#System.DateTime.UtcNow} -- bieżąca data i godzina UTC
studio.mode = InProc
studio.winAuth = true
; połączenie do bazy danych
[SecuritySensitive]
common.connection.db_config = data source=RBABICZ10\SQLEXPRESS;
initial catalog=ARCHITEKT_DEMO_191_CONFIG;User Id=xxx;Password=xxx;MultipleActiveResultSets=True;
[SecuritySensitive]
my.secrect.password = very_secret_123
Umieszczając w pliku *.ini wartości zmiennych w sekcjach SecuritySensitive powodujemy, że ich wartości nie zostaną zapisane w logu.
Definiowanie wartości zmiennych w bazie danych
Aplikacja korzystająca z mechanizmu konfiguracji pobiera wartości zmiennych z bazy danych jeśli w sekcji connectionStrings jest zdefiniowane połączenie do bazy o nazwie VSFE.CONFIG_DB
W przypadku, gdy takie połączenie istnieje, wówczas wczytywana jest definicja zmiennych z tabeli CONFIG_KEYS.
Tabela zakładana jest poprzez standardowe skrypty VSoft archITekt. Jej poszczególne kolumny:
CK_KEY– przechowuje nazwę zmiennejCK_VALUE– przechowuje wartość zmiennejCK_NODE_NAME– jeśli jest pusta, to wartość zmiennej obowiązuje dla wszystkich komponentów środowiska. Jeśli nie, wówczas wartość zmiennej obowiązuje na komponentach o nazwie wskazanej w tej kolumnie (można stosować wyrażenia regularne, np.^MyServer_.*$)CK_SENSITIVE– wartość 1 oznacza, że zmienna jest wrażliwą; działa identycznie jak atrybutSecuritySensitivew pliku*.config.ini(zmienna jest ukrywana na listach kluczy). Flaga nie szyfruje wartości – zaszyfrowana wartość (ENC1:) jest odszyfrowywana niezależnie od flagi. Wartość kolumny ustawiają skrypty instalacyjne – patrz Klucze wrażliweCK_DESCRIPTION– opis znaczenia zmiennejCK_PUBLIC– wartość 1 oznacza, że zmienna pojawi się w edytowanym widokuENV_CONFIGURATION
W kolumnie CK_NODE_NAME można stosować wildcardy, czyli np. zapisanie nazwy węzła w postaci DB_* spowoduje, że wartość zmiennej będzie widoczna na wszystkich węzłach, których nazwa zaczyna się od DB_
Widok ENV_CONFIGURATION przechowujący część zmiennych wykorzystywany jest wówczas, gdy chcemy końcowemu administratorowi systemu zawęzić wgląd jedynie w część zmiennych do konfiguracji. Wówczas należy ustalić z nim, by korzystał z tego widoku a nie bezpośrednio z tabeli CONFIG_KEYS
Na potrzeby skryptów instalacyjnych / aktualizacyjnych zostały dostarczone procedury składowane:
EnsureConfigKey– tworząca nowy wpis w bazie danych oraz aktualizująca opis dla istniejących kluczy (nie zmienia wartości klucza, jeśli już taki istnieje)GetConfigKey– zwracająca wartość danego kluczaSetConfigKey– ustalająca wartość klucza w bazie danych
Definiowanie wartości w sekcjach appConfig i connectionString
Wpisy w sekcjach appConfig i connectionString są traktowane jako zmienne możliwe do wykorzystania w mechanizmie konfiguracji technicznej.
- W przypadku
appConfignazwą zmiennej jest atrybutkey, wartością atrybutvalue. - W przypadku
connectionStringnazwą zmiennej jest atrybutname, wartością atrybutconnectionString.
Ograniczenia
Mechanizm działa wyłącznie dla głównego pliku app.config / web.config i plików, które są jego dziećmi. Nie obsługuje plików *.config, które są niezależne od pliku app.config / web.config, takich jak np:
NLog.config, gdy jest wczytywany wewnętrznym mechanizmem NLog’a i jest włączany w aplikacji za pomocą:
<nlog>
<include file=”${basedir}/Configuration/Environment/NLog.config” />
</nlog>
- pliki
Web.Configznajdujące się w podkatalogach aplikacji WWW. W tym przypadku w danym podkatalogu wszystkie strony korzystają z podstawowego mechanizmu konfiguracji .NET z nie-rozwiązanymi wartościami zmiennych.
Konwencja nazywania zmiennych
W celu zachowania porządku w nazwach zmiennych używanych w konfiguracji technicznej sugerowane jest zastosowanie poniższej konwencji nazewniczej:
{nazwa komponentu}.{typ wpisu}.{nazwa wpisu}
Poszczególne pola powinny być wypełniane wartościami:
- nazwa komponentu: nazwa komponentu, w którym używana jest zmienna konfiguracyjna. Jeśli zmienna używana jest w kilku komponentach jako nazwę komponentu należy podać
common - typ komponentu: typ powinien być skorelowany z tym, co dana zmienna przechowuje. Najczęściej stosowane typy zmiennych to:
url,restapi,connection,id,cert,param. W przypadku stosowania specyficznego, niepowtarzalnego, typu zmiennych, jako typ należy podaćparam - nazwa wpisu – nazwa powinna w jasny sposób opisywać do czego służy zmienna.
Dodatkowo, dbając o łatwość konfiguracji należy zadbać o to, by w polu CK_DECRIPTION podać jasny komentarz do czego służy klucz, jeśli to konieczne, to również jakie wartości są konieczne do wprowadzenia.
Mechanizm Health Check
Platforma archITekt posiada wbudowany mechanizm health check.
Mechanizm:
- powoduje cykliczne raportowanie przez poszczególne komponenty informacji o tym czy działają zapisywane w bazie danych,
- umożliwia z poziomu centralnej bazy danych uruchamianie w komponentach funkcji auto-diagnostyki na różnych poziomach szczegółowości.
Tabela NODES
Mechanizm działa w oparciu o tabelę NODES znajdującą się w konfiguracyjnej bazie danych, która jest zakładana za pomocą standardowych skryptów archITekta.
Tabela NODES zawiera kolumny:
N_NAME– nazwa NODE, wartość która jest konfigurowana w sekcji appConfig w kluczuVSFE.NODE_NAMEWartość powinna być unikalna dla każdego NODE.N_STATUS_AUTO– wyświetla w czytelny sposób informację o życiu komponentu. Wartość jest wyliczana z pólN_STATUS,N_STATUS_DTN_COMMAND_INPUT– pole, w które można wpisać dane komendy do uruchomienia diagnostyki.N_COMMENT– informacje na temat węzła. W to pole może wpisać tekst użytkownik, nie są one w żaden sposób modyfikowane przez komponent.N_HOSTNAME– nazwa hosta, na którym zainstalowany jest komponent.N_IP– adres IP pierwszego interfejsu sieciowego komputera, na którym działa komponent.N_PID– numer procesu działającego komponentu.N_START_DT– czas uruchomienia komponentu. Aktualizowany podczas kolejnego (re)startu komponentu.N_PASSIVE_URL– adres dostępowy do komponentu dla komponentów WWW.N_DIR_PATH– ścieżka sieciowa prowadząca do katalogu z binariami komponentu.N_STATUS– informacja o statusie działania komponentu.N_STATUS_DT– czas ostatniej aktualizacji tabeli przez komponent.
Cykliczne potwierdzanie życia komponentu
Komponenty aplikacji aktualizują cyklicznie informacje o swoim statusie w tabeli NODES uaktualniając pola N_STATUS i N_STATUS_DT Na tej podstawie wyliczana jest wartość pola N_STATUS_AUTO
Sterowanie działaniem mechanizmu health check
Mechanizm health check jest sterowany przez ustawienia kluczy konfiguracyjnych.
| Nazwa klucza | Opis | Działanie w przypadku braku klucza |
|---|---|---|
VSFE.NODES_DB | Ustawienie tego klucza w connectionStrings, spowoduje że we wskazanej bazie danych będzie poszukiwana tabela NODES. | Brak ustawienia klucza spowoduje wykorzystania połączenia z klucza VSFE.CONFIG_DB |
VSFE.NODE_NAME | Nazwa węzła, musi być unikalna dla każdego komponentu aplikacji, w przeciwnym wypadku w logach regularnie będą raportowane błędy dotyczące nt. wykrycia duplikatu węzła. | Brak ustawienia klucza spowoduje wyłączenie mechanizmu health check dla danego komponentu. |
VSFE.POLLING_INTERVAL | Klucz określa co ile sekund ma uruchamiać się mechanizm raportujący aktualny stan węzła w tabeli NODES. próba komunikacji z bazą węzłów (domyślnie 30). | Brak ustawienia klucza spowoduje wykorzystanie domyślnego ustawienia - mechanizm będzie raportował co 30 sekund. |
VSFE.CONFIG_RECHECK_MODE | Tryb raportowania w przypadku zmiany wartości kluczy konfiguracyjnych. | Dopuszczalne wartości: NONE, REPORT_USED_CONFIG_ONLY, REPORT_ALL. Brak ustawienia klucza spowoduje wykorzystanie domyślnego ustawienia - REPORT_USED_CONFIG_ONLY. |
Wartości dla zmiennej VSFE.CONFIG_RECHECK_MODE
- Wartość
REPORT_ALLoznacza, że zmiana dowolnego klucza konfiguracji (nawet nie używanego w plikach .config) powoduje raportowanie. - Wartość
REPORT_USED_CONFIG_ONLYpowoduje reakcję tylko gdy zmieniła się wartość klucza używanego przez pliki .config.
Uruchomienie procedury diagnostyki
- Uruchomienie procedury diagnostyki jest wykonywane poprzez aktualizację tabeli NODES dla wybranego węzła – należy wpisać w kolumnę
N_COMMAND_INPUTwartość „DIAG n”, gdzie n to liczba do przekazania do zarejestrowanych fabryk diagnostyki VSoft.Framework.Environment.Diagnostics.IDiagnosableFactory.Create- Rezultaty działania wytworzonych procedur diagnostyki zostaną zapisane w logach technicznych danego komponentu.
- Własne procedury reakcji na zapisy w kolumnie
N_COMMAND_INPUTmożna rejestrować w EnvNode.CommandHandlers. Prefix „DIAG” jest jedną z tego typu rejestracji.
Konfiguracja SMTP - common.param.smtp_
Aby możliwa była wysyłka e-maili należy skonfigurować poniższe opcje. Wszystkie ustawienia serwera pocztowego SMTP mają wspólny trzon nazwy common.param.smtp_
Wykaz zmiennych:
| Nazwa zmiennej | Wartość domyślna | Opis |
|---|---|---|
common.param.smtp_server | Adres serwera pocztowego SMTP | |
common.param.smtp_port | 25 | Port usługi SMTP |
common.param.smtp_security | Auto | Sposób zabezpieczania połączenia |
common.param.smtp_ignore_certificate_errors | None | Zmiana niezalecana. Pozwala zignorować niektóre błędy certyfikatów serwera |
common.param.smtp_username | Nazwa użytkownika dla usługi SMTP. Używane, gdy common.param.smtp_authentication jest ustawione na UserPassword | |
common.param.smtp_password | Hasło użytkownika dla usługi SMTP. Używane, gdy common.param.smtp_authentication ma wartość UserPassword | |
common.param.smtp_authentication | UserPassword | Tryb uwierzytelniania serwera SMTP. Jeśli wartość klucza jest pusta, system użyje wartości domyślnej UserPassword. Możliwe wartości: UserPassword - Nazwa użytkownika i hasło są wymagane do uwierzytelnienia. Wartość domyślna. Anonymous - dostęp anonimowy. Serwer nie wymaga uwierzytelniania. |
Zmienne bez wyspecyfikowanej wartości domyślnej należy obowiązkowo skonfigurować.
Zmienne common.param.smtp_server, common.param.smtp_username i common.param.smtp_password są wrażliwe z definicji – ich wartości podane w parametrze configKeys skryptów instalacyjnych są zapisywane w sposób zaszyfrowany i nie trafiają do logów. Patrz: Klucze wrażliwe.
common.param.smtp_server
Określa adres DNS serwera pocztowego SMTP, np. "mail.contoso.com".
- Wartość obowiązkowa.
- Brak wartości domyślnej.
common.param.smtp_port
Określa port usługi SMTP.
- Wartość domyślna to 25.
- Wartość domyślna nie zależy od innych ustawień.
- Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość.
- Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).
common.param.smtp_security
Ustawienie zabezpieczenia połączenia z serwerem SMTP.
- Domyślna wartość to Auto.
- Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość
- Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).
Zmienna przyjmuje wartości z typu enum VTS2.Core.Blocks.Output.SmtpConnectionSecurity
| Wartość | Opis |
|---|---|
| None | Połączenie niezabezpieczone. |
| Auto | Aplikacja wynegocjuje najbardziej bezpieczny rodzaj połączenia. |
| SslOnConnect | Aplikacja wymaga połączenia zabezpieczonego od samego początku. |
| StartTls | Aplikacja wymaga, aby serwer wspierał rozszerzenie protokołu STARTTLS. We wstępnej fazie połączenie nie będzie zabezpieczone. |
| StartTlsWhenAvailable | Aplikacja użyje rozszerzenia STARTTLS jeżeli jest obsługiwane przez serwer SMTP. Jeżeli nie, połączenie pozostanie niezabezpieczone i e-maile będą wysyłane bez szyfrowania. W zależności od konfiguracji serwera działa jak StartTls albo jak None. |
Dostępne opcje są kopią z SecureSocketOptions w MailKit v2.9. Więcej informacji może być dostępne dokumentacji na stronie projektu: http://www.mimekit.net/.
smtp_ignore_certificate_errors
Zmiana domyślnej wartości nie jest zalecana, a nawet odradzana.
Ustawienie pozwala na zignorowanie pewnych błędów konfiguracji certyfikatów serwera SMTP.
- Domyślna wartość to None.
- Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość.
- Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).
Dostępne wartości pochodzą z typu enum VTS2.Core.Blocks.Output.IgnoreCertificateErrors
| Wartość | Opis |
|---|---|
| None | Jedyna zalecana wartość dla tego klucza. Każda inna w praktyce redukuje do zera poziom zabezpieczeń połączenia. |
| All | Aplikacja zignoruje wszystkie błędy związane z certyfikatem. Odpowiednik ustawienia wszystkich flag. |
| RemoteCertificateNotAvailable | (flaga) Certyfikat nie był dostępny. |
| RemoteCertificateNameMismatch | (flaga) Certyfikat został opublikowany dla innego adresu serwera, niż adres połączenia zdefiniowany w kluczu common.param.smtp_server |
| RemoteCertificateChainErrors | (flaga) Certyfikat nie mógł zostać poprawnie zwalidowany. Zwykle oznacza to, że w łańcuchu zaufania certyfikatu nie odnaleziono zaufanego certyfikatu (np. należącego do urzędu certyfikacji). Typowo błąd dotyczy certyfikatów roboczych (np. self-signed.) |
Można połączyć dwie lub więcej wartości oznaczone jako flaga, rozdzielając przecinkiem, np:
RemoteCertificateNameMismatch, RemoteCertificateChainErrors pozwoli połączyć się z serwerem, który identyfikuje się roboczym certyfikatem wystawionym dla innego adresu, niż adres połączenia.
Wartości flag RemoteCertificate... odpowiadają bezpośrednio wartościom SslPolicyErrors. Więcej informacji o tym kiedy i dlaczego te błędy są zgłaszane może być dostępne na stronach Microsoftu.
common.param.smtp_authentication
Tryb autentykacji dla serwera SMTP.
- Domyślna wartość to
UserPassword - Wartość domyślna zostanie ustawiona, gdy zmienna ma pustą wartość.
- Niepoprawna wartość klucza powoduje błąd wykonania programu (wyjątek).
Zmienna przyjmuje wartości z typu enum VTS2.Core.Blocks.Output.SmtpAuthentication
| Wartość | Opis |
|---|---|
| UserPassword | Autentykacja przy pomocy nazwy użytkownika i hasła podanego w zmiennych common.param.smtp_username i common.param.smtp_password |
| Anonymous | Pozwala na dostęp bez logowania w protokole SMTP, kiedy serwer nie wymaga autentykacji. |
common.param.smtp_username
Nazwa użytkownika do połączenia z serwerem SMTP.
- Wartość używana, gdy
common.param.smtp_authenticationjest ustawione naUserPassword - Brak wartości domyślnej.
common.param.smtp_password
Hasło użytkownika do połączenia z serwerem SMTP.
- Wartość używana, gdy
common.param.smtp_authenticationjest ustawione naUserPassword - Brak wartości domyślnej.