title: Create & run secure (https) nodejs express app with self-signed certificates - Segmentation fault
body: <p>Following this guide <a href="https://git.coolaj86.com/coolaj86/ssl-root-cas.js/src/branch/master/Painless-Self-Signed-Certificates-in-node.js.md" rel="nofollow noreferrer">https://git.coolaj86.com/coolaj86/ssl-root-cas.js/src/branch/master/Painless-Self-Signed-Certificates-in-node.js.md</a>, I've created a Root CA and Signed Certificate with the following script:</p>
  
  <p><strong>make-certs.sh</strong></p>
  
  <pre><code>#!/bin/bash
  FQDN=`hostname`
  
  # make directories to work from
  rm -rf certs
  mkdir -p certs/{server,client,ca,tmp}
  
  # Create your very own Root Certificate Authority
  openssl genrsa \
    -out certs/ca/my-root-ca.key.pem \
    2048
  
  # Self-sign your Root Certificate Authority
  # Since this is private, the details can be as bogus as you like
  openssl req \
    -x509 \
    -new \
    -nodes \
    -key certs/ca/my-root-ca.key.pem \
    -days 1024 \
    -out certs/ca/my-root-ca.crt.pem \
    -subj "/C=US/ST=Utah/L=Provo/O=${FQDN}/CN=${FQDN}"
  
  # Create a Device Certificate for each domain,
  # such as example.com, *.example.com, awesome.example.com
  # NOTE: You MUST match CN to the domain name or ip address you want to use
  openssl genrsa \
    -out certs/server/privkey.pem \
    2048
  
  # Create a request from your Device, which your Root CA will sign
  openssl req -new \
    -key certs/server/privkey.pem \
    -out certs/tmp/csr.pem \
    -subj "/C=US/ST=Utah/L=Provo/O=${FQDN}/CN=${FQDN}"
  
  # Sign the request from Device with your Root CA
  # -CAserial certs/ca/my-root-ca.srl
  openssl x509 \
    -req -in certs/tmp/csr.pem \
    -CA certs/ca/my-root-ca.crt.pem \
    -CAkey certs/ca/my-root-ca.key.pem \
    -CAcreateserial \
    -out certs/server/cert.pem \
    -days 500
  
  # Create a public key, for funzies
  # see https://gist.github.com/coolaj86/f6f36efce2821dfb046d
  openssl rsa \
    -in certs/server/privkey.pem \
    -pubout -out certs/client/pubkey.pem
  
  # Put things in their proper place
  rsync -a certs/ca/my-root-ca.crt.pem certs/server/chain.pem
  rsync -a certs/ca/my-root-ca.crt.pem certs/client/chain.pem
  cat certs/server/cert.pem certs/server/chain.pem &gt; certs/server/fullchain.pem
  </code></pre>
  
  <p>I then setup my <strong>package.json</strong> with the following:</p>
  
  <pre><code>{
    "name": "api-server",
    "version": "1.0.0",
    "description": "API Server",
    "main": "api-server.js",
    "dependencies": {
      "body-parser": "^1.15.2",
      "express": "^4.14.0"
    }
  }
  </code></pre>
  
  <p>Ran the <strong>npm install</strong> and then created my <strong>api-server.js</strong> like this:</p>
  
  <pre><code>// Load libraries
  var https      = require('https'),
      fs         = require('fs'), 
      express    = require('express'), 
      app        = express(),
      bodyParser = require('body-parser');
  
  // Server setting
  var port = process.env.PORT || 8080;
  
  // Register body-parser
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: true }));
  
  // Configure router
  var router = express.Router();
  app.use('/api/v1', router);
  
  // Register routes
  router.get('/', function(req, res) {
      res.json({ success: true });
  });
  
  // Create &amp; run https api server
  var secureServer = https.createServer({
      key: fs.readFileSync('./certs/server/privkey.pem'),
      cert: fs.readFileSync('./certs/server/fullchain.pem'),
      requestCert: true,
      rejectUnauthorized: false
  }, app).listen(port, function() {
      console.log('API Server Started On Port %d', port);
  });
  </code></pre>
  
  <p>Finally, I started the app using <strong>node api-server.js</strong> and visited <code>https://&lt;my-ip&gt;:8080/</code> in chrome.</p>
  
  <p>I got the following error:</p>
  
  <pre><code>This site can’t be reached
  192.168.0.21 refused to connect.
  </code></pre>
  
  <p>Looking on the console log of server, I saw the following:</p>
  
  <p><a href="https://i.stack.imgur.com/5Z0gN.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/5Z0gN.png" alt="enter image description here"></a></p>
  
  <p>Any ideas what I might be doing wrong here?</p>