ラボサーバーの証明書チェーンを設定しようとしています。自分のルートCA、中間CA、およびサーバー証明書を作成しました。これらの証明書をサーバーキーと共にopenssl s_serverコマンドに提供しました。 openssl s_clientを実行してそのサーバーに接続すると、opensslはチェーンに自己署名証明書があると文句を言います。
ただし、s_clientを使用してパブリックWebサーバーに接続すると、サーバーはチェーン内のすべての証明書(サーバー証明書の中間の親証明書のみ)を送信しないだけでなく、opensslが自己署名証明書について文句を言わないはもちろん、不完全な証明書チェーンです。
サーバーの親中間証明書のみを含むCAファイルでs_serverを使用すると、s_clientはローカルの発行者証明書を取得できないと不平を言います。証明書チェーン全体を送信しない場合でも、パブリックWebサーバーでこのエラーが発生することはありません。
これらのテスト(自分の証明書またはパブリックWebサーバーを使用)では、s_clientコマンドで-CApath、-CAfile、または-verifyオプションを使用していません。
何が悪いのかわかりません。 -verifyを使用していなくても、s_clientが証明書チェーンについて文句を言うのはなぜですか?すべてのルート証明書が自己署名されているのに、自分の(私が想定している)ルート証明書が自己署名されていると不平を言うのはなぜですか?
たとえば、これは私がパブリックWebサーバーで取得するものです。
openssl s_client -showcerts -servername security.stackexchange.com -connect security.stackexchange.com:443
CONNECTED(00000004)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = *.stackexchange.com
verify return:1
---
しかし、私の完全な証明書チェーンでs_serverを使用すると、次のようになります。
openssl s_client -showcerts -servername server.domain.com -connect server.domain.com:443
CONNECTED(00000004)
depth=2 C = US, ST = State, L = City, O = Company, OU = Company CA
verify error:num=19:self signed certificate in certificate chain
---
これが私の証明書です。そして、はい、ルートCAに制約CA = TRUE、デジタル署名、証明書署名を設定しています。
openssl x509 -in root_ca.cert.pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
bc:e0:9f:2a:5d:25:6e:8f
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=State, L=City, O=Company, OU=Company CA
Validity
Not Before: May 30 22:35:50 2019 GMT
Not After : May 25 22:35:50 2039 GMT
Subject: C=US, ST=State, L=City, O=Company, OU=Company CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
.........
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
2A:0A:D6:EF:96:02:70:4F:89:7A:69:C5:3E:37:47:EE:B1:E1:92:C0
X509v3 Authority Key Identifier:
keyid:2A:0A:D6:EF:96:02:70:4F:89:7A:69:C5:3E:37:47:EE:B1:E1:92:C0
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Digital Signature, Certificate Sign, CRL Sign
Signature Algorithm: sha256WithRSAEncryption
.........
ルートCA:
-----BEGIN CERTIFICATE-----
MIIDjDCCAnSgAwIBAgIJALzgnypdJW6PMA0GCSqGSIb3DQEBCwUAMFMxCzAJBgNV
BAYTAlVTMQ4wDAYDVQQIDAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEQMA4GA1UECgwH
Q29tcGFueTETMBEGA1UECwwKQ29tcGFueSBDQTAeFw0xOTA1MzAyMjM1NTBaFw0z
OTA1MjUyMjM1NTBaMFMxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVTdGF0ZTENMAsG
A1UEBwwEQ2l0eTEQMA4GA1UECgwHQ29tcGFueTETMBEGA1UECwwKQ29tcGFueSBD
QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMXCAU2fb4zNVGDryN5f
H4BozBizvkSp71e5NsYa/LW4R/sEedj2k+1szT2rMRrhbkinYCxjx+qMtZ0ZTmBB
y/zbI7XsTaApLZ9f2BMYkfWWi81Plvdg/Z7Z9S5oW3Bnr5ZzhFnAQkVnL5vSbFsG
5dFJMuCUHdGwaAb6ebJCyBxJST3kEd8aog/sdGwH6NPdjel7oc9aCcfp7+Dy7T0g
ThE6vbO4qisTlw+dV+fJ2dGt11vDHc3VnHSaFbb7iuDTG3LeWgF9AhuEkf5uxHQX
zNyx3AkCL9W1keoTTZaIYkHwyTxv/ghrRgLURe8XhC9fpC3cE+wO1Tvf8nmsLEQx
mKMCAwEAAaNjMGEwHQYDVR0OBBYEFCoK1u+WAnBPiXppxT43R+6x4ZLAMB8GA1Ud
IwQYMBaAFCoK1u+WAnBPiXppxT43R+6x4ZLAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
VR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQAyoV6gqDAYWs/biVv/EZ52
QMjrF93gyx8xY7PKMCYOhnzl8qjro33mMjVJLzzvmtjSZ1DHhLk0kgqw2HJJ9kNY
tzXze9h97pWPvA/4g8wQa1Pc2xuVZ7ELxs5qk1Btkgqh3C2DwGU1Vkruch0wTjG+
r28UdvjVfRObg+qx7We7dRAqk3KjXUJvKCZMu0GBYuCrWFrMR6Xc1O47UiEbzzrC
lTeEP6iZKIZI8D1iasrQdjL4CCh3E5w97Hl/NHKPuxTVqs6AdOqDoCBwrQEajO4t
2qHzVBGvTI57PzPYnvc+0fG5n0vn1Dx5SWy7Dl4+51x5vx6tNbTjqhIJnzyuh1l3
-----END CERTIFICATE-----
中間CA:
-----BEGIN CERTIFICATE-----
MIIDmzCCAoOgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwUzELMAkGA1UEBhMCVVMx
DjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5MRAwDgYDVQQKDAdDb21wYW55
MRMwEQYDVQQLDApDb21wYW55IENBMB4XDTE5MDUzMDIyMzYwMVoXDTI5MDUyNzIy
MzYwMVowZjELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMRAwDgYDVQQKDAdD
b21wYW55MRMwEQYDVQQLDApDb21wYW55IENBMSAwHgYDVQQDDBdDb21wYW55IElu
dGVybWVkaWF0ZSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMS3
OdbP2p2vzCVL7MMlSszxefWbsuw/F3t2pgqZivxTebMS8GGVhYfG39wKnJOKi/Q8
i4vUxi7RjQT/enpOmTixrG+IrGK9bg0cJg9tM2FHAMr7uGeoqIY0/02dAX1ffrBI
KP+U5jk6JhEwqG23xXg22TEtmFwYBclTZE5m11tF15FCJEV9r3ljxJlusXcdOEFn
KSrSwYyU352p+WcDuyUbqIeUDzvGpQqmndbEHM3GIo0uvxmkCXr1/Bc6QkhfAJMj
A8y+wvmyZFr1QRhX5R0udyHiwWzjgmSsZ8rDpOlcWKsmon07h+iV5EfEu/fiO1OT
ddW9xSR3oxBTyCErdVkCAwEAAaNmMGQwHQYDVR0OBBYEFHdi+4NsPyB3yTBZnsti
8QKQngr5MB8GA1UdIwQYMBaAFCoK1u+WAnBPiXppxT43R+6x4ZLAMBIGA1UdEwEB
/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IBAQBD
AeasspCf6jpj0+HyMJ9+GyF/5utKy8KOHhNMUOe+sExHvPWnEbtpKZ2gqxQpoNbz
7yFDitLPyEPk2CUNwfMW+QRfy+cqW7ci1mFc8xMo1WP2VPmojCGydZ+9IYUqQ5UE
DcMSSiGneeWhJ71oZwqE9GikPHZfLq6SEeHD3SI9+0vvv0zbcykH+yOvsaDIq+bl
G8rqX1hCs+00L6yBJZHEdz3rKviJgxT3eYkfekd65p92Ehqtzd/ZehqR5P8dM+h/
qnpZOJAvtVhOArP7GwyPcqapToXVEppFhS1nSlxDauTa1VrvzkIgHOzOR/v8EGyH
lublY3WfPEBZxdE3zKln
-----END CERTIFICATE-----
サーバー証明書:
-----BEGIN CERTIFICATE-----
MIIEpDCCA4ygAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwZjELMAkGA1UEBhMCVVMx
DjAMBgNVBAgMBVN0YXRlMRAwDgYDVQQKDAdDb21wYW55MRMwEQYDVQQLDApDb21w
YW55IENBMSAwHgYDVQQDDBdDb21wYW55IEludGVybWVkaWF0ZSBDQTAeFw0xOTA1
MzAyMjM2MDhaFw0yNDA1MjgyMjM2MDhaMIGRMQswCQYDVQQGEwJVUzEOMAwGA1UE
CAwFU3RhdGUxDTALBgNVBAcMBENpdHkxEDAOBgNVBAoMB0NvbXBhbnkxEzARBgNV
BAsMCkNvbXBhbnkgQ0ExHjAcBgNVBAMMFXNlcnZuYW1lIDE5MDUzMDE3MzYwNDEc
MBoGCSqGSIb3DQEJARYNcm9vdEBzZXJ2bmFtZTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAMDHXE+tXVz+vyj2gw8Fzy9QbNFj4Xgx9hUuvSnv5rDbdh1K
B0TtQ+JfGqD3onnRUZ6vOEe5m9yfc0Kw2QnyPbEwB3MKc61I0Ls3ve4I2v6auHS0
NDdZyUtTHGlF95XL9c+UqzaOn2eaHQM4VvhhVgDAswXR4Br6m+ID0cOCmS+YHWRG
HyvRKRdKn5w7MZ3CKJ7VDgYutREfw6lwoGvgWUTNDYbgLUY26AH0lhMrMjzrp1bx
SI+2nbliGBQd/81otWD9FjnbTqBIdDKQlTyrqHJWF0ZWCjZiVJuUC1hKzBySX59R
rD7gqARDeSbhlln6LGo31BsqwoYgvvXe/26pdxECAwEAAaOCAS4wggEqMAkGA1Ud
EwQCMAAwEQYJYIZIAYb4QgEBBAQDAgZAMDMGCWCGSAGG+EIBDQQmFiRPcGVuU1NM
IEdlbmVyYXRlZCBTZXJ2ZXIgQ2VydGlmaWNhdGUwHQYDVR0OBBYEFGSrkvKc5psT
2b+CXmOo1CCICw5OMHwGA1UdIwR1MHOAFHdi+4NsPyB3yTBZnsti8QKQngr5oVek
VTBTMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFU3RhdGUxDTALBgNVBAcMBENpdHkx
EDAOBgNVBAoMB0NvbXBhbnkxEzARBgNVBAsMCkNvbXBhbnkgQ0GCAhAAMA4GA1Ud
DwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATATBgNVHREEDDAKgghzZXJ2
bmFtZTANBgkqhkiG9w0BAQsFAAOCAQEAwlOx4gPc7UPC/FRWtsjzeTNsXXXY4zLg
NnuBw1y3YCzInLV0w97QvK+QfZ6EANgou7Wl4q3k4SodkAL9GXnfecW2EN13geGa
SP+hPqT84jqSsk5mqOYhpyKZHjXTYPUYyQ9p0dIy/Dm9dNjOvHpefsK/DRHJPkyu
NS5oZE2CTmZwnNq6w5I/53Gd0dA54F2N3v169ygKCr6WlM95lEwZgZNTLNqyyZnO
P7Kbt4ufB7u76ky3X9YvAwSwqj4VzqAm4d/xKAilHEZYWlL2Mo6FqfuXij/avoUc
OoGt/A6yzFGLBrGEJf4iQR9Iwgwo3+yZqeMHykM/e44MwCVTA6MH1g==
-----END CERTIFICATE-----
まず、TLS/SSLサーバーがルート証明書ではなく中間の別名チェーン証明書を送信することは非常に適切です。 rfc 5246 sec 7.4.2 または rfc 8446 sec 4.4.2 のやや詳細なバージョンを参照してください。
Z.T.としてほとんど正しくコメントされた-verify
は、s_client
の default であり(指定する必要はありません)、デフォルトで-CAfile
や-CApath
を指定しない場合(バグを除く)一部の古いバージョンでは、コンパイル時に構成された default truststore を使用します。これには、連結されたPEM証明書を含む単一のファイル、または名前またはリンクを使用した個別のPEMファイルを含むディレクトリを含めることができます。通常、c_rehash
(add)によって作成された、またはコメントとしてx509 -hash
で手動で決定された、切り捨てられたサブジェクトハッシュ。システムのverify(1ssl)または web上 のマニュアルページを参照してください。 OpenSSL自体は、このようなトラストストアに入らないルート証明書をprovideしません。ifディストリビューションまたはその他のパッケージバージョンを使用している場合、ビルダー usually はOpenSSLを構成して、ルート証明書のセットを使用しますディストリビューションまたはパッケージによって提供されます。 (私が知っているディストリビューションでは、このディストリビューションが提供するトラストストアは、NSS、GNUtls、Javaを含むotherソフトウェアにも使用されます。以下を参照してください。) OpenSSLを手動で作成する場合は、自分で行う必要があります。パブリックサーバーで検証エラーが発生しないため、おそらくビルドで(少なくとも一部)パブリックCAがプリインストールされているトラストストアを使用しています。これがopenssl version -d
(およびハードコードされた名前cert.pem
やcerts
)でどこにあるかを確認できます。
ルートまたは他のアンカー(以下を参照)をこのデフォルトのトラストストアに追加するか、-CAfile
や-CApath
を使用して、独自のルートまたはアンカーを含むカスタムアンカーを指定できます。私が知っているディストリビューション、およびおそらく他のディストリビューションでは、alsoが他のソフトウェアが使用するトラストストアを設定するプロセスによって自動的に生成されるため、デフォルトファイルを手動で変更しないでください。 NSS、GNUtls、Javaなど。これらは同じデータ(証明書)を含む必要がありますが、形式が異なります。代わりに、例えばRedHatファミリの場合はman update-ca-trust
、Debianファミリの場合はman update-ca-certificates
。
OpenSSLは、トラストストア内の中間(別名)チェーン証明書を使用して、build必要に応じて、つまりサーバーから送信されなかった場合(RFCに違反して)に証明書チェーンを作成します、しかし多くはそれを行います)、しかし歴史的にそれはacceptチェーンのみです-サーバーから完全に受信されましたor(部分的に)ローカルトラストストアから構築されます-ローカルトラストストアにあるrootで終わる場合最近のバージョン、つまり1.0.2以降、ただし1.1.0以降に文書化されているバージョンの場合、ローカルのトラストストアにある中間(非ルート)で終わるチェーンを受け入れるオプション-partial_chain
があります。
フルチェーンに関して、私はApache2で使用するために私が生成したものを使用しました:
cat intermediateCA.crt rootCA.crt > fullchain.crt
正確な状況をテストせずに、Webサーバーが証明書チェーンを読み取っている順序以上のものを提案することはできません。
OpenSSLの場合、rootCAが自己署名されていることを示します。これは、rootCAがOS(またはWebブラウザー)の証明書ストアにインストールされていないことが原因である可能性があります。オペレーティングシステム間での.crt
ファイルのインストールはさまざまです。 信頼されたルート証明書をサーバーに追加する でその方法を説明します。 Mozilla Firefoxは独自の証明書ストアを使用することに注意してください。
私が最初に自分の認証局になったとき、同様の目的で、チュートリアルを使用して Jaime Linux によるチュートリアルを使用して自分のルートCAを発行し始めました。署名付き証明書を追跡するためのフラットデータベースの作成について説明します。