Daw’r twnnel i fyny, mae QGIS yn cysylltu, ac mae’r mewngofnodi yn marw gyda gwall tystysgrif sy’n enwi 127.0.0.1 yn lle gwesteiwr y gronfa ddata. Y cam nesaf temtasiwn yw llacio sslmode, sy’n tewi’r gwiriad ac yn taflu’r warant hunaniaeth yr oeddech ei eisiau yn y lle cyntaf. Y gwir broblem yw bod y porth lleol ac enw’r gweinydd yn cael eu storio yn yr un maes. Mae cofnod gwasanaeth libpq yn eu gwahanu, felly mae’r soced yn mynd i’r porth a anfonwyd ymlaen tra bo TLS yn dal i wirio’r enw a argraffwyd ar y dystysgrif.

Beth mae’r cleient yn meddwl ei fod yn cysylltu ag ef

O dan sslmode=verify-full, mae libpq yn cymharu’r dystysgrif y mae’r gweinydd yn ei chyflwyno â’r enw gwesteiwr y gofynnwyd amdano. Pan fo’r enw hwnnw yn gyfeiriad loopback, mae’r gymhariaeth yn methu hyd yn oed os yw’r dystysgrif yn ddilys ar gyfer gwir westeiwr y gronfa ddata. Mae anfon SSH ymlaen yn newid pa soced sy’n cario’r beitiau, nid yr hunaniaeth y dylai’r cleient ei disgwyl. Unwaith y gwahanir y ddau syniad, nid yw’r gwall yn edrych fel nam TLS mwyach.

Nid yw anfon ymlaen yn awdurdodiad chwaith. Mae PostgreSQL yn dal i gymhwyso ei reolau ei hun i’r cysylltiad y mae’r gweinydd SSH yn ei wneud, felly cadwch y haen gludo a’r haen gronfa ddata ar wahân cyn newid unrhyw beth.

Rhwymwch yr anfoniad ymlaen at loopback yn unig

Dylai’r gwrandawr fodoli ar beiriant QGIS a dim unman arall. Mae enwi 127.0.0.1 yn benodol yn ei gadw oddi ar ryngwynebau eraill, tra gall cyfeiriad rhwymo a hepgorir amlygu’r porth yn dibynnu ar osodiadau porth y cleient SSH.

ssh -N -L 127.0.0.1:15432:127.0.0.1:5432 [email protected]

Mae’r cyrchfan ar ôl yr ail goron yn cael ei datrys o ochr y gweinydd SSH, felly mae’r enghraifft hon yn tybio bod PostgreSQL ar yr un gwesteiwr â sshd; mae angen y cyfeiriad hwnnw a’i ganiatâd ar gronfa ddata ar beiriant arall. Rhedwch y sesiwn gyda -N fel na agorir cragen, gadewch y gwiriad allwedd gwesteiwr yn llonydd, a chadarnhewch fod y gwrandawr yn ymddangos cyn beio QGIS. Os yw’r porth eisoes yn cael ei ddefnyddio, mae’r anfoniad ymlaen yn methu wrth gychwyn yn hytrach nag ar adeg y cwestiwn.

Rhowch yr enw a’r soced mewn un cofnod gwasanaeth

Mae ffeil gwasanaeth yn gadael i’r un cysylltiad gario enw gwirio a chyrchfan soced wahanol. Cadwch y cofnod lle mae libpq yn chwilio am wasanaethau, neu cyfeiriwch PGSERVICEFILE ato.

[gis-via-ssh]
host=db.geo.example
hostaddr=127.0.0.1
port=15432
dbname=gisdb
user=gis_reader
sslmode=verify-full
gssencmode=disable
sslrootcert=/path/to/approved-root.crt

Yma mae host yn cadw’r hunaniaeth a ddefnyddir ar gyfer gwiriadau tystysgrif tra bo hostaddr yn anfon pecynnau i’r porth loopback a anfonwyd ymlaen, ac mae angen y ddau i’r drefn hon weithio. gssencmode=disable yn bwysig mewn adeilediadau a fyddai fel arall yn negodi amgryptio GSSAPI yn gyntaf, oherwydd mae’r llwybr hwnnw’n anwybyddu’r gosodiadau TLS a osodwyd gynnau. Cyfeiriwch at y gwasanaeth wrth ei enw o ddialog cysylltiad PostgreSQL QGIS a rhowch y cyfrinair drwy’r anogwr arferol, nid o fewn ffeil a rennir. Mae’r enwau a’r llwybrau uchod yn ddalwyr lle; rhowch eich gwerthoedd cymeradwy eich hun yn eu lle.

Beth mae PostgreSQL yn dal i wirio ar ôl y twnnel

Mae’r gweinydd yn gweld cysylltiad o westeiwr SSH, loopback yn y drefn hon, ac yn ei gyfateb yn erbyn y rheolau dilysu yn seiliedig ar westeiwr yn eu trefn. Mae’n rhaid i’ch rôl gronfa ddata ddilysu o hyd, ac nid yw mewngofnodi SSH yn rhoi unrhyw hunaniaeth gronfa ddata ynddo’i hun. Gwiriwch beth mae’r gweinydd yn ei gredu yn hytrach na beth roedd y cleient wedi tybio.

psql "service=gis-via-ssh" -c "select inet_server_addr(), current_user"

Caewch y sesiwn anfon ymlaen pan fydd y gwaith wedi gorffen; yna mae’r cofnod lleol yn stopio gweithio ac nid oes dim arall yn newid. Nid yw un llwybr cronfa ddata yn VPN ar gyfer holl gleient GIS, a thrin fel pe bai’n un yw sut mae’r cysylltiad nesaf yn cael ei ddiagnosio’n anghywir.

Erthyglau cysylltiedig