ビルド自己HTTPSサーバへのCA証明書

CA充電されるので、ブラウザにCAによって効果HTTPSを達成するために、あなたは自己CAことができますので、12306枚のチケットは、自分のウェブサイト上で証明書をインポートする必要があります一度。

HTTPSについて

2015年、アリババの淘宝網は、(モバイルクライアントを含む)Lynxは、変換ケースは、世界最大の電子ビジネスプラットフォームの完全停止となっているサイト全体のHTTPSの暗号化を有効にし、「ダブル11」の試験に合格し、HTTPSます。

3つの主要な問題に対処するために、HTTPSサイト全体の必要性。

最初は、三つの主要なポイントのパフォーマンスです。

  1. HTTPSは、このようにネットワークが長くなると、ユーザーは多少時間がかかるHTTPからHTTPSへジャンプかかり、いくつかのハンドシェークが必要です。
  2. RSA HTTPS DOデバイスの性能に影響を与える可能性があり、確認してください。
  3. すべてのCDNノードはHTTPSをサポートするために、そこに非常に複雑で、DDoS攻撃の課題に直面して解決策を必要としています。

第二に、周辺の互換性:

  1. すべてのページがHTTPS埋め込みリソースを変更する必要があり、これらのリソースは、そうでない場合は、ブラウザが警告する、異なる部門や画像、動画、フォームなどを含めても、さまざまな企業から来るかもしれません。
  2. モバイルクライアント(APP)もHTTPSを適応させる必要がある、修正するために調整を行うことが必要です。
  3. 問題を解決することはできませんサードパーティのサイトはリファラーを参照してください。
  4. すべての開発およびテスト環境は、HTTPSのアップグレードを行う必要があります。

最後に、ラインのスムーズな切り替えを確保するために、私たちは事前に起こりうる様々な状況に対処するための計画を大量に準備する必要があります。

これまでのところ、主流のサイトのほとんどは、すでになど淘宝網、Jingdongは、Baiduは、B駅、Youkuの、としてHTTPSにHTTPの移行を完了している、ファンタスティックアート、详细と他のサイトを愛し、使用HTTPテンセント映像に残っています。


次の簡単な原則に導入し、暗号化HTTPS


httpsのプロフィール

HTTPS(フルネーム:にSecureSocket層の上にハイパーテキスト転送プロトコルは )、 伝送暗号化と認証を通じて伝送のセキュリティを確保するために、HTTPに基づいて、ターゲットHTTPチャネルのために安全です。
SSL(セキュアソケットレイヤーセキュアソケットレイヤー)、およびその後継者、トランスポート層セキュリティ(トランスポート層セキュリティ、TLS)は、ネットワークのための安全な通信プロトコルのセキュリティとデータの整合性を提供します。

HTTPS SSL層は、SSL暗号化ベースのセキュリティへのHTTPに基づいて追加されました。異なるHTTPS及びHTTPのデフォルトのポート、および(TCPとHTTPとの間、すなわち、アプリケーション層とトランスポート層との間の)暗号化/認証の層があります。

SSLプロトコルは、二つの層に分けることができます。

  • SSLレコードプロトコル(SSLレコードプロトコル)は:ハイレベルのプロトコル・データ・カプセル化、圧縮、暗号化サポートの基本的な機能を提供するために、信頼性の高いトランスポートプロトコル(例えば、TCP)に基づいています。
  • SSLハンドシェイクプロトコル(SSLハンドシェイクプロトコル):これは、双方の認証との間の通信の実際の開始前のデータ伝送のためのSSLレコードプロトコルの上に構築され、暗号化アルゴリズム、暗号化キーの交換などを交渉します。

ここに画像を挿入説明
関連のSSLハンドシェイクプロトコルとHTTPS本館プロセス。

なぜ移行をHTTPからHTTPSへ

HTTPデータ伝送プロトコルは、プレーンテキストは、したがって、HTTPの安全でない個人情報、暗号化することができ、データ伝送のプライバシーを確保するために、そうNetscapeのSSL(セキュアソケットレイヤー)に設計されたプロトコルプロトコルを使用して送信され、暗号化されていませんデータ伝送のためのHTTPプロトコルは、このように、暗号化されたHTTPSを生まれました。
簡単に言えば、HTTPSプロトコルはHTTPプロトコルのセキュリティよりもネットワーク認証プロトコル、プロトコルが送信を暗号化することができSSL + HTTPで構成されています。
次のようにHTTPS及びHTTPの主な違い:
  1、HTTPSプロトコルは、このように料金が必要、一般にあまり自由証明書の証明書を要求するCA(認証局、すなわち権威デジタル証明書)を必要とします。
  図2に示すように、HTTPはハイパーテキスト転送プロトコルであり、情報は、HTTPSがセキュリティSSL転送プロトコルで暗号化され、平文で送信されます。
  3、HTTPおよびHTTPSの使用は、前者が443であり、80である、ポートと同じではない、完全に異なる接続です。
  図4は、HTTP接続が非常に簡単であり、ステートレスであるHTTPよりもHTTPSプロトコルSSL + HTTP暗号化伝送プロトコル、ネットワークプロトコルの認証、セキュリティプロトコルによって構成されています。

