使用Nginx和OpenSSL搭建本地HTTPS的ArcGIS for JavaScript 4.6

HTTPS的初试:
前两天看谷歌开发者公众号了解到Google Chrome要在68这个版本时彻底将HTTP网站列为不安全,要求全部网站都要支持HTTPS,由此萌生了先在本地搭建一些HTTPS的站点的想法。

背景

由于工作任务,最近一直在写本子,了解了一些GIS方面的小知识,但是学的很浅显,其中就包括ArcGIS for JavaScript。基于谷歌公众号里面的启发,就想着在本地搭建一个HTTPS结构的ArcGIS for JavaScript站点。

准备工作

  • Nginx
  • OpenSSL
  • ArcGIS for JavaScript 4.6

安装配置

Nginx

下载好Nginx后,解压到C:\,得到nginx.exeC:\nginx\根目录下,并将C:\nginx添加到系统环境变量的PATH中,即可完成Nginx的安装和配置。

OpenSSL

下载好OpenSSL后,双击安装,将安装目录设置为C:\中,安装后即为C:\OpenSSL-Win64,同理将C:\OpenSSL-Win64\bin添加到系统环境变量的PATH中,即可完成Nginx的安装和配置。

ArcGIS for JavaScript 4.6

下载好ArcGIS for JavaScript 4.6后,解压到C:\nginx\html\中,得到一个C:\nginx\html\arcgis_js_api\library\4.6\类似的目录。和往常一样,需要修改init.jsdojo.js中的域名信息。

将init.js和dojo.js中的以下的信息:

1
baseUrl:"https://[HOSTNAME_AND_PATH_TO_JSAPI]dojo"

修改为:

1
baseUrl:"http://localhost/arcgis_js_api/library/4.6/dojo"

注意:将https改为http

自此,安装配置即已经完成,下一步需要生成并在Nginx中配置证书。

证书的生成与配置

生成证书

在网上查资料,有大佬是这样子做的,我按照做了一遍,第一条语句没问题,但是第二条语句报了错,发现无法生成.cer和.req文件(估计是软件版本问题导致的),又是百度,又是谷歌,还是Stack Overflow的,消耗了不少时间。

openssl req -x509 -newkey rsa:2048 -out LocalhostCA.cer -outform PEM -keyout LocalhostCA.pvk -days 10000 -verbose -config LocalhostCA.cnf -nodes -sha256 -subj “/CN=localhost CA”

openssl req -newkey rsa:2048 -keyout Localhost.pvk -out Localhost.req -subj /CN=localhost -sha256 -nodes

openssl x509 -req -CA LocalhostCA.cer -CAkey LocalhostCA.pvk -in Localhost.req -out Localhost.cer -days 10000 -extfile Localhost.ext -sha256 -set_serial 0x1111

最后根据报错信息

1
2
Subject does not start with "/"
Problems makeing certificate request

我尝试着将-subj参数删除,执行了一次,提示我输入Localhost.cnf文件中req_distinguished_name的配置项(重新输入一次就可以了~)。

同理,第三条语句也将-subj参数去除,所有的文件就都生成了。

配置证书和Nginx

将生成的Localhost.cer和Localhost.pvk文件复制到Nginx的conf目录中。
修改nginx.conf文件,添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# HTTPS server
server{
listen 443;
server_name localhost;
ssl on;
ssl_certificate Localhost.cer;
ssl_certificate_key Localhost.pvk;
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
add_header 'Access-Control-Allow-Headers' 'Content-Type';
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET';

location / {
root html;
index index.html 50x.html;
}
}

重启Nginx

1
nginx.exe -s reload

导入证书

在IE中打开Internet选项,内容>>证书,在受信任的根证书颁发机构中导入前面生成的LocalhostCA.cer文件。
尝试访问https://localhost/arcgis_js_api/library/4.6/init.js,自此所有配置都已经成功。



全文重点来了!
1
2
3
4
// 值此3.8女神节,祝福所有的女性:
for (int i = 0; i < forever; i++) {
printf("Happiness Everyday!");
}
文章目录
  1. 1. 背景
  2. 2. 准备工作
  3. 3. 安装配置
    1. 3.1. Nginx
    2. 3.2. OpenSSL
    3. 3.3. ArcGIS for JavaScript 4.6
  4. 4. 证书的生成与配置
    1. 4.1. 生成证书
    2. 4.2. 配置证书和Nginx
    3. 4.3. 重启Nginx
    4. 4.4. 导入证书