pdf viewer in asp net c# : Add picture to pdf online application Library cloud windows asp.net html class postgresql-9.4-A452-part2975

Chapter 17. Server Setup and Operation
:openfiles-cur=256:\
...
(
-cur
is the soft limit. Append
-max
to set the hard limit.)
Kernels can also have system-wide limits on some resources.
On Linux
/proc/sys/fs/file-max
determines the maximum number of open files that the ker-
nel will support. It can be changed by writing a different number into the file or by adding an as-
signment in
/etc/sysctl.conf
.The maximum limit of files per process is fixed at the time the
kernel is compiled; see
/usr/src/linux/Documentation/proc.txt
for more information.
The PostgreSQL server uses one process per connection so you should provide for at least as many
processes as allowed connections, in addition to what you need for the rest of your system. This is
usually not a problem but if you run several servers on one machine things might get tight.
The factory default limit on open files is often set to “socially friendly” values that allow many users
to coexist on a machine without using an inappropriate fraction of the system resources. If you run
many servers on a machine this is perhaps what you want, but on dedicated servers you might want
to raise this limit.
On the other side of the coin, some systems allow individual processes to open large numbers of
files; if more than a few processes do so then the system-wide limit can easily be exceeded. If you
find this happening, and you do not want to alter the system-wide limit, you can set PostgreSQL’s
max_files_per_process configuration parameter to limit the consumption of open files.
17.4.3. Linux Memory Overcommit
InLinux 2.4 and later, the default virtual memory behavior is not optimalfor PostgreSQL. Because of
the way that the kernel implements memory overcommit, the kernel might terminate the PostgreSQL
postmaster (the master server process) if the memory demands of either PostgreSQL or another pro-
cess cause the system to run out of virtual memory.
If this happens, youwill see a kernel message that looks like this (consult your system documentation
and configuration on where to look for such a message):
Out of Memory: Killed process 12345 (postgres).
This indicates that the
postgres
process has beenterminated due to memorypressure. Althoughex-
isting database connections will continue to function normally, no newconnections will be accepted.
To recover, PostgreSQL will need to be restarted.
One way to avoid this problem is to run PostgreSQL on a machine where you can be sure that other
processes will not run the machine out of memory. If memory is tight, increasing the swap space of
the operating system can helpavoidtheproblem, because the out-of-memory (OOM) killer is invoked
only when physical memory and swap space are exhausted.
If PostgreSQL itself is the cause of the system running out of memory, you can avoid the problem
by changing your configuration. In some cases, it may help to lower memory-related configuration
parameters, particularly
shared_buffers
and
work_mem
.Inother cases, the problemmaybe caused
by allowing too many connections to the database server itself. In many cases, it may be better to
reduce
max_connections
and insteadmake use of external connection-pooling software.
448
Add picture to pdf online - insert images into PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sample C# code to add image, picture, logo or digital photo into PDF document page using PDF page editor control
add image to pdf form; add an image to a pdf acrobat
Add picture to pdf online - VB.NET PDF insert image library: insert images into PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide VB.NET Programmers How to Add Images in PDF Document
adding image to pdf file; attach image to pdf form
Chapter 17. Server Setup and Operation
On Linux 2.6 and later, it is possible to modify the kernel’s behavior so that it will not “overcommit”
memory. Although this settingwill not prevent the OOM killer
1
from being invoked altogether, itwill
lower the chances significantly and will therefore lead to more robust system behavior. This is done
by selecting strict overcommit mode via
sysctl
:
sysctl -w vm.overcommit_memory=2
or placing an equivalent entry in
/etc/sysctl.conf
. You might also wish to modify
the related setting
vm.overcommit_ratio
. For details see the kernel documentation file
Documentation/vm/overcommit-accounting
.
Another approach, which canbeused withor withoutaltering
vm.overcommit_memory
,is toset the
process-specific
oom_score_adj
value for the postmaster process to
-1000
,thereby guaranteeing it
will not be targeted by the OOM killer. The simplest way to do this is to execute
echo -1000 > /proc/self/oom_score_adj
in the postmaster’s startup script just before invoking the postmaster. Note that this action must be
done as root, or it will have no effect; so a root-owned startup script is the easiest place to do it. If
you do this, you may also wish to build PostgreSQL with
-DLINUX_OOM_SCORE_ADJ=0
added to
CPPFLAGS
.Thatwill causepostmaster childprocesses to runwith the normal
oom_score_adj
value
of zero, so that the OOM killer can still target them at need.
Older Linuxkernels do not offer
/proc/self/oom_score_adj
,butmayhave a previous version of
the same functionality called
/proc/self/oom_adj
.This works the same except the disable value
is
-17
not
-1000
.The corresponding build flag for PostgreSQL is
-DLINUX_OOM_ADJ=0
.
Note: Some vendors’ Linux 2.4 kernels are reportedtohave early versions of the 2.6 overcommit
sysctl
parameter. However, setting
vm.overcommit_memory
to 2 on a 2.4 kernel that does not
have therelevant code will make things worse, not better. It is recommended that you inspect the
actual kernel source code (see the function
vm_enough_memory
in the file
mm/mmap.c
)to verify
what is supported in your kernel before you try this in a 2.4 installation. The presence of the
overcommit-accounting
documentation file should not be taken as evidence that the feature is
there. If in any doubt, consult a kernel expert or your kernel vendor.
17.4.4. Linux huge pages
Using huge pages reduces overheadwhen usinglarge contiguous chunks of memory, like PostgreSQL
does. To enable this feature in PostgreSQL you need a kernel with
CONFIG_HUGETLBFS=y
and
CONFIG_HUGETLB_PAGE=y
.You also have to tune the system setting
vm.nr_hugepages
.To es-
timate the number of necessary huge pages start PostgreSQL without huge pages enabled and check
the
VmPeak
value from the proc file system:
$
head -1 /path/to/data/directory/postmaster.pid
4170
$
grep ^VmPeak /proc/4170/status
VmPeak:
6490428 kB
6490428
/
2048
(
PAGE_SIZE
is
2MB
in this case) are roughly
3169.154
huge pages, so you will
need at least
3170
huge pages:
1. http://lwn.net/Articles/104179/
449
C# TIFF: How to Insert & Burn Picture/Image into TIFF Document
Support adding image or picture to an existing or new new REImage(@"c:\ logo.png"); // add the image powerful & profession imaging controls, PDF document, tiff
add photo to pdf in preview; how to add an image to a pdf file
VB.NET Image: Image Cropping SDK to Cut Out Image, Picture and
This online tutorial page will illustrate the image VB.NET image cropping method to crop picture / photo; size of created cropped image file, add antique effect
how to add a picture to a pdf file; add photo to pdf for
Chapter 17. Server Setup and Operation
$
sysctl -w vm.nr_hugepages=3170
Sometimes the kernel is not able to allocate thedesirednumber of huge pages, so it mightbenecessary
to repeat that command or to reboot. Don’t forget to add an entry to
/etc/sysctl.conf
to persist
this setting through reboots.
The default behavior for huge pages in PostgreSQL is to use them when possible and to fallback to
normal pages when failing. To enforce the use of huge pages, you can set
huge_pages
to
on
.Note
that in this case PostgreSQL will fail to start if not enough huge pages are available.
For a detailed description of the Linux huge pages feature have a look at
https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt.
17.5. Shutting Down the Server
There are several ways to shutdownthe database server. Youcontrol the type of shutdown by sending
different signals to the master
postgres
process.
SIGTERM
This is the SmartShutdown mode. After receiving SIGTERM, the server disallows new connec-
tions, but lets existing sessions end their work normally. It shuts down only after all of the ses-
sions terminate. If the server is in online backup mode, it additionally waits until online backup
mode is no longer active. While backup mode is active, new connections will still be allowed,
but only to superusers (this exception allows a superuser to connect to terminate online backup
mode). If the server is in recovery when a smart shutdown is requested, recovery and streaming
replication will be stopped only after all regular sessions have terminated.
SIGINT
This is the Fast Shutdown mode. The server disallows new connections and sends all existing
server processes SIGTERM, which will cause them to abort their current transactions and exit
promptly. It then waits for all server processes to exit and finally shuts down. If the server is in
online backup mode, backup mode will be terminated, rendering the backup useless.
SIGQUIT
This is the Immediate Shutdown mode. The server will send SIGQUIT to all child processes and
wait for them to terminate. If any do not terminate within 5 seconds, they will be sent SIGKILL.
The master server process exits as soon as all child processes have exited, without doingnormal
database shutdown processing. This will lead to recovery (by replaying the WAL log) uponnext
start-up. This is recommended only inemergencies.
The pg_ctl program provides a convenient interface for sending these signals to shutdown the server.
Alternatively, you can send the signal directly using
kill
on non-Windows systems. The PID of the
postgres
process canbe found using the
ps
program, or from the file
postmaster.pid
in the data
directory. For example, to do a fast shutdown:
$
kill -INT ‘head -1 /usr/local/pgsql/data/postmaster.pid‘
450
VB.NET TIFF: How to Draw Picture & Write Text on TIFF Document in
NET, please go to the online guide for New RaterEdgeDrawing() drawing.Picture = "RasterEdge" drawing powerful & profession imaging controls, PDF document, tiff
add a jpeg to a pdf; how to add a jpg to a pdf
VB.NET Image: VB.NET Codes to Add Antique Effect to Image with .
mature technology to replace a picture's original colors add the glow and noise, and add a little powerful & profession imaging controls, PDF document, image
add picture to pdf form; add image to pdf in preview
Chapter 17. Server Setup and Operation
Important: It is best not to use SIGKILL to shut downthe server. Doing so will prevent the server
from releasing sharedmemory and semaphores, which might then have to be done manually be-
forea newserver canbestarted. Furthermore, SIGKILLkills the
postgres
processwithout letting
it relay the signal to its subprocesses, so it will be necessary to kill the individual subprocesses
by hand as well.
To terminate an individual session while allowing other sessions to continue, use
pg_terminate_backend()
(see Table 9-64) or send a SIGTERM signal to the child process
associated with the session.
17.6. Upgrading a PostgreSQL Cluster
This section discusses how to upgrade your database data from one PostgreSQL release to a newer
one.
PostgreSQL major versions are represented by the first two digit groups of the version number, e.g.,
8.4. PostgreSQL minor versions are represented by the third group of version digits, e.g., 8.4.2 is the
second minor release of 8.4. Minor releases never change the internal storage format and are always
compatible with earlier and later minor releases of the same major version number, e.g., 8.4.2 is
compatible with 8.4, 8.4.1 and 8.4.6. To update between compatible versions, you simply replace the
executables while the server is down and restart the server. The data directory remains unchanged —
minor upgrades are that simple.
For major releases of PostgreSQL, the internal data storage format is subject to change, thus compli-
cating upgrades. Thetraditional method for movingdatato anewmajor version is to dump and reload
the database, though this can be slow. A faster method is pg_upgrade. Replication methods are also
available, as discussed below.
New major versions also typically introduce some user-visible incompatibilities, so application pro-
gramming changes might be required. All user-visible changes are listed in the release notes (Ap-
pendix E); pay particular attention to the section labeled "Migration". If you are upgrading across
several major versions, be sure to read the release notes for each intervening version.
Cautious users will want to test their client applications on the new version before switching over
fully; therefore, it’s often a goodidea tosetupconcurrent installations of oldandnewversions. When
testing a PostgreSQL major upgrade, consider the following categories of possible changes:
Administration
The capabilities available for administrators to monitor and control the server often change and
improve in eachmajor release.
SQL
Typically this includes new SQL command capabilities and not changes in behavior, unless
specifically mentioned in the release notes.
Library API
Typically libraries like libpq only add new functionality, again unless mentioned in the release
notes.
System Catalogs
System catalog changes usually only affect database management tools.
451
VB.NET Image: Image Scaling SDK to Scale Picture / Photo
Framework application; VB.NET sample code for how to scale image / picture; Frequently asked questions about RasterEdge VB.NET image scaling control SDK add-on.
adding an image to a pdf in preview; how to add image to pdf file
VB.NET Image: Image Resizer Control SDK to Resize Picture & Photo
NET Method to Resize Image & Picture. Here we this VB.NET image resizer control add-on, can provide powerful & profession imaging controls, PDF document, image
add image to pdf acrobat; adding images to pdf forms
Chapter 17. Server Setup and Operation
Server C-language API
This involves changes in the backend function API, which is written in the C programming
language. Such changes affect code that references backend functions deep inside the server.
17.6.1. Upgrading Data via pg_dumpall
One upgrade method is to dump data from one major version of PostgreSQL and reload it in another
—to do this, you must use a logical backup tool like pg_dumpall; file system level backup methods
will not work. (There are checks in place that prevent you from using a data directory with an in-
compatible version of PostgreSQL, so no great harm can be done by trying to start the wrong server
version on a data directory.)
It is recommended that you use the pg_dump and pg_dumpall programs from the newer version
of PostgreSQL, to take advantage of enhancements that might have been made in these programs.
Current releases of the dump programs can read data from any server version back to 7.0.
These instructions assume that your existing installation is under the
/usr/local/pgsql
directory,
and that the data area is in
/usr/local/pgsql/data
.Substitute your paths appropriately.
1. If making a backup, make sure that your database is not being updated. This does not affect
the integrity of the backup, but the changed data would of course not be included. If necessary,
edit the permissions in the file
/usr/local/pgsql/data/pg_hba.conf
(or equivalent) to
disallow access from everyone except you. See Chapter 19 for additional information on access
control.
To back up your database installation, type:
pg_dumpall >
outputfile
To make the backup, you can use the pg_dumpall command from the version you are currently
running; see Section 24.1.2 for more details. For best results, however, try to use the pg_dumpall
command from PostgreSQL 9.4.7, since this version contains bug fixes and improvements over
older versions. While this advice might seem idiosyncratic since you haven’t installed the new
version yet, it is advisable to follow it if you plan to install the new version in parallel with the
old version. In that case you can complete the installation normally and transfer the data later.
This will also decrease the downtime.
2. Shut down the old server:
pg_ctl stop
On systems that have PostgreSQL started at boot time, there is probably a start-up file that will
accomplish the same thing. For example, on a Red Hat Linux system one might find that this
works:
/etc/rc.d/init.d/postgresql stop
See Chapter 17 for details about starting and stopping the server.
3. If restoring from backup, rename or delete the old installation directory if it is not version-
specific. It is a good idea to rename the directory, rather than delete it, in case you have trouble
and need to revert to it. Keep in mind the directory might consume significant disk space. To
rename the directory, use a command like this:
mv /usr/local/pgsql /usr/local/pgsql.old
(Be sure to move the directory as a single unit so relative paths remain unchanged.)
4. Install the new version of PostgreSQL as outlined in Section 15.4.
452
VB.NET Image: Create Code 11 Barcode on Picture & Document Using
file, apart from above mentioned .NET core imaging SDK and .NET barcode creator add-on, you also need to buy .NET PDF document editor add-on, namely, RasterEdge
add photo to pdf online; add picture to pdf
C# Word - Paragraph Processing in C#.NET
Add references: C# users can set paragraph properties and create content such as run, footnote, endnote and picture in a paragraph.
how to add image to pdf document; adding images to pdf files
Chapter 17. Server Setup and Operation
5. Createa new database cluster if needed. Remember thatyoumustexecutethesecommands while
logged in to the special database user account (which you already have if youare upgrading).
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
6. Restore your previous
pg_hba.conf
and any
postgresql.conf
modifications.
7. Start the database server, again using the special database user account:
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
8. Finally, restore your data from backupwith:
/usr/local/pgsql/bin/psql -d postgres -f
outputfile
using the new psql.
The least downtime can be achieved by installing the new server in a different directory and running
both the old and the new servers in parallel, on different ports. Then you can use something like:
pg_dumpall -p 5432 | psql -d postgres -p 5433
to transfer your data.
17.6.2. Upgrading Data via pg_upgrade
The pg_upgrade module allows an installation to be migrated in-place from one major PostgreSQL
versiontoanother. Upgrades can be performedinminutes, particularlywith
--link
mode. Itrequires
steps similar to pg_dumpall above, e.g. starting/stopping the server, running initdb. The pg_upgrade
documentation outlines the necessary steps.
17.6.3. Upgrading Data via Replication
Itis also possible to use certainreplication methods, such as Slony, tocreate a standby server with the
updatedversionof PostgreSQL. This is possible because Slony supports replication between different
major versions of PostgreSQL. The standby can be on the same computer or a different computer.
Once it has synced up with the master server (running the older version of PostgreSQL), you can
switch masters and make the standby the master and shut down the older database instance. Such a
switch-over results in only several seconds of downtime for an upgrade.
17.7. Preventing Server Spoofing
While the server is running, it is not possible for a malicious user to take the place of the normal
database server. However, when the server is down, it is possible for a local user to spoof the normal
server by starting their own server. The spoof server could read passwords and queries sent by clients,
but could not return any data because the
PGDATA
directory would still be secure because of directory
permissions. Spoofing is possiblebecauseanyuser can start adatabase server; a clientcannot identify
an invalid server unless it is specially configured.
The simplest way to prevent spoofing for
local
connections is to use a Unix domain socket direc-
tory (unix_socket_directories) that has write permission only for a trusted local user. This prevents a
malicious user from creating their own socket file in that directory. If you are concerned that some
applications might still reference
/tmp
for the socket file and hence be vulnerable to spoofing, during
operating system startup create a symbolic link
/tmp/.s.PGSQL.5432
that points to the relocated
453
Chapter 17. Server Setup and Operation
socket file. You also might need to modify your
/tmp
cleanup script to prevent removal of the sym-
bolic link.
To prevent spoofingonTCP connections, thebestsolution is touse SSL certificates andmakesurethat
clients check the server’s certificate. To do that, the server must be configured to acceptonly
hostssl
connections (Section19.1) and have SSL key and certificate files (Section 17.9). The TCP clientmust
connect using
sslmode=verify-ca
or
verify-full
and have the appropriate root certificate file
installed (Section 31.18.1).
17.8. Encryption Options
PostgreSQL offers encryption at several levels, and provides flexibility in protecting data from dis-
closure due to database server theft, unscrupulous administrators, and insecure networks. Encryption
might also be required to secure sensitive data such as medical records or financial transactions.
Password Storage Encryption
By default, database user passwords are stored as MD5 hashes, so the administrator cannot de-
termine the actual password assigned to the user. If MD5 encryption is used for client authen-
tication, the unencrypted password is never even temporarily present on the server because the
client MD5-encrypts it before being sent across the network.
Encryption For Specific Columns
The pgcrypto module allows certain fields to be stored encrypted. This is useful if only some
of the data is sensitive. The client supplies the decryption key and the data is decrypted on the
server and then sent to the client.
The decrypted data and the decryption key are present on the server for a brief time while it is
being decrypted and communicated between the client and server. This presents a brief moment
where the data and keys can be intercepted by someone with complete access to the database
server, such as the system administrator.
Data Partition Encryption
Storage encryption can be performed at the file system level or the block level. Linux file system
encryption options include eCryptfs and EncFS, while FreeBSD uses PEFS. Block level or full
disk encryption options include dm-crypt + LUKS on Linux and GEOM modules geli and gbde
on FreeBSD. Many other operating systems support this functionality, including Windows.
This mechanism prevents unencrypted data from being read from the drives if the drives or the
entire computer is stolen. This does not protect against attacks while the file system is mounted,
because when mounted, the operating system provides an unencrypted view of the data. How-
ever, to mount the file system, you need some way for the encryption key to be passed to the
operating system, and sometimes the key is stored somewhere on the host that mounts the disk.
Encrypting Passwords Across A Network
The
MD5
authentication method double-encrypts the password on the client before sending it
to the server. It first MD5-encrypts it based on the user name, and then encrypts it based on
arandom salt sent by the server when the database connection was made. It is this double-
encrypted value that is sent over the network to the server. Double-encryption not only prevents
the password from being discovered, it also prevents another connection from using the same
encrypted password to connect to the database server at a later time.
454
Chapter 17. Server Setup and Operation
Encrypting Data Across A Network
SSL connections encrypt all data sent across the network: the password, the queries, and the
data returned. The
pg_hba.conf
file allows administrators to specify which hosts can use non-
encrypted connections (
host
)and which require SSL-encrypted connections (
hostssl
). Also,
clients canspecify that they connect to servers only via SSL. Stunnel or SSHcan also be used to
encrypt transmissions.
SSL Host Authentication
It is possiblefor boththe client andserver to provide SSL certificates to each other. It takes some
extra configuration on each side, but this provides stronger verification of identity than the mere
use of passwords. It prevents a computer from pretending to be the server just long enough to
read the password sent by the client. It also helps prevent “man in the middle” attacks where a
computer between the client and server pretends to be the server and reads and passes all data
between the client and server.
Client-Side Encryption
If the system administrator for the server’s machine cannot be trusted, it is necessary for the
client to encrypt the data; this way, unencrypted data never appears on the database server. Data
isencryptedonthe clientbeforebeingsenttothe server,anddatabaseresults have to be decrypted
on the client before being used.
17.9. Secure TCP/IP Connections with SSL
PostgreSQL has native support for using SSL connections to encrypt client/server communications
for increased security. This requires that OpenSSL is installed on both client and server systems and
that support inPostgreSQL is enabled at build time (see Chapter 15).
With SSL support compiledin, the PostgreSQL server can be started with SSL enabled by setting the
parameter ssl to
on
in
postgresql.conf
.The server willlistenfor bothnormal andSSL connections
on the same TCP port, and will negotiate with any connecting client on whether to use SSL. By
default, this is at the client’s option; see Section 19.1 about how to set up the server to require use of
SSL for some or all connections.
PostgreSQL reads the system-wide OpenSSL configuration file. By default, this file is named
openssl.cnf
and is located in the directory reported by
openssl version -d
. This default
can be overridden by setting environment variable
OPENSSL_CONF
to the name of the desired
configuration file.
OpenSSL supportsa wide range of ciphers and authentication algorithms, of varyingstrength. Whilea
list of ciphers can be specified inthe OpenSSL configuration file, you can specify ciphers specifically
for use by the database server by modifying ssl_ciphers in
postgresql.conf
.
Note: It is possible to have authentication without encryption overhead by using
NULL-SHA
or
NULL-MD5
ciphers. However, a man-in-the-middle could read and pass communications between
client and server. Also, encryption overhead is minimal compared to the overhead of authentica-
tion. For these reasons NULL ciphers are not recommended.
To start in SSL mode, files containing the server certificate and private key must exist. By default,
these files are expected to be named
server.crt
and
server.key
,respectively, in the server’s
data directory, but other names and locations can be specified using the configuration parameters
ssl_cert_file and ssl_key_file. On Unix systems, the permissions on
server.key
must disallow any
455
Chapter 17. Server Setup and Operation
access to world or group; achieve this by the command
chmod 0600 server.key
.If the private
key is protected witha passphrase, the server will prompt for the passphrase and will not start until it
has been entered.
In some cases, the server certificate might be signed by an “intermediate” certificate authority, rather
than one that is directly trusted by clients. To use such a certificate, append the certificate of the
signing authority to the
server.crt
file, then its parent authority’s certificate, and so on up to a
certificate authority, “root” or “intermediate”, that is trusted by clients, i.e. signed by a certificate in
the clients’
root.crt
files.
17.9.1. Using Client Certificates
To require the client to supply a trusted certificate, place certificates of the certificate authorities
(CAs) you trust in the file
root.crt
in the data directory, set the parameter ssl_ca_file in
postgresql.conf
to
root.crt
, and set the
clientcert
parameter to 1 on the appropriate
hostssl
line(s) in
pg_hba.conf
.A certificate will then be requested from the client during SSL
connection startup. (See Section 31.18 for a description of how to set up certificates on the client.)
The server will verify that the client’s certificate is signed by one of the trusted certificate authorities.
If intermediate CAs appear in
root.crt
,the file must also contain certificate chains to their root
CAs. Certificate Revocation List (CRL) entries are also checked if the parameter ssl_crl_file is set.
(See http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04s02.html for diagrams showing
SSL certificate usage.)
The
clientcert
option in
pg_hba.conf
is available for all authentication methods, but only for
rows specified as
hostssl
.When
clientcert
is not specified or is set to 0, the server will still
verify presented client certificates against its CA list, if one is configured, — but it will not insist that
aclient certificate be presented.
Note that the server’s
root.crt
lists the top-level CAs that are considered trusted for signing client
certificates. In principle itneednot list the CAthat signedtheserver’s certificate, thoughinmostcases
that CAwould also be trusted for client certificates.
If you are setting up client certificates, you may wish to use the
cert
authentication method, so that
thecertificates controluser authentication as wellas providingconnectionsecurity. SeeSection19.3.9
for details.
17.9.2. SSL Server File Usage
Table17-2summarizes the files thatarerelevanttotheSSL setup on the server. (Theshownfile names
are default or typical names. The locally configured names could be different.)
Table 17-2. SSL Server File Usage
File
Contents
Effect
ssl_cert_file
(
$PGDATA/server.crt
)
server certificate
sent toclient to indicate
server’s identity
ssl_key_file
(
$PGDATA/server.key
)
server private key
proves server certificate was
sent by the owner; does not
indicate certificate owner is
trustworthy
456
Chapter 17. Server Setup and Operation
File
Contents
Effect
ssl_ca_file
(
$PGDATA/root.crt
)
trustedcertificate authorities
checks that client certificate is
signed by a trusted certificate
authority
ssl_crl_file
(
$PGDATA/root.crl
)
certificates revoked by
certificate authorities
client certificate must not be on
this list
The files
server.key
,
server.crt
,
root.crt
, and
root.crl
(or their configured alternative
names) are only examined during server start; so you must restart the server for changes in them
to take effect.
17.9.3. Creating a Self-signed Certificate
To create a quick self-signed certificate for the server, use the following OpenSSL command:
openssl req -new -text -out server.req
Fill out the information that openssl asks for. Make sure you enter the local host name as “Com-
mon Name”; the challenge password can be left blank. The program will generate a key that is
passphrase protected; it will not accept a passphrase that is less than four characters long. To remove
the passphrase (as you must if you want automatic start-up of the server), run the commands:
openssl rsa -in privkey.pem -out server.key
rm privkey.pem
Enter the old passphrase to unlock the existing key. Now do:
openssl req -x509 -in server.req -text -key server.key -out server.crt
to turn the certificate into a self-signed certificate and to copy the key and certificate to where the
server will look for them. Finally do:
chmod og-rwx server.key
because the server will reject the file if its permissions are more liberal than this. For more details on
how to create your server private key and certificate, refer tothe OpenSSL documentation.
Aself-signedcertificate canbe used for testing, but a certificate signed bya certificate authority (CA)
(either one of the global CAs or a local one) should be used in production so that clients can verify
the server’s identity. If all the clients are local to the organization, using a local CA is recommended.
17.10. Secure TCP/IP Connections with SSH Tunnels
It is possible to use SSHto encrypt the network connectionbetween clients and a PostgreSQL server.
Done properly, this provides an adequately secure network connection, even for non-SSL-capable
clients.
First make sure that an SSH server is running properly on the same machine as the PostgreSQL
server and that you can log in using
ssh
as some user. Then you can establish a secure tunnel with a
command like this from the client machine:
ssh -L 63333:localhost:5432 joe@foo.com
457
Documents you may be interested
Documents you may be interested