見出し画像

331.2 暗号化・署名・認証のためのX.509証明書


課題 331: 暗号化
331.2 暗号化・署名・認証のためのX.509証明書

LPIC303の試験範囲である主題331~335まであるうちの「331 暗号化」から「331.2 暗号化・署名・認証のためのX.509証明書」についてのまとめ

  • 総重量:4

  • 説明:
    サーバ・クライアント認証両方のために、X.509証明書を利用することができる。 これには、Apache HTTPDのユーザとサーバ認証の実装が含まれる。Apache HTTPDのバージョンは2.4以上を対象としている。

  • 主要な知識範囲:

    • プロトコルバージョンと暗号(cipher)を含む、SSL, TLSの理解。

    • Apache HTTPDのmod_sslを利用して、SNI, HSTSを含む、HTTPSサービスを提供できるように設定する。

    • 証明書の連鎖を提供し、cipherの設定を調節して、Apache HTTPDのmod_sslを設定する(cipherに特化した知識ではない)。

    • 証明書を利用して、ユーザ認証をするようにApache HTTPDのmod_sslをせっていする。

    • OCSPを提供するように、Apache HTTPDのmod_sslを設定する。

    • OpenSSLを、SSL/TLSクライアントとサーバのテストに利用する。

  • 重要なファイル、用語、ユーティリティ:

    • httpd.conf

    • mod_ssl

    • openssl (関連するサブコマンドを含む)


SSL、TLSの理解

用語

  • SSL:Secure Socket Layer

  • TLS:Transport Layer Security

バーション

  • SSL 1.0

  • SSL 2.0
    1994年リリース

  • SSL 3.0
    1995年リリース / RFC6101
    2014年に発見された POODLE(CVE-2014-3566/JVNDB-2014-004670) という脆弱性によって利用は非推奨となり、多くのWEBサーバーで無効化の対策が取られた。

  • TLS 1.0 / SSL 3.1
    1999年リリース / RFC2246
    POODLEの脆弱性の影響を受けているため利用は非推奨

  • TLS 1.1 / SSL 3.2
    2006年リリース / RFC4346
    AESを導入
    POODLEの脆弱性の影響を受けているため利用は非推奨

  • TLS 1.2 / SSL 3.3
    2008年リリース / RFC5246

  • TLS 1.3
    2018年8月リリース / RFC8446

暗号化スイートの種類

  • 鍵交換(kx)
    ECDH, RSA, DH, PSK, DHEPSK, ECDHEPSK, RSAPSK

  • 認証(Au)
    ECDSA, RSA, PSK 

  • 暗号化(En)
    AESGCM, CHACHA20/POLY1305,  AES, 

  • ハッシュ(Mac)
    AEAD, SHA256, SHA1

暗号化スイートの読み取り方

  • TLS 1.2 まで
    TLS_鍵交換_署名_暗号化_ハッシュ関数
    例) TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    鍵交換:ECDHE
    署名:RSA
    暗号化:AES_256_GCM
    ハッシュ:SHA384

  • TSL 1.3 から
    TLS_暗号化_ハッシュ関数
    例) TLS_AES_256_GCM_SHA384
    鍵交換:拡張領域 "supported_groups" で指定
    署名:拡張領域 "signature_algorithms" で指定
    暗号化:AES_256_GCM
    ハッシュ:SHA384

コマンド実行例