暗号化に関するコミュニケーション

対称暗号化

単一の暗号鍵暗号を用いる方法は、同じキーは、単一鍵暗号と呼ばれる、情報の暗号化と復号化を同時に使用することができます。

たとえば:シーザー暗号
シーザー暗号は•ローマ時代、宅配便による暗号化のための運用コマンドの膨張によって作成されたユリウス・カエサル(ジュリアス・シーザー)です。アルファベットは、暗号化の位置と動きを所定の。例えば、2つのモバイル右場合、文字AをCに変更され、Dは、文字Bとなり、...、Zは文字Xとなり、Yは、文字ZはB.なり、文字Aに変更されます

利点:

算法公开、计算量小、加密速度快、加密效率高。

短所:

如果一方的密钥被泄露,加密信息也就不安全了。

非対称暗号化

公開鍵(公開鍵:公開鍵とも呼ばれる)と秘密鍵(PrivateKeyの:秘密鍵とも呼ばれる)非対称暗号化アルゴリズムは、2つのキーが必要です。

公開鍵と秘密鍵は、データが公開鍵で暗号化されている場合にのみ対応する秘密鍵を復号化することができ、ペアで、逆に、またその後、復号化するための公開鍵を使用し、最初の秘密鍵で暗号化することができます。暗号化と復号化は、2つの異なるキーを使用しているので、ので、このアルゴリズムは、非対称暗号化アルゴリズムと呼ばれています。

基本的なプロセスのアルゴリズム非対称暗号化は、機密情報の交換である:
党は、公開鍵のペアを生成し、当事者に鍵を使用して他の役割(B)に情報を送信するために、ニーズを開示した(当事者Aの公開鍵)の機密情報を暗号化してから相手に送信され、党はその後、自分の秘密鍵は、暗号化された情報を復号化します。ただ、相手Bは共感、当事者がそれを解読するための独自の秘密鍵を使用し、暗号化データへの使用Bの公開鍵を返信したいと考えています。

利点:

一方密钥的丢失不会导致通信被破解,相对更安全。

短所:

加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

利用シナリオ

通信のシナリオのシミュレーション:

有A、B、C、D四个用户,A想让B、C、D与自己进行私密通信。

対称暗号化した場合、ABは、それぞれ、AC、AD間のキーを交渉する必要があります。

非対称暗号化、のみ、B、C、Dに自分の公開鍵を秘密鍵Aを保持する必要がある場合
かどうかはB、C、Dどの党のみAは秘密鍵で復号化することができている公開鍵暗号化メッセージを使用して。

セキュリティの考慮事項:

通信前需要提前协商密钥。
  • 対称暗号化
    キャプチャが傍受された場合、他のユーザーとのメッセージAキーのネゴシエーションは、それが「中間者攻撃」、すなわち、通信データが検出されたか、置換攻撃に対して脆弱です。

  • 非対称暗号化
    、他のユーザー、男性Aの秘密鍵のペアを構築する必要性、B、C、Dに送信する公開鍵、リテンション自分の秘密鍵を相談するために同じ必要とAキーを押します。
    この時、B、C、DへのメッセージAがハッカーのEによって傍受された場合、E Aの公開鍵を予約することができ、その後、公開鍵と秘密鍵の新しいペアを構成し、秘密鍵が保持され、Bへの彼の公開鍵、 C、D.

非対称暗号化によれば、E仲介通信になる:
通信データをハイジャック、E公開鍵暗号化を使用してB、C、D及びデータE Aを送信し、その後、Aの公開鍵を使用して、データを解読するために、自身の秘密鍵を使用A.に送信された暗号化されたデータ
ユーザA、B、C、Dのために、彼らは、通信目的のためにその中間が露出されるかわかりません。

どのようにコミュニケーションセキュリティのことができます。

利用非对称加密来确认双方身份建立连接,即SSL握手。

