Linux-admin-create-ssl-certificates
Linux Admin-SSL証明書を作成する
TLSとSSLの背景
TLSはソケットレイヤーセキュリティの新しい標準であり、SSLを進めています。 TLSは、SSLを進化させる他のセキュリティおよびプロトコルラッパー機能により、より優れた暗号化標準を提供します。 多くの場合、TLSとSSLという用語は同じ意味で使用されます。 ただし、プロのCentOS管理者として、それぞれの違いと履歴に注意することが重要です。
_SSL_はバージョン3.0になります。 SSLは、Netscapeの下で業界標準として開発および推進されました。 NetscapeがAOL(90年代にアメリカオンラインとも呼ばれたISPとして人気)に買収された後、AOLはSSLのセキュリティ改善に必要な変更を実際に促進しませんでした。
バージョン3.1では、_SSL_テクノロジーがオープンシステム標準に移行し、_TLS_に変更されました。 _SSL_の著作権はまだAOLが所有しているため、新しい用語が作成されました: TLS-Transport Layer Security 。 したがって、_TLS_は実際には_SSL_とは異なることを認識することが重要です。 特に、古い_SSL_テクノロジーにはセキュリティの問題があり、一部は今日では廃止されていると考えられているためです。
注意-このチュートリアルでは、3.1以降のテクノロジについて話すときに_TLS_という用語を使用します。 次に、SSLテクノロジー3.0以前に固有のコメントを作成するときに_SSL_を使用します。
SSL vs TLSバージョン管理
次の表は、TLSとSSLのバージョン管理が互いにどのように関連するかを示しています。 _SSL_バージョン3.2に関して、数人が話すと聞きました。 しかし、彼らはおそらくブログを読むことから用語を得たでしょう。 プロの管理者として、常に標準の用語を使用したいと考えています。 したがって、_SSL_は過去の技術への参照である必要があります。 簡単なことで、CentOSの求職者を熟練したCSメジャーのように見せることができます。
TLS | SSL |
---|---|
- | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
_TLS_は、今日のインターネットのユーザーにとって重要な2つの主要な機能を実行します。1つは、「認証」として知られる、パーティーの所有者を確認します。 2つ目は、このネイティブ機能を持たない上位レベルのプロトコル(ftp、http、電子メールプロトコルなど)のトランスポート層で*エンドツーエンド暗号化*を提供します。
1つ目は、_パーティが誰であるかを検証する_ことであり、エンドツーエンド暗号化としてセキュリティにとって重要です。 消費者が支払いを受けることを許可されていないWebサイトへの暗号化された接続を持っている場合、財務データは依然としてリスクにさらされています。 これは、すべてのフィッシングサイトが持つことのできないものです。適切に署名されたTLS証明書は、Webサイトオペレーターが信頼できるCAからのものであることを確認します。
適切に署名された証明書を持っていないことを回避する方法は2つしかありません:自己署名証明書に対するWebブラウザの信頼をユーザーに許可するか、ユーザーが技術に詳しくなく、信頼できる証明書の重要性を知らないことを望みます機関(またはCA)。
このチュートリアルでは、「自己署名証明書」と呼ばれるものを使用します。 つまり、このWebサイトにアクセスするすべてのWebブラウザーでこの証明書にトラステッドステータスを明示的に与えることなく、ユーザーがサイトにアクセスすることを妨げるエラーが表示されます。 次に、自己署名証明書を使用してサイトにアクセスする前に、ユーザーにいくつかのアクションを実行させます。 セキュリティのために、これは良いことです。
opensslのインストールと構成
_openssl_は、TLSのオープンソース実装の標準です。 _openssl_は、Linux、BSDディストリビューション、OS Xなどのシステムで使用され、Windowsもサポートします。
opensslは、トランスポート層セキュリティを提供し、開発者向けの_Authentication_および_end-to-end encryption_の詳細なプログラミングを抽象化するため、重要です。 これが、TLSを使用するほぼすべてのオープンソースアプリケーションでopensslが使用される理由です。 また、Linuxのすべての最新バージョンにデフォルトでインストールされます。
デフォルトでは、_openssl_は少なくともバージョン5以降のCentOSにインストールする必要があります。 念のため、YUM経由で_openssl_をインストールしてみましょう。 YUMはパッケージが既にインストールされているかどうかを知らせるのに十分なインテリジェントであるため、インストールを実行します。 互換性の理由でCentOSの古いバージョンを実行している場合、_yum -y install_を実行すると、opensslが半最新のハートブリード脆弱性に対して確実に更新されます。
インストーラーを実行すると、実際に_openssl_の更新があることがわかりました。
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
OpenLDAPの自己署名証明書を作成する
これは、以前の_OpenLDAP_インストール用に自己署名を作成する方法です。
自己署名OpenLDAP証明書を作成します。
openssl req -new -x509 -nodes -out/etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out/etc/openldap/certs/vmnet.pem
-keyout/etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:bob@bobber.net
[root@centos]#
これで、OpenLDAP証明書は_/etc/openldap/certs/_に配置されます。
[root@centos]# ls/etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
ご覧のとおり、証明書とキーの両方が_/etc/openldap/certs/_ディレクトリにインストールされています。 最後に、それぞれが現在rootユーザーによって所有されているため、それぞれのパーミッションを変更する必要があります。
[root@centos]# chown -R ldap:ldap/etc/openldap/certs/*.pem
[root@centos]# ls -ld/etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00/etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00/etc/openldap/certs/vmnetkey.pem
[root@centos]#
Apache Webサーバーの自己署名証明書を作成する
このチュートリアルでは、Apacheがすでにインストールされていると仮定します。 別のチュートリアル(CentOSファイアウォールの構成)でApacheをインストールしました。今後のチュートリアルでは、Apacheの高度なインストールに進みます。 そのため、Apacheをまだインストールしていない場合は、フォローしてください。
次の手順を使用してApache HTTPdをインストールできたら-
- ステップ1 *-Apache httpdサーバーのmod_sslをインストールします。
最初にmod_sslでApacheを設定する必要があります。 YUMパッケージマネージャーを使用すると、これは非常に簡単です-
[root@centos]# yum -y install mod_ssl
次に、Apacheデーモンをリロードして、Apacheが新しい構成を使用するようにします。
[root@centos]# systemctl reload httpd
この時点で、ApacheはローカルホストでTLS接続をサポートするように構成されています。
- ステップ2 *-自己署名SSL証明書を作成します。
最初に、プライベートTLSキーディレクトリを設定しましょう。
[root@centos]# mkdir/etc/ssl/private
[root@centos]# chmod 700/etc/ssl/private/
注-ルートのみがこのディレクトリへの読み取り/書き込みアクセス権を持っていることを確認してください。 ワールドリード/ライトアクセスでは、秘密鍵を使用して盗聴されたトラフィックを解読できます。
証明書とキーファイルを生成します。
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out/etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
注-登録済みのドメイン名がない場合は、サーバーのパブリックIPアドレスを使用できます。
私たちの証明書を見てみましょう-
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
_openssl_コマンドで使用した各オプションの説明は次のとおりです-
Command | Action |
---|---|
req -X509 | Use X.509 CSR management PKI standard for key management. |
-nodes | Do not secure our certificate with a passphrase. Apache must be able to use the certificate without interruption of a passphrase. |
-days 2555 | Tells the validity of the certificate to 7 years or 2555 days. Time period can be adjusted as needed. |
-newkey rsa:2048 | Specified to generate both key and certificate using RSA at 2048 bits in length. |
次に、クライアントとPFSをネゴシエートするためのDiffie-Helimanグループを作成します。
[centos#] openssl dhparam -out/etc/ssl/certs/dhparam.pem 2048
これには5〜15分かかります。
*Perfect Forward Secrecy* -秘密鍵が侵害された場合にセッションデータを保護するために使用されます。 これにより、クライアントとサーバー間で使用される、セッションごとに一意のキーが生成されます。
次に、Perfect Forward Secrecy構成を証明書に追加します。
[root@centos]# cat/etc/ssl/certs/dhparam.pem | tee -a/etc/ssl/certs/self-sign-apache.crt
キーと証明書ファイルを使用するようにApacheを構成する
_/etc/httpd/conf.d/ssl.conf_に変更を加えます-
_ssl.conf_に次の変更を加えます。 ただし、その前に元のファイルをバックアップする必要があります。 _vi_や_emcas_などの高度なテキストエディターで運用サーバーに変更を加える場合、編集を行う前に構成ファイルを常にバックアップすることをお勧めします。
[root@centos]# cp/etc/httpd/conf.d/ssl.conf ~/
ssl.confの動作確認済みのコピーをホームフォルダーのルートにコピーした後、編集を続けましょう。
- 見つける
- 次のようにDocumentRootとServerNameの両方を編集します。
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
*DocumentRoot* これは、デフォルトのApacheディレクトリへのパスです。 このフォルダーには、Webサーバーまたはサイトのデフォルトページを要求するHTTPリクエストを表示するデフォルトページが必要です。
*ServerName* は、サーバーのIPアドレスまたはサーバーのホスト名のいずれかになるサーバー名です。 TLSの場合、ホスト名を使用して証明書を作成することをお勧めします。 OpenLdapチュートリアルから、ローカルエンタープライズドメインにcentosというホスト名を作成しました:_vmnet.local_
次に、次の行をコメントアウトします。
SSLプロトコル
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
次に、Apacheに証明書と秘密/公開キーのペアの場所を知らせます。
自己署名証明書ファイルへのパスを指定します
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile/etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile/etc/ssl/private/self-gen-apache.key
最後に、ポート443を介した_https_へのインバウンド接続を許可する必要があります。