[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# openssl version
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# openssl ciphers -v
TLS_AES_256_GCM_SHA384         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(256)            Mac=AEAD
TLS_CHACHA20_POLY1305_SHA256   TLSv1.3 Kx=any      Au=any   Enc=CHACHA20/POLY1305(256) Mac=AEAD
TLS_AES_128_GCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESGCM(128)            Mac=AEAD
TLS_AES_128_CCM_SHA256         TLSv1.3 Kx=any      Au=any   Enc=AESCCM(128)            Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256)            Mac=AEAD
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(256)            Mac=AEAD
ECDHE-ECDSA-CHACHA20-POLY1305  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-RSA-CHACHA20-POLY1305    TLSv1.2 Kx=ECDH     Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-ECDSA-AES256-CCM         TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESCCM(256)            Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256  TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128)            Mac=AEAD
ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2 Kx=ECDH     Au=RSA   Enc=AESGCM(128)            Mac=AEAD
ECDHE-ECDSA-AES128-CCM         TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESCCM(128)            Mac=AEAD
ECDHE-ECDSA-AES128-SHA256      TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)               Mac=SHA256
ECDHE-RSA-AES128-SHA256        TLSv1.2 Kx=ECDH     Au=RSA   Enc=AES(128)               Mac=SHA256
ECDHE-ECDSA-AES256-SHA         TLSv1   Kx=ECDH     Au=ECDSA Enc=AES(256)               Mac=SHA1
ECDHE-RSA-AES256-SHA           TLSv1   Kx=ECDH     Au=RSA   Enc=AES(256)               Mac=SHA1
ECDHE-ECDSA-AES128-SHA         TLSv1   Kx=ECDH     Au=ECDSA Enc=AES(128)               Mac=SHA1
ECDHE-RSA-AES128-SHA           TLSv1   Kx=ECDH     Au=RSA   Enc=AES(128)               Mac=SHA1
AES256-GCM-SHA384              TLSv1.2 Kx=RSA      Au=RSA   Enc=AESGCM(256)            Mac=AEAD
AES256-CCM                     TLSv1.2 Kx=RSA      Au=RSA   Enc=AESCCM(256)            Mac=AEAD
AES128-GCM-SHA256              TLSv1.2 Kx=RSA      Au=RSA   Enc=AESGCM(128)            Mac=AEAD
AES128-CCM                     TLSv1.2 Kx=RSA      Au=RSA   Enc=AESCCM(128)            Mac=AEAD
AES256-SHA256                  TLSv1.2 Kx=RSA      Au=RSA   Enc=AES(256)               Mac=SHA256
AES128-SHA256                  TLSv1.2 Kx=RSA      Au=RSA   Enc=AES(128)               Mac=SHA256
AES256-SHA                     SSLv3   Kx=RSA      Au=RSA   Enc=AES(256)               Mac=SHA1
AES128-SHA                     SSLv3   Kx=RSA      Au=RSA   Enc=AES(128)               Mac=SHA1
DHE-RSA-AES256-GCM-SHA384      TLSv1.2 Kx=DH       Au=RSA   Enc=AESGCM(256)            Mac=AEAD
DHE-RSA-CHACHA20-POLY1305      TLSv1.2 Kx=DH       Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-RSA-AES256-CCM             TLSv1.2 Kx=DH       Au=RSA   Enc=AESCCM(256)            Mac=AEAD
DHE-RSA-AES128-GCM-SHA256      TLSv1.2 Kx=DH       Au=RSA   Enc=AESGCM(128)            Mac=AEAD
DHE-RSA-AES128-CCM             TLSv1.2 Kx=DH       Au=RSA   Enc=AESCCM(128)            Mac=AEAD
DHE-RSA-AES256-SHA256          TLSv1.2 Kx=DH       Au=RSA   Enc=AES(256)               Mac=SHA256
DHE-RSA-AES128-SHA256          TLSv1.2 Kx=DH       Au=RSA   Enc=AES(128)               Mac=SHA256
DHE-RSA-AES256-SHA             SSLv3   Kx=DH       Au=RSA   Enc=AES(256)               Mac=SHA1
DHE-RSA-AES128-SHA             SSLv3   Kx=DH       Au=RSA   Enc=AES(128)               Mac=SHA1
PSK-AES256-GCM-SHA384          TLSv1.2 Kx=PSK      Au=PSK   Enc=AESGCM(256)            Mac=AEAD
PSK-CHACHA20-POLY1305          TLSv1.2 Kx=PSK      Au=PSK   Enc=CHACHA20/POLY1305(256) Mac=AEAD
PSK-AES256-CCM                 TLSv1.2 Kx=PSK      Au=PSK   Enc=AESCCM(256)            Mac=AEAD
PSK-AES128-GCM-SHA256          TLSv1.2 Kx=PSK      Au=PSK   Enc=AESGCM(128)            Mac=AEAD
PSK-AES128-CCM                 TLSv1.2 Kx=PSK      Au=PSK   Enc=AESCCM(128)            Mac=AEAD
PSK-AES256-CBC-SHA             SSLv3   Kx=PSK      Au=PSK   Enc=AES(256)               Mac=SHA1
PSK-AES128-CBC-SHA256          TLSv1   Kx=PSK      Au=PSK   Enc=AES(128)               Mac=SHA256
PSK-AES128-CBC-SHA             SSLv3   Kx=PSK      Au=PSK   Enc=AES(128)               Mac=SHA1
DHE-PSK-AES256-GCM-SHA384      TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESGCM(256)            Mac=AEAD
DHE-PSK-CHACHA20-POLY1305      TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=CHACHA20/POLY1305(256) Mac=AEAD
DHE-PSK-AES256-CCM             TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESCCM(256)            Mac=AEAD
DHE-PSK-AES128-GCM-SHA256      TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESGCM(128)            Mac=AEAD
DHE-PSK-AES128-CCM             TLSv1.2 Kx=DHEPSK   Au=PSK   Enc=AESCCM(128)            Mac=AEAD
DHE-PSK-AES256-CBC-SHA         SSLv3   Kx=DHEPSK   Au=PSK   Enc=AES(256)               Mac=SHA1
DHE-PSK-AES128-CBC-SHA256      TLSv1   Kx=DHEPSK   Au=PSK   Enc=AES(128)               Mac=SHA256
DHE-PSK-AES128-CBC-SHA         SSLv3   Kx=DHEPSK   Au=PSK   Enc=AES(128)               Mac=SHA1
ECDHE-PSK-CHACHA20-POLY1305    TLSv1.2 Kx=ECDHEPSK Au=PSK   Enc=CHACHA20/POLY1305(256) Mac=AEAD
ECDHE-PSK-AES256-CBC-SHA       TLSv1   Kx=ECDHEPSK Au=PSK   Enc=AES(256)               Mac=SHA1
ECDHE-PSK-AES128-CBC-SHA256    TLSv1   Kx=ECDHEPSK Au=PSK   Enc=AES(128)               Mac=SHA256
ECDHE-PSK-AES128-CBC-SHA       TLSv1   Kx=ECDHEPSK Au=PSK   Enc=AES(128)               Mac=SHA1
RSA-PSK-AES256-GCM-SHA384      TLSv1.2 Kx=RSAPSK   Au=RSA   Enc=AESGCM(256)            Mac=AEAD
RSA-PSK-CHACHA20-POLY1305      TLSv1.2 Kx=RSAPSK   Au=RSA   Enc=CHACHA20/POLY1305(256) Mac=AEAD
RSA-PSK-AES128-GCM-SHA256      TLSv1.2 Kx=RSAPSK   Au=RSA   Enc=AESGCM(128)            Mac=AEAD
RSA-PSK-AES256-CBC-SHA         SSLv3   Kx=RSAPSK   Au=RSA   Enc=AES(256)               Mac=SHA1
RSA-PSK-AES128-CBC-SHA256      TLSv1   Kx=RSAPSK   Au=RSA   Enc=AES(128)               Mac=SHA256
RSA-PSK-AES128-CBC-SHA         SSLv3   Kx=RSAPSK   Au=RSA   Enc=AES(128)               Mac=SHA1
[root@lpic303-rocky34 ~]#