公共信託機関Fを導入するには、この時点の必要性では、ユーザーの身元を証明するために使用、または現在の通信環境では、個人が自分自身のために身元を証明することができません。

代理店はCAです。
CAは、自分の公開鍵と秘密鍵のペアを持っている、公開鍵は、すべてのユーザー、民間独自の予約に開放されています。
Bは、CAの公開鍵で復号化できるのであれば、AがBに自分自身を証明したい場合は、それ(署名)を使用してメッセージを暗号化するために彼の最初の要求CA CA秘密鍵を与え、そのメッセージは、このメッセージことを示し、Bに送られ、認定されたCAは、他人に改ざんされていませんでした。

「これは、CA証明書は、BにAから送られてきたで - でも、Bに傍受されたデータA場合、ブローカはメッセージのみの内容を解読するためにCAの公開鍵を使用することができますので、この時点で、中間者攻撃は、もはや効果的ではありませんデータ。 " メッセージのみがCA認証されているかどうかを確認するためにCAの公開鍵、暗号化データに自分の秘密鍵で仲買人とBは、CAの公開鍵でBはアンタイドすることはできませんので。しかし、仲買人は、メッセージの内容を改ざんすることはできません

CAのセキュリティ証明書には、それが喜んであれば、それは簡単に国で開始することができ、ファイアウォールのDNSポイズニング、で、国内外で任意のサイトのSSL証明書を改ざんすることができ、CNNIC証明書事件が信頼されたルートCAとして、CNNICが発生している、膨大です任意のウェブサイト攻撃、通信データの傍受のための仲介。

対称暗号化は検討してください:

就对称加密而言,公信机构无法达到认证效果。
因为对称加密只有一个密钥,一旦公开任何人都可以对加密信息进行篡改。

これらは、対称暗号化と非対称暗号化には2つだけではなく、対称暗号化は、いずれかの暗号化データへの秘密鍵を使用できる2つの対称暗号化の間、公開鍵の人々は、このニュースは私です言われてきた、比較的大きな差を利用しています、またはあなただけの秘密鍵でデータを復号化することができますので、人々は、データを送信するために公開鍵を保証しているせることができます。

通信効率を考えてみます。

如果需要频繁通信,每次通信都使用非对称加密需要花费较多的时间。

対称暗号化と非対称暗号化は、それぞれの利点、より良い役割を果たしているために、両方の組み合わせを持っています。
実際の使用では、非対称暗号化は、非対称暗号化された対称暗号鍵の安全な接続のネゴシエーションを経て、接続を確立するために使用されます。
キー交渉プロセスが安全であるので、それは我々は、後続の高速通信のための対称暗号鍵を使用することができ、改ざん鍵を交渉することはありません。

httpsのセットアッププロセス

以下は、HTTPSの実際のプロセスを説明します。
ここに画像を挿入説明

  1. CAは、各ブラウザベンダーへの証明書(公開信頼証明書)を所有する、メーカーは、それぞれのブラウザに証明書を設定します。
  2. CAのサイト独自の資格情報(資格情報)は、CAの秘密鍵は、証明書に署名するために使用させて、CAの署名後にサイトに送り返さ。このプロセスでは、CAは、サイトの信頼性を検証する必要があり、サイトはまた、単にCA署名付き証明書を送信していない、これは(サイトのURLを含む)のサイトと公開鍵のサイト証明書が必要ですが、また、署名と一緒にいくつかの追加情報が含まれています。
  3. ブラウザのユーザーは、サイトへの安全な接続、ブラウザベースの証明書情報の後に利用者に発行されたCA署名付き証明書のサイトは、ブラウザの独自のCA証明書から対応する公開鍵認証を見つけるために、チェックCAの署名を行うことを要求します。
  4. 確認した場合、それは信頼性を証明し、ユーザーが安全な接続のための公開WebサイトのIDを通じて提供することができ、およびフォローアップ協議のウェブサイト、対称暗号化キーを。

自己CA証明書

実験環境:

  • オペレーティングシステム:CentOSの7
  • Apacheのバージョン:httpdの
  • PHPのバージョン:PHP7

バージョンが原因のOpenSSL 1.0.1fのバージョンで1.0.1fは、アップグレードすることを推奨値よりも低い場合ハートブリードの脆弱性を持って、OpenSSLを確認してください。
ビューのバージョン:$openssl version
バージョンのアップデート:$sudo yum update openssl

まずmyCAディレクトリには、CAの自己に関する情報を格納するために使用されます。

