In addition to Advanced Painter which IIRC will do what you want there's this collection of scripts by Neil Blevins, the objectPainter script from that set of scripts will work as well. You simply need to set the script to "paint" one object per click, and align it to the surface's normal.
I second the edge loop idea, you can also Path Deform(WSM) a strip of rivets down a path spline. Likewise the spline painter scripts also have a spacing feature making it great for painting rivets evenly spaced on the surface. Personally I wouldn't waste my time with Advanced Painter it was a nice idea but Neil did it so…
You can also use the Align Normal tool. Attachment constraint isn't all that practical unless 1) your main mesh will never change and 2) you want the object to follow along on the mesh as it animates. To place a new vert you have to manually clone the rivet (which won't move) then go into the motion tab > parameters >…