補足

「SSL/TLS」という記述を多く見かけるが、技術的にSSLは使われなくなりTLSが主流になっている。
しかし、「SSL証明書」や「OpenSSL」など「SSL」という言葉が定着し残っている。

参考


補足:Apacheとmod_sslのインストール

mod_sslとは

Apache httpd で使われるSSL/TLSに対応したモジュール。
OpenSSLを使用している。

インストール

  • RockyLinux 9

[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# dnf install httpd mod_ssl
[root@lpic303-rocky34 ~]#
  • Ubuntu 22.04

root@lpic303-ubuntu35:~#
root@lpic303-ubuntu35:~# apt install apache2
root@lpic303-ubuntu35:~# a2enmod ssl
root@lpic303-ubuntu35:~#

設定ファイル

/etc/httpd/conf.d/ssl.conf

[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# ls -l /etc/httpd/conf.d/
合計 32
-rw-r--r--. 1 root root  400 1028 18:35 README
-rw-r--r--. 1 root root 2916 1028 18:35 autoindex.conf
-rw-r--r--. 1 root root  135  22 00:28 special.conf
-rw-r--r--. 1 root root 8720 1028 18:32 ssl.conf
-rw-r--r--. 1 root root 1252 1028 18:32 userdir.conf
-rw-r--r--. 1 root root  653  22 00:27 welcome.conf
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]#
[root@lpic303-rocky34 ~]# cat /etc/httpd/conf.d/ssl.conf
#
# When we also provide SSL we have to listen to the
# standard HTTPS port in addition.
#
Listen 443 https

##
##  SSL Global Context
##
##  All SSL configuration in this context applies both to
##  the main server and all SSL-enabled virtual hosts.
##

#   Pass Phrase Dialog:
#   Configure the pass phrase gathering process.
#   The filtering dialog program (`builtin' is a internal
#   terminal dialog) has to provide the pass phrase on stdout.
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog

#   Inter-Process Session Cache:
#   Configure the SSL Session Cache: First the mechanism
#   to use and second the expiring timeout (in seconds).
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300

#
# Use "SSLCryptoDevice" to enable any supported hardware
# accelerators. Use "openssl engine -v" to list supported
# engine names.  NOTE: If you enable an accelerator and the
# server does not start, consult the error logs and ensure
# your accelerator is functioning properly.
#
SSLCryptoDevice builtin
#SSLCryptoDevice ubsec

##
## SSL Virtual Host Context
##

<VirtualHost _default_:443>

# General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443

# Use separate log files for the SSL virtual host; note that LogLevel
# is not inherited from httpd.conf.
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   List the protocol versions which clients are allowed to connect with.
#   The OpenSSL system profile is used by default.  See
#   update-crypto-policies(8) for more details.
#SSLProtocol all -SSLv3
#SSLProxyProtocol all -SSLv3

#   User agents such as web browsers are not configured for the user's
#   own preference of either security or performance, therefore this
#   must be the prerogative of the web server administrator who manages
#   cpu load versus confidentiality, so enforce the server's cipher order.
SSLHonorCipherOrder on

#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate.
#   See the mod_ssl documentation for a complete list.
#   The OpenSSL system profile is configured by default.  See
#   update-crypto-policies(8) for more details.
SSLCipherSuite PROFILE=SYSTEM
SSLProxyCipherSuite PROFILE=SYSTEM

#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that restarting httpd will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
#   require an ECC certificate which can also be configured in
#   parallel.
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

#   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.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

#   Server Certificate Chain:
#   Point SSLCertificateChainFile at a file containing the
#   concatenation of PEM encoded CA certificates which form the
#   certificate chain for the server certificate. Alternatively
#   the referenced file can be the same as SSLCertificateFile
#   when the CA certificates are directly appended to the server
#   certificate for convenience.
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

#   Certificate Authority (CA):
#   Set the CA certificate verification path where to find CA
#   certificates for client authentication or alternatively one
#   huge file containing all of them (file must be PEM encoded)
#SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt

#   Client Authentication (Type):
#   Client certificate verification type and depth.  Types are
#   none, optional, require and optional_no_ca.  Depth is a
#   number which specifies how deeply to verify the certificate
#   issuer chain before deciding the certificate is not valid.
#SSLVerifyClient require
#SSLVerifyDepth  10

#   Access Control:
#   With SSLRequire you can do per-directory access control based
#   on arbitrary complex boolean expressions containing server
#   variable checks and other lookup directives.  The syntax is a
#   mixture between C and Perl.  See the mod_ssl documentation
#   for more details.
#<Location />
#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
#            and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
#            and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       ) \
#           or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>

#   SSL Engine Options:
#   Set various options for the SSL engine.
#   o FakeBasicAuth:
#     Translate the client X.509 into a Basic Authorisation.  This means that
#     the standard Auth/DBMAuth methods can be used for access control.  The
#     user name is the `one line' version of the client's X.509 certificate.
#     Note that no password is obtained from the user. Every entry in the user
#     file needs this password: `xxj31ZMTZzkVA'.
#   o ExportCertData:
#     This exports two additional environment variables: SSL_CLIENT_CERT and
#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the
#     server (always existing) and the client (only existing when client
#     authentication is used). This can be used to import the certificates
#     into CGI scripts.
#   o StdEnvVars:
#     This exports the standard SSL/TLS related `SSL_*' environment variables.
#     Per default this exportation is switched off for performance reasons,
#     because the extraction step is an expensive operation and is usually
#     useless for serving static content. So one usually enables the
#     exportation for CGI and SSI requests only.
#   o StrictRequire:
#     This denies access when "SSLRequireSSL" or "SSLRequire" applied even
#     under a "Satisfy any" situation, i.e. when it applies access is denied
#     and no other module can change it.
#   o OptRenegotiate:
#     This enables optimized SSL connection renegotiation handling when SSL
#     directives are used in per-directory context.
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

#   SSL Protocol Adjustments:
#   The safe and default but still SSL/TLS standard compliant shutdown
#   approach is that mod_ssl sends the close notify alert but doesn't wait for
#   the close notify alert from client. When you need a different shutdown
#   approach you can use one of the following variables:
#   o ssl-unclean-shutdown:
#     This forces an unclean shutdown when the connection is closed, i.e. no
#     SSL close notify alert is sent or allowed to be received.  This violates
#     the SSL/TLS standard but is needed for some brain-dead browsers. Use
#     this when you receive I/O errors because of the standard approach where
#     mod_ssl sends the close notify alert.
#   o ssl-accurate-shutdown:
#     This forces an accurate shutdown when the connection is closed, i.e. a
#     SSL close notify alert is sent and mod_ssl waits for the close notify
#     alert of the client. This is 100% SSL/TLS standard compliant, but in
#     practice often causes hanging connections with brain-dead browsers. Use
#     this only for browsers where you know that their SSL implementation
#     works correctly.
#   Notice: Most problems of broken clients are also related to the HTTP
#   keep-alive facility, so you usually additionally want to disable
#   keep-alive for those clients, too. Use variable "nokeepalive" for this.
#   Similarly, one has to force some clients to use HTTP/1.0 to workaround
#   their broken HTTP/1.1 implementation. Use variables "downgrade-1.0" and
#   "force-response-1.0" for this.
BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

#   Per-Server Logging:
#   The home of a custom SSL log file. Use this when you want a
#   compact non-error SSL logfile on a virtual host basis.
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>

[root@lpic303-rocky34 ~]#

mod_sslを利用したSNI, HTSTを含むHTTPSサービス

SNI

  • Server Name Indication

  • SSL/TLSの拡張機能の一つ

  • TLS 1.0以降

  • VirtualHostなどの機能を使って一つのIPアドレスで複数のWEBサイトを運営している場合に利用する

SNI 設定例

<VirtualHost x.x.x.x:443>
    :
    SSLStrictSNIVHostCheck on
    :
</VirtualHost>`

HSTS

  • HTTP Strict Transport Security
    Hypertext Strict Transport Security

  • 常時SSL

  • httpアクセスをhttpsにリダイレクトする機能

  • "preload" をすることで初回のhttpアクセス時の中間者攻撃を防げる

HSTS 設定例

<VirtualHost x.x.x.x:443>
    :
    Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    :
</VirtualHost>`

参考


Apache HTTPDのmod_sslで証明書とCipherの設定をする

主な設定

"<VirtualHost default:443> ~ </VirtualHost>" の間に記述する。

  • SSLEngine on
    SSL/TLSの有効化

  • SSLProtocol all -SSLv3
    SSL/TLSのバージョンを指定

  • SSLCipherSuite 
    使用する暗号化スイート

  • SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    サーバー証明書

  • SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    サーバー証明書の秘密鍵

  • SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt
    中間CA証明書
    ※Apache2.4.8~ SSLCertificateFileで指定する
    ※SSLCertificateFileで指定するファイルには中間CA証明書とサーバー証明書を連結して保存する


証明書を利用して、ユーザ認証をするようにApache HTTPDのmod_sslを設定する

設定

  • SSLCACertificateFile
    クライアント証明書を発行したCAのCA証明書

  • SSLCARevocationFile
    クライアント証明書のCRLを指定

  • SSLCARevocationCheck
    - chain:証明書失効リストチェックを有効
    - leaf:エンドエンティティ証明書に限定する
    - none:CRLをチェックしない

  • SSLVerifyClient
    - none:クライアント証明書を必要としない
    - optional:クライアント証明書を提示できる
    - require:クライアント証明書の提示が必要
    - optional_no_ca:クライアント証明書を提示できるが、有効である必要はない

  • SSLVerifyDepth
    クライアント証明書検証における CA 証明書の最大の深さ

設定例

<VirtualHost x.x.x.x:443>
    :
    SSLCACertificateFile "/usr/local/apache2/conf/ssl.crt/ca-bundle-client.crt"
    SSLCARevocationFile "/usr/local/apache2/conf/ssl.crl/ca-bundle-client.crl"
    SSLCARevocationCheck chain
    SSLVerifyClient require
    SSLVerifyDepth 1
    :
</VirtualHost>

参考


OCSPを提供するように、Apache HTTPDのmod_sslを設定する

OCSP

  • Online Certificate Status Protocol

  • SSL証明書が失効していないかオンラインで確認するためのプロトコル

OCSP設定例

<VirtualHost x.x.x.x:443>
    :
    SSLStaplingResponderTimeout 10
    SSLStaplingReturnResponderErrors off
    SSLStaplingCache shmcb:/var/run/ocsp(128000)
    :
</VirtualHost>

OpenSSLを、SSL/TLSクライアントとサーバのテストに利用する

openssl s_client

  • SSL/TLSクライアントとして通信テストができる

openssl s_client 使い方

openssl s_client [options] [host:port]
openssl s_client -connect 127.0.0.1:443 -CAfile cacert.pem
  • -connect <サーバーIP:ポート番号>
    接続先のサーバーのIPアドレスとポート番号を指定

  • -CAfile <ファイル名>
    CA証明書を指定

  • -servername <ドメイン名>
    SNI対応のWEBサーバーに対してホスト名を指定する

  • -showcerts
    デバッグ:すべての証明書を表示

  • -debug
    デバッグ詳細表示

  • -trace
    デバッグ:トレースする

  • -quiet
    表示する内容を減らす

  • -brief
    簡潔に表示する

  • -[ tls1 | tls1_1 | tls1_2 | tls1_3 ] / -no_[ ssl3 | tls1 | tls1_1 | tls1_2 | tls1_3 ]
    TLS1.0, 1.1, 1.2, 1.3 有効化
    SSL3.0, TLS1.0, 1.1, 1.2, 1.3 無効化

openssl s_server

  • SSL/TLSサーバーとして通信テストができる

openssl s_server 使い方

openssl s_server [options]
openssl s_server -cert cert.pem -key key.pem -CAfile cacert.pem -WWW
  • -accept <ポート番号>
    待ち受けポート番号を指定(デフォルト 4433)

  • -cert <ファイル名>
    サーバー証明書を指定

  • -certform <PEM|DER>
    サーバー証明書のフォーマットを指定(デフォルト PEM)

  • -key <ファイル名>
    サーバー証明書の秘密鍵を指定

  • -keyform <PEM|DER>
    サーバー証明書の秘密鍵のフォーマットを指定(デフォルト PEM)

  • -CAfile <ファイル名>
    CA証明書を指定

  • -www, -WWW
    簡易的なWEBサーバーとして動作する

  • -quiet
    表示する内容を減らす

  • -[ tls1 | tls1_1 | tls1_2 | tls1_3 ] / -no_[ ssl3 | tls1 | tls1_1 | tls1_2 | tls1_3 ]
    TLS1.0, 1.1, 1.2, 1.3 有効化
    SSL3.0, TLS1.0, 1.1, 1.2, 1.3 無効化

参考


この記事が気に入ったらサポートをしてみませんか?