cd && mkdir -p myCA/signedcerts && mkdir myCA/private && cd myCA

myCA用于存放 CA 根证书,证书数据库,以及后续服务器生成的证书,密钥以及请求。
signedcerts保存签名证书的 copy,private包含私钥。

之后配置myCA相关参数,在myCA目录下进行:

echo '01'>serial && touch index.txt

然后创建 caconfig.cnf 文件(自建CA的配置文件):

vim ~/myCA/caconfig.cnf

caconfig.cnf文件内容如下:

# My sample caconfig.cnf file.
#
# Default configuration to use when one is not provided on the command line.
#
[ ca ]
default_ca      = local_ca
#
#
# Default location of directories and files needed to generate certificates.
#
[ local_ca ]
dir             = /home/<username>/myCA

certificate     = $dir/cacert.pem
database        = $dir/index.txt
new_certs_dir   = $dir/signedcerts
private_key     = $dir/private/cakey.pem
serial          = $dir/serial
#       
#
# Default expiration and encryption policies for certificates.
#
default_crl_days        = 365
default_days            = 1825
default_md              = SHA256
#       
policy          = local_ca_policy
x509_extensions = local_ca_extensions
#       
#
# Default policy to use when generating server certificates.  The following
# fields must be defined in the server certificate.
#
[ local_ca_policy ]
commonName              = supplied
stateOrProvinceName     = supplied
countryName             = supplied
emailAddress            = supplied
organizationName        = supplied
organizationalUnitName  = supplied
#       
#
# x509 extensions to use when generating server certificates.
#
[ local_ca_extensions ]
subjectAltName          = DNS:localhost
basicConstraints        = CA:false
nsCertType              = server
#       
#
# The default root certificate generation policy.
#
[ req ]
default_bits    = 2048
default_keyfile = /home/<username>/myCA/private/cakey.pem

default_md      = SHA256
#       
prompt                  = no
distinguished_name      = root_ca_distinguished_name
x509_extensions         = root_ca_extensions
#
#
# Root Certificate Authority distinguished name.  Change these fields to match
# your local environment!
#
[ root_ca_distinguished_name ]
commonName              = MyOwn Root Certificate Authority # CA机构名
stateOrProvinceName     = JS                               # CA所在省份
countryName             = CN                               # CA所在国家(仅限2个字符)
emailAddress            = [email protected]                     # 邮箱
organizationName        = XXX                              # 
organizationalUnitName  = XXX                              # 
#       
[ root_ca_extensions ]
basicConstraints        = CA:true

其中dir和default_keyfile的路径需要改成自己的username

生成 CA 根证书和密钥:

export OPENSSL_CONF=~/myCA/caconfig.cnf       #该命令用于给环境变量 OPENSSL_CONF 赋值为caconfig.cnf。
openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825             # 生成 CA 根证书和密钥

该步骤需要用户设置一个密码,请牢记。

以上步骤生成了 CA 自签名根证书,和 RSA 公/私密钥对,证书的格式是 PEM,有效期是1825天。

/myCA/cacert.pem: CA 根证书
/myCA/private/cakey.pem: CA 私钥

生成服务器配置文件exampleserver.cnf:

vim ~/myCA/exampleserver.cnf

exampleserver.cnf文件内容如下:

#
# exampleserver.cnf
#

[ req ]
prompt             = no
distinguished_name = server_distinguished_name

[ server_distinguished_name ]
commonName              = localhost          # 服务器域名
stateOrProvinceName     = JS                 # 服务器所在省份
countryName             = CN                 # 服务器所在国家(仅限2个字符)
emailAddress            = [email protected]       # 邮箱
organizationName        = XXX                # 
organizationalUnitName  = XXX                # 

生成服务器证书和密钥:

export OPENSSL_CONF=~/myCA/exampleserver.cnf   # 该命令设置环境变量 OPENSSL_CONF,使得 openssl 更换配置文件。
openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM

同样的,需要设置密码。

之后,有2种对临时密钥的操作,选择其一即可:
1.将临时私钥转换为 unencrypted key,即密钥不加密状态:

penssl rsa -in tempkey.pem -out server_key.pem

需要输入密码短语。

2.如果希望将 key 保持为加密状态,直接改名:

mv tempkey.pem server_key.pem

两者的区别是,第二种需要在服务器启动时输入私钥的密码,否则会导致服务器启动失败,但第二种安全性高于第一种,可以更好的保护密钥。

使用 CA key 对服务器证书签名:

export OPENSSL_CONF=~/myCA/caconfig.cnf
openssl ca -in tempreq.pem -out server_crt.pem

