web-dev-qa-db-ja.com

ローカルホスト用の自己署名証明書を作成するにはどうすればよいですか?

パスワードと次のフィールドをルートとして使用しました

openssl req -x509 -days 365 -newkey rsa:2048 -keyout /etc/ssl/Apache.key \
    -out /etc/ssl/Apache.crt

田畑

Country: FI
State: Pirkanmaa
Locality: Tampere
Organization: masi
Organizational Unit Name: SSL Certificate Test
CommonName: 192.168.1.107/owncloud
EmailAddress: [email protected]

出力:HTTPSでのSSLハンドシェイクエラー。予期される出力:HTTPS接続。 HTTPは機能します。

CommonNameには、行きたいURL、owncloudのスレッド here を含める必要があります。通称で失敗した

  • 192.168.1.107/owncloud
  • 192.168.1.107/

サーバーのテストOS:Debian 8.5。
サーバー:Raspberry Pi 3b。 Owncloud-server:8.2.5。 Owncloud-client:2.1.1。 Systems-client:Debian 8.5。

openssl req -x509 -days 365 -newkey rsa:2048 -keyout /etc/ssl/Apache.key -out /etc/ssl/Apache.crt

このコマンドを使用して、整形式のX.509証明書を生成することはできません。ホスト名がCommon Name(CN)に配置されているため、形式が正しくありません。ホスト名またはIPアドレスをCNに配置することは、IETF(wgetcurlなどのほとんどのツール)とCA/Bフォーラム(CAとブラウザ)の両方で非推奨です。

IETFフォーラムとCA/Bフォーラムの両方によると、サーバー名とIPアドレスは常にSubject Alternate Name(SAN)に含まれます。ルールについては、 RFC 5280、インターネットX.509公開鍵インフラストラクチャ証明書および証明書失効リスト(CRL)プロファイル および CA /ブラウザフォーラムベースライン要件 を参照してください。

ほとんどの場合、OpenSSL構成ファイルを使用して、ニーズに合わせて調整する必要があります。以下は私が使用するものの例です。これはexample-com.confと呼ばれ、-config example-com.confを介してOpenSSLコマンドに渡されます。


また、注意:すべてのマシンがlocalhostlocalhost.localdomainなどであると主張しています。localhostの証明書の発行には注意してください。私はしないそれをしないと言っています;関係するいくつかのリスクがあることを理解してください。

localhostに代わるものは次のとおりです。(1)DNSを実行し、マシンのDNS名に対して証明書を発行します。または、(2)静的IPを使用し、静的IPアドレスを含めます。


ブラウザーは、信頼されたルートにしないチェーンに戻らない自己署名証明書に関する警告を引き続き表示します。 curlwgetなどのツールは文句を言うことはありませんが、cURLの--cafileなどのオプションを使用して自己署名したものであると信頼する必要があります。ブラウザの信頼問題を克服するには、独自のCAになる必要があります。

「独自のCAになる」は、プライベートPKIの実行と呼ばれます。それほど多くはありません。パブリックCAが実行できるすべてのことを実行できます。唯一異なるのは、さまざまなストアにyourルートCA証明書をインストールする必要があることです。たとえば、cURLのcacerts.pmを使用するのと同じです。 cacerts.pmはルートCAのコレクションに過ぎず、クラブに参加しました。

独自のCAになる場合は、必ずルートCAの秘密キーをディスクに書き込んでオフラインにしてください。次に、署名要求に署名する必要があるときに、CD/DVDドライブにそれをポップします。これで、パブリックCAと同じように証明書が発行されます。

1つまたは2つの署名要求に署名すると、これはそれほど難しくありません。私は家でプライベートPKIを何年も実行しています。すべてのデバイスとガジェットが私のCAを信頼しています。

独自のCAになる方法の詳細については、 証明機関で証明書署名要求に署名する方法 および opensslで自己署名証明書を作成する方法 を参照してください。


以下の設定ファイルのコメントから...

自己署名(-x509の追加に注意)

openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem

署名リクエスト(-x509がないことに注意してください)

openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem

自己署名の印刷

openssl x509 -in example-com.cert.pem -text -noout

署名リクエストを印刷

openssl req -in example-com.req.pem -text -noout

構成ファイル

# Self Signed (note the addition of -x509):
#     openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem
# Signing Request (note the lack of -x509):
#     openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem
# Print it:
#     openssl x509 -in example-com.cert.pem -text -noout
#     openssl req -in example-com.req.pem -text -noout

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   It's sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = US

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName            = Locality Name (eg, city)
localityName_default        = New York

organizationName         = Organization Name (eg, company)
organizationName_default    = Example, LLC

# Use a friendly name here because it's presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you 
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = Example Company

emailAddress            = Email Address
emailAddress_default        = [email protected]

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

#  If RSA Key Transport bothers you, then remove keyEncipherment. TLS 1.3 is removing RSA
#  Key Transport in favor of exchanges with Forward Secrecy, like DHE and ECDHE.
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

DNS.1       = example.com
DNS.2       = www.example.com
DNS.3       = mail.example.com
DNS.4       = ftp.example.com

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1
# DNS.9     = fe80::1

Chromeでは次の操作が必要になる場合があります。それ以外の場合 ChromeはCommon Nameis invalid(ERR_CERT_COMMON_NAME_INVALID と文句を言うかもしれません。 SANのIPアドレスとこのインスタンスのCNの関係はわかりません。

# IPv4 localhost
# IP.1       = 127.0.0.1

# IPv6 localhost
# IP.2     = ::1
11
user56041

CommonNameは、HTTPリクエストのHost:ヘッダーとして送信されるものに対応している必要があります。あなたの場合、それは192.168.1.107になります(末尾のスラッシュなし)。

Webサーバーのホスト名を構成する

個人的には、Webサーバーにわかりやすいホスト名を設定します。メールのApache構成または仮想ホスト構成(Debianベースのディストリビューションでは/etc/Apache2/sites-enabled/000-default.confになる可能性が高い)で、ServerNameまたはServerAliasディレクティブを使用します。たとえば、

ServerName owncloud.masi

Apacheを再起動してDNSを構成するか、または(より簡単に)各クライアントの/etc/hostsにエントリを追加して、正しいIPアドレスをポイントします(例:

192.168.1.107   owncloud.masi
1