在 DigitalOcean 中为我的 Web 应用程序安装 HTTPS,`https://XXX.XXX.XXX.XXX` 可以,但不能使用 `https://XXX.XXX.XXX.XXX:1234`
Installing HTTPS for my web app in DigitalOcean, `https://XXX.XXX.XXX.XXX` is okay but not with, `https://XXX.XXX.XXX.XXX:1234`
我遵循了这些教程。
- https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04,没有步骤 5.
- https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04,没有“(推荐)修改未加密的虚拟主机文件以重定向到 HTTPS”部分。
- 我把
ServerName server_domain_or_IP
和http://XXX.XXX.XXX.XXX:1234
放在了一起。
我现在拥有的。
http://XXX.XXX.XXX.XXX:1234
转到我的网络应用程序。我需要 SSL 才能访问网络摄像头。
https://XXX.XXX.XXX.XXX
在警告后进入 Apache 默认屏幕,这是预期的。
https://XXX.XXX.XXX.XXX:1234
进入 This site can’t provide a secure connection
的 Chrome 错误页面。
我需要访问 https://XXX.XXX.XXX.XXX:1234
出了什么问题,我应该怎么做?
编辑,更多细节。
- 全新安装,SSH 连接到 Droplet (Ubuntu LTS 16.04)。
ssh root@xxx:xxx:xxx:xxx
.
adduser notalentgeek
.
usermod -aG sudo notalentgeek
.
su notalentgeek
.
- 现在我在新创建的用户
notalentgeek
.
- 进入 "How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 16.04" 教程。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
.
- 在表格中我把所有的东西都写成"asd"(我脑子里的任意东西,都是这些东西)。除了 "Common Name (e.g. server FQDN or YOUR name) []:" 是
xxx:xxx:xxx:xxx
的 ip。
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
稍等
sudo nano /etc/apache2/conf-available/ssl-params.conf
.
复制粘贴教程中的设置(Whosebug 代码格式在这里不起作用!)。
来自 https://cipherli.st/
和https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol 所有 -SSLv2 -SSLv3
SSLHonorCipherOrder 开
暂时禁用预加载 HSTS。您可以使用注释掉的 header 行,其中包含
"preload" 指令,如果你理解其中的含义。
Header 始终设置 Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header 始终设置 Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header 始终设置 X-Frame-Options 拒绝
Header 始终设置 X-Content-Type-Options nosniff
需要 Apache >= 2.4
SSL 压缩关闭
SSLSessionTickets 关闭
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLOpenSSLConfCmd DHParameters“/etc/ssl/certs/dhparam.pem”
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
创建备份。
sudo nano /etc/apache2/sites-available/default-ssl.conf
.
ServerAdmin asd@asd.com
服务器名称 xxx:xxx:xxx:xxx
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
sudo ufw app list
,调整防火墙。我只是把他们放在那里的任何代码。
sudo ufw status
.
sudo ufw allow 'Apache Full'
.
sudo ufw delete allow 'Apache'
.
sudo ufw status
.
sudo a2enmod ssl
.
sudo a2enmod headers
.
sudo a2ensite default-ssl
.
sudo a2enconf ssl-params
.
sudo apache2ctl configtest
,我的情况下没有出现警告。但是,在教程中它可能有警告。这个命令 returns, Syntax OK
.
- 我之前提到的测试服务器,
https://xxx.xxx.xxx.xxx
工作,但 https://xxx.xxx.xxx.xxx:5000
不工作(5000 是我的 Flask 端口。)。
sudo nano /etc/apache2/sites-available/000-default.conf
- 添加
Redirect permanent "/" "https://xxx.xxx.xxx.xxx:5000/"
.
sudo apache2ctl configtest
结果为 Syntax OK
.
sudo systemctl restart apache2
.
- 这是从我的 Flask 应用程序启动的。
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
- 前往
http://xxx.xxx.xxx.xxx:5000/
,其中xxx.xxx.xxx.xxx
是DigitalOcean Droplet的IP,成功引用我的网络应用。但是网络应用需要访问网络摄像头和麦克风。
- 按照其他教程,https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps。
sudo apt-get install libapache2-mod-wsgi python-dev
.
sudo a2enmod wsgi
.
cd /var/www
.
sudo mkdir FlaskApp
.
cd FlaskApp
.
git clone https://github.com/notalentgeek/my_app --depth 1
.
cd my_app
.
- 正在安装,
pip3
和 virtualenv
。来自 http
的 运行 仍然可以!
sudo nano /etc/apache2/sites-available/FlaskApp.conf
(格式化也不行!)。
服务器名称 https://xxx.xxx.xxx.xxx:5000/
ServerAdmin asd@asd.com
WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi
订单允许、拒绝
允许所有
别名 /static /var/www/FlaskApp/my_app/static
订单允许、拒绝
允许所有
错误日志 ${APACHE_LOG_DIR}/error.log
日志级别警告
CustomLog ${APACHE_LOG_DIR}/access.log 合并
sudo a2ensite FlaskApp
.
cd /var/www/FlaskApp
.
sudo nano flaskapp.wsgi
.
sudo service apache2 restart
,教程说这将是一条警告消息。但是我没有得到。
sudo python3 -B my_app.py
结果如下。
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
- 在
http
中所有工作但不是 https
。
一些代码有 ##
使得 Whosebug 中的 indent-to-code 不工作。这是来自 PasteBin 的原始数据,https://pastebin.com/iShsHjCX.
这件事解决了我,。它更多地是在 Flask 方面而不是其他方面。
我遵循了这些教程。
- https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04,没有步骤 5.
- https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-16-04,没有“(推荐)修改未加密的虚拟主机文件以重定向到 HTTPS”部分。
- 我把
ServerName server_domain_or_IP
和http://XXX.XXX.XXX.XXX:1234
放在了一起。
我现在拥有的。
http://XXX.XXX.XXX.XXX:1234
转到我的网络应用程序。我需要 SSL 才能访问网络摄像头。https://XXX.XXX.XXX.XXX
在警告后进入 Apache 默认屏幕,这是预期的。https://XXX.XXX.XXX.XXX:1234
进入This site can’t provide a secure connection
的 Chrome 错误页面。
我需要访问 https://XXX.XXX.XXX.XXX:1234
出了什么问题,我应该怎么做?
编辑,更多细节。
- 全新安装,SSH 连接到 Droplet (Ubuntu LTS 16.04)。
ssh root@xxx:xxx:xxx:xxx
.adduser notalentgeek
.usermod -aG sudo notalentgeek
.su notalentgeek
.- 现在我在新创建的用户
notalentgeek
. - 进入 "How To Create a Self-Signed SSL Certificate for Apache in Ubuntu 16.04" 教程。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
.- 在表格中我把所有的东西都写成"asd"(我脑子里的任意东西,都是这些东西)。除了 "Common Name (e.g. server FQDN or YOUR name) []:" 是
xxx:xxx:xxx:xxx
的 ip。 sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
稍等sudo nano /etc/apache2/conf-available/ssl-params.conf
.复制粘贴教程中的设置(Whosebug 代码格式在这里不起作用!)。
来自 https://cipherli.st/
和https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol 所有 -SSLv2 -SSLv3 SSLHonorCipherOrder 开
暂时禁用预加载 HSTS。您可以使用注释掉的 header 行,其中包含
"preload" 指令,如果你理解其中的含义。
Header 始终设置 Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
Header 始终设置 Strict-Transport-Security "max-age=63072000; includeSubdomains" Header 始终设置 X-Frame-Options 拒绝 Header 始终设置 X-Content-Type-Options nosniff
需要 Apache >= 2.4
SSL 压缩关闭 SSLSessionTickets 关闭 SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
SSLOpenSSLConfCmd DHParameters“/etc/ssl/certs/dhparam.pem”
sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/default-ssl.conf.bak
创建备份。sudo nano /etc/apache2/sites-available/default-ssl.conf
.ServerAdmin asd@asd.com 服务器名称 xxx:xxx:xxx:xxx
DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost>
sudo ufw app list
,调整防火墙。我只是把他们放在那里的任何代码。sudo ufw status
.sudo ufw allow 'Apache Full'
.sudo ufw delete allow 'Apache'
.sudo ufw status
.sudo a2enmod ssl
.sudo a2enmod headers
.sudo a2ensite default-ssl
.sudo a2enconf ssl-params
.sudo apache2ctl configtest
,我的情况下没有出现警告。但是,在教程中它可能有警告。这个命令 returns,Syntax OK
.- 我之前提到的测试服务器,
https://xxx.xxx.xxx.xxx
工作,但https://xxx.xxx.xxx.xxx:5000
不工作(5000 是我的 Flask 端口。)。 sudo nano /etc/apache2/sites-available/000-default.conf
- 添加
Redirect permanent "/" "https://xxx.xxx.xxx.xxx:5000/"
. sudo apache2ctl configtest
结果为Syntax OK
.sudo systemctl restart apache2
.- 这是从我的 Flask 应用程序启动的。
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance. * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
- 前往
http://xxx.xxx.xxx.xxx:5000/
,其中xxx.xxx.xxx.xxx
是DigitalOcean Droplet的IP,成功引用我的网络应用。但是网络应用需要访问网络摄像头和麦克风。 - 按照其他教程,https://www.digitalocean.com/community/tutorials/how-to-deploy-a-flask-application-on-an-ubuntu-vps。
sudo apt-get install libapache2-mod-wsgi python-dev
.sudo a2enmod wsgi
.cd /var/www
.sudo mkdir FlaskApp
.cd FlaskApp
.git clone https://github.com/notalentgeek/my_app --depth 1
.cd my_app
.- 正在安装,
pip3
和virtualenv
。来自http
的 运行 仍然可以! sudo nano /etc/apache2/sites-available/FlaskApp.conf
(格式化也不行!)。服务器名称 https://xxx.xxx.xxx.xxx:5000/ ServerAdmin asd@asd.com WSGIScriptAlias / /var/www/FlaskApp/flaskapp.wsgi 订单允许、拒绝 允许所有 别名 /static /var/www/FlaskApp/my_app/static 订单允许、拒绝 允许所有 错误日志 ${APACHE_LOG_DIR}/error.log 日志级别警告 CustomLog ${APACHE_LOG_DIR}/access.log 合并
sudo a2ensite FlaskApp
.cd /var/www/FlaskApp
.sudo nano flaskapp.wsgi
.sudo service apache2 restart
,教程说这将是一条警告消息。但是我没有得到。sudo python3 -B my_app.py
结果如下。
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance. * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
- 在
http
中所有工作但不是https
。
一些代码有 ##
使得 Whosebug 中的 indent-to-code 不工作。这是来自 PasteBin 的原始数据,https://pastebin.com/iShsHjCX.
这件事解决了我,