删除临时证书和密钥:

rm -f tempkey.pem && rm -f tempreq.pem

现在,自签名的服务器证书和密钥对便产生了:

  • server_crt.pem : 服务器证书文件
  • server_key.pem : 服务器密钥文件

以下通过LAMP搭建一个网站进行验证


配置httpd(Apache)

第一步:安装Apache服务程序(apache服务的软件包名称叫做httpd)

yum install httpd -y

第二步: 将Apache服务添加到开机自启中

systemctl start httpd
systemctl enable httpd

第三步:打开浏览器 测试 127.0.0.1,可以看到默认主页

httpd主要目录:

  • 服务目录:/etc/httpd
  • 主配置目录:/etc/httpd/conf/httpd.conf
  • 网站数据目录:/var/www/html
  • 访问日志:/var/log/httpd/access_log
  • 错误日志:/var/log/httpd/error_log

配置php7

1、安装源

安装php72w需要配置额外的yum源,否则会报错不能找到相关软件包。

php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic,如果跳过epel-release安装webtatic的时候会有错误。

安装需要的命令是:

rpm -Uvh https://dl.Fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

也可以选择下面的这个命令,是一样的效果:

yum install epel-release -y
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

2、清除历史版本

为了防止CentOS上面发生php冲突,所以,这个命令还是先执行一下更好些:

yum -y remove php*

3、安装扩展包

事实上,这里面的对应扩展库很多,一定要注意的有cli和fpm这两个包,其它的相关包看需要:

yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-mysql

由于后面要用MySQL,所以mysql包也是需要的。

比较全的版本:

yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml

配置MySQL

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。
网络环境允许的话直接安装:

wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

mysql-community-server较大如果下载很慢,可以到国内镜像源下载:
http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/
下载后解压到图中文件目录下:
ここに画像を挿入説明
注意文件权限,再安装:

yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server

mysql有初始默认密码,使用以下命令查找:

grep "password" /var/log/mysqld.log

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库。
修改密码:

mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

新しいパスワードの設定があまりにも簡単なセットが文句を言う場合場合は、具体的値validate_password_policyに関連する規範MySQLのパスワード設定が存在するので、理由がある、あなたは長いパスワードは大文字と小文字を区別下線付きで試すことができます。

MySQLの完全な初期パスワードは、ビュールール

SHOW VARIABLES LIKE 'validate_password%';

次のコマンドで変更することができます。

mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=1;

単純なパスワードの後リセットすることができます。

SSLの構成

以下のモジュールを必要とするSSL:
ここに画像を挿入説明
変更のssl.confの:

cd /etc/httpd/conf.d
sudo vim ssl.conf

ここに画像を挿入説明
DocumentRootのは、自分のページのディレクトリを変更し、自己CAの証明書キーのソースを変更するには:
ここに画像を挿入説明

ウェブの設定

サイトは/ var / www / html /ディレクトリの下のフォルダにコピーする必要があります
ファイルある/etc/httpd/conf/httpd.confファイル名のウェブサイトを変更するには:
ここに画像を挿入説明
あなたのサイトのニーズのデータベースを作成します。

create database myzoo;
use myzoo; 
create table Person(PersonID int primary key auto_increment, Password varchar(100),Salt varchar(100),Username varchar(100),Token varchar(100),Zoobars int default 10, Profile varchar(5000));

再起動httpdが現在のページを表示します。

setenforce  0
sudo systemctl restart httpd

SELinuxをオフにするか、エラーになります、(CAのサイトではありません)証明書のパスワードは、サービスを開始する前に、以前の設定を確認します。
ここに画像を挿入説明
現在、通常のHTTP接続、ブラウザに何も自作のCAが存在しないため。

ブラウザの証明書のインポート

ウェブサイトの証明書が自己署名CAであるので、必要が手動でCA証明書をインポートするので、ブラウザではなく、信頼を行います。

一例として、クロムで: - >詳細設定- >プライバシーとセキュリティ- [設定]> [証明書の管理
ここに画像を挿入説明
証明書の詳細と自己のインポートCA証明書を表示することができ
ここに画像を挿入説明
、サイトを設定する前に、証明書は、ローカルホストであるドメイン名を設定したためそうはlocalhostによるHTTPSドメインの必要性接続には、127.0.0.1を使用することはできません。
ここに画像を挿入説明
緑ロック状態にアクセスするためのアドレスバーが正常に構築されたHTTPS、発生します。

おすすめ

転載: www.cnblogs.com/ustca/p/12